在Python 3中使用QTDesigner 5打开第二个窗口

在Python 3中使用QTDesigner 5打开第二个窗口,python,class,user-interface,window,pyqt5,Python,Class,User Interface,Window,Pyqt5,我对QTDesigner 5有问题,这应该是微不足道的,但我就是无法解决问题 我想做的是在单击按钮时打开第二个窗口: 我用QTDesigner(PyQT5!)设计了主窗口和次窗口,并用pyuic将它们转换为.py文件。主窗口打开时不会出现以下代码问题: from PyQt5 import QtGui, QtWidgets, QtCore, uic import UI14 as UIImport import GIPrompt as GIImport class MainWindow(

我对QTDesigner 5有问题,这应该是微不足道的,但我就是无法解决问题

我想做的是在单击按钮时打开第二个窗口: 我用QTDesigner(PyQT5!)设计了主窗口和次窗口,并用pyuic将它们转换为.py文件。主窗口打开时不会出现以下代码问题:

from PyQt5 import QtGui, QtWidgets, QtCore, uic
import UI14 as UIImport
import GIPrompt as GIImport

     class MainWindow(UIImport.Ui_MainWindow):
          def __init__(self, window):
               UIImport.Ui_MainWindow.__init__(self)   
               self.setupUi(window)
               self.radioButtonGI.clicked.connect(self.openGIPrompt)

          def openGIPrompt(self):
              windowGI = QtWidgets.QDialog()
              Gi = GIPrompt(windowGI)
              windowGI.show()


     class GIPrompt(GIImport.Ui_GIPrompt):
          def __init__(self, windowGI):
               GIImport.Ui_GIPrompt.__init__(self)   
               self.setupUi(windowGI)

if __name__ == '__main__':


app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
prog = MainWindow(window)

window.show()
sys.exit(app.exec_())
如果我将以下内容添加到主功能中,“GiPrompt”窗口也将与主窗口一起打开:

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
prog = MainWindow(window)

window.show()

"""Open secondWindow"""
windowGI = QtWidgets.QDialog()
Gi = GIPrompt(windowGI)
windowGI.show()

sys.exit(app.exec_())
如果我试图通过openGIPrompt函数打开第二个窗口,则什么也不会发生。我没有收到错误消息,也没有出现窗口。然而,print命令告诉我第二个窗口的init_函数被调用

有人知道问题出在哪里吗


提前谢谢

我已经解决了问题: 显然,初始化的窗口由垃圾收集处理,因为变量没有声明为self:

这解决了问题:

from PyQt5 import QtGui, QtWidgets, QtCore, uic
import UI14 as UIImport
import GIPrompt as GIImport

     class MainWindow(UIImport.Ui_MainWindow):
          windowGI=None
          Gi=None
          def __init__(self, window):
               UIImport.Ui_MainWindow.__init__(self)   
               self.setupUi(window)
               self.radioButtonGI.clicked.connect(self.openGIPrompt)

          def openGIPrompt(self):
              self.windowGI = QtWidgets.QDialog()
              self.Gi = GIPrompt(self.windowGI)
              self.windowGI.show()


     class GIPrompt(GIImport.Ui_GIPrompt):
          def __init__(self, windowGI):
               GIImport.Ui_GIPrompt.__init__(self)   
               self.setupUi(windowGI)

if __name__ == '__main__':


app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
prog = MainWindow(window)

window.show()
sys.exit(app.exec_())

我已经解决了这个问题: 显然,初始化的窗口由垃圾收集处理,因为变量没有声明为self:

这解决了问题:

from PyQt5 import QtGui, QtWidgets, QtCore, uic
import UI14 as UIImport
import GIPrompt as GIImport

     class MainWindow(UIImport.Ui_MainWindow):
          windowGI=None
          Gi=None
          def __init__(self, window):
               UIImport.Ui_MainWindow.__init__(self)   
               self.setupUi(window)
               self.radioButtonGI.clicked.connect(self.openGIPrompt)

          def openGIPrompt(self):
              self.windowGI = QtWidgets.QDialog()
              self.Gi = GIPrompt(self.windowGI)
              self.windowGI.show()


     class GIPrompt(GIImport.Ui_GIPrompt):
          def __init__(self, windowGI):
               GIImport.Ui_GIPrompt.__init__(self)   
               self.setupUi(windowGI)

if __name__ == '__main__':


app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
prog = MainWindow(window)

window.show()
sys.exit(app.exec_())