Форум сайта python.su
как зделать чтобы из одной формы откривалась вторая и при етом первая не закрывалась(PyQt5)
Нужно чтобы из этой формы при нажатие на кнопки begin test соотвествено открывалися формы begin test
а оно у меня отрывает на секунду форму и форма пропадает
Вот код главной формы
from PyQt5 import QtCore,QtGui,QtWidgets,uic import sys import test import begin class MyWindow(QtWidgets.QWidget): def __init__(self): super(MyWindow, self).__init__() self.ui = uic.loadUi("home.ui") ........................................................ ............................................................... self.ui.test.clicked.connect(self.test) self.ui.begin.clicked.connect(self.begin) self.ui.show() def test(self): app = QtWidgets.QApplication(sys.argv) a = test.Test() a.show() sys.exit(app.exec_()) def begin(self): ap = QtWidgets.QApplication(sys.argv) a = begin.Begin() a.show() sys.exit(ap.exec_()) if __name__ == '__main__': app1 = QtWidgets.QApplication(sys.argv) window = MyWindow() sys.exit(app1.exec())
from PyQt5 import QtCore,QtGui,QtWidgets,uic import sys import datetime class Begin(QtWidgets.QMainWindow): def __init__(self): super(Begin, self).__init__() self.ui = uic.loadUi("begin.ui") self.ui.lb.setVisible(0) ............................................................ self.ui.open2.clicked.connect(self.open_file2) self.ui.next2.clicked.connect(self.next2) self.ui.next3.clicked.connect(self.next3) self.ui.next4.clicked.connect(self.next4) self.ui.show() .............................................................. if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) window = Begin() sys.exit(app.exec())
from PyQt5 import QtCore,QtGui,QtWidgets,uic import sys class Test(QtWidgets.QMainWindow): def __init__(self): super(Test, self).__init__() self.ui = uic.loadUi("test.ui") self.ui.next.clicked.connect(self.next) .................................................................. self.ui.next2.setIcon(QtGui.QIcon("edit.ico")) self.ui.next3.setIcon(QtGui.QIcon("begin.ico")) self.ui.next4.setIcon(QtGui.QIcon("stat.ico")) self.ui.show() ................................................................... if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) window = Test() sys.exit(app.exec())
Отредактировано zxcvbnm (Апрель 11, 2017 21:04:32)
Офлайн
вот этого
ap = QtWidgets.QApplication(sys.argv) sys.exit(app.exec_())
[code python][/code]
Отредактировано PEHDOM (Апрель 12, 2017 12:31:36)
Офлайн
def test(self): a = test.Test() a.show() def begin(self): b = begin.Begin() b.show()
Офлайн
почему сразу две, это надо смотреть вессь код.
А закрываеться потому что любой обьект хранится в памяти пока на него ссылается хотябы одна переменная. Какая переменная сылаеться на ваши экземпляры Test и Begin? а и b? так они действуют только внутри процедур test и begin. Процедуры свое отработали, переменных больше нет, сборщик мусора освобождает память занимаемую вашими окнами, окна исчезают. Както так.
Чтобы окна не исчезали нужно гдето хранить на них ссылку.
Например так: self.a = test.Test()
или так: test.Test(self) при этом нужно именить __init__ класса Test на
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)
[code python][/code]
Офлайн
Все уже нормально отрываеться но когда окно test закрыть то появляеться исключение в def closeEvent
Вот код формы test
from PyQt5 import QtCore,QtGui,QtWidgets,uic import sys class Test(QtWidgets.QMainWindow): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) Form, Base = uic.loadUiType('test.ui') self.ui = Form() self.ui.setupUi(self) ........................................................... self.show() .............................................................. def closeEvent(self,e): rezult = QtWidgets.QMessageBox.warning(Test, "Exit", "Do you exit", buttons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, defaultButton=QtWidgets.QMessageBox.No) if rezult == QtWidgets.QMessageBox.Yes: e.accept() else: e.ignore() if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) Test = Test() sys.exit(app.exec())
from PyQt5 import QtCore,QtGui,QtWidgets,uic import sys import test import begin class MyWindow(QtWidgets.QWidget): def __init__(self): super(MyWindow, self).__init__() self.ui = uic.loadUi("home.ui") pal = self.ui.palette() pal.setBrush(QtGui.QPalette.Normal,QtGui.QPalette.Window, QtGui.QBrush(QtGui.QPixmap("form_home.jpg"))) self.ui.setPalette(pal) self.ui.test.setIcon(QtGui.QIcon("test.ico")) self.ui.begin.setIcon(QtGui.QIcon("begin.ico")) self.ui.stat.setIcon(QtGui.QIcon("stat.ico")) self.ui.setWindowIcon(QtGui.QIcon('home.ico')) self.ui.test.clicked.connect(self.test) self.ui.begin.clicked.connect(self.begin) self.ui.show() def test(self): self.a = test.Test() self.a.show() if __name__ == '__main__': app1 = QtWidgets.QApplication(sys.argv) window = MyWindow() sys.exit(app1.exec())
Прикреплённый файлы:
145.JPG (22,9 KБ)
Офлайн
zxcvbnmчто конкретно пишет? потому как у меня никаких исключений не вызывает.
когда окно test закрыть то появляеться исключение в def closeEvent
[code python][/code]
Офлайн
вот
Прикреплённый файлы:
145.JPG (74,7 KБ)
Офлайн
попробуйте заменить Test на self, по моему класс не может выступать родителем.
rezult = QtWidgets.QMessageBox.warning(self, "Exit", "Do you exit", buttons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, defaultButton=QtWidgets.QMessageBox.No)
[code python][/code]
Отредактировано PEHDOM (Апрель 12, 2017 20:22:02)
Офлайн
PEHDOMДень добрый, опять экстрасенсом работаем?
def __init__(self, *args, **kwargs): def closeEvent(self,e):
Прикреплённый файлы:
n-form.zip (7,5 KБ)
Офлайн
Немного доделанный мой пример (добавлен диалог на подтверждение выхода и добавлена проверка запрещающая пересоздание объекта второго окна).
Прикреплённый файлы:
n-form.zip (7,7 KБ)
Офлайн