Найти - Пользователи
Полная версия: Открытие форм приложение
Начало » GUI » Открытие форм приложение
1 2
zxcvbnm
как зделать чтобы из одной формы откривалась вторая и при етом первая не закрывалась(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())

Форма begin
 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())

Форма test
 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())
PEHDOM
вот этого
 ap = QtWidgets.QApplication(sys.argv)
sys.exit(app.exec_()) 
не должно быть в def test и def begin
zxcvbnm
  def test(self):
        a = test.Test()
        a.show()
  def begin(self):
       b = begin.Begin()
       b.show()

но всерано не работает отрываеться почемуто две формы и зразу продают
PEHDOM
почему сразу две, это надо смотреть вессь код.
А закрываеться потому что любой обьект хранится в памяти пока на него ссылается хотябы одна переменная. Какая переменная сылаеться на ваши экземпляры Test и Begin? а и b? так они действуют только внутри процедур test и begin. Процедуры свое отработали, переменных больше нет, сборщик мусора освобождает память занимаемую вашими окнами, окна исчезают. Както так.
Чтобы окна не исчезали нужно гдето хранить на них ссылку.
Например так: self.a = test.Test()
или так: test.Test(self) при этом нужно именить __init__ класса Test на
 def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
Или еще какимнить образом.
zxcvbnm
Все уже нормально отрываеться но когда окно 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())
PEHDOM
zxcvbnm
когда окно test закрыть то появляеться исключение в def closeEvent
что конкретно пишет? потому как у меня никаких исключений не вызывает.
zxcvbnm
вот
PEHDOM
попробуйте заменить Test на self, по моему класс не может выступать родителем.
 rezult = QtWidgets.QMessageBox.warning(self, "Exit", "Do you exit",
                                     buttons=QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
                                     defaultButton=QtWidgets.QMessageBox.No)
MrViktor
PEHDOM
День добрый, опять экстрасенсом работаем?

Недавно для себя подобный пример делал (уж больно много про это спрашивают), выкладываю свой пример.

     def __init__(self, *args, **kwargs):
 def closeEvent(self,e):
Как-то строки с методами “пляшут”.
Не нравится мне, еще что оба окна у zxcvbnm наследуются от QMainWindow.
MrViktor
Немного доделанный мой пример (добавлен диалог на подтверждение выхода и добавлена проверка запрещающая пересоздание объекта второго окна).
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB