简体   繁体   中英

Open second window with QTDesigner 5 in Python 3

I have problem with QTDesigner 5, which should be trivial, but I just can't figure out the problem.

What I want to do is to open a second Window when clicking on a button: I have designed the Main Window and the secondary one with QTDesigner (PyQT5!) and converted them with pyuic to .py files. The Main Window opens without problems with the following Code:

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_())

If I add the following to the main function, the "GiPrompt" Window opens as well along with the Main Window:

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_())

If I try to open the second window via the openGIPrompt function, nothing happens. I do not get an error message, and no window appears. A print command however tells me that the init_function of the second Window is called...

Has someone an idea, what the problem could be?

Thanks in advance!

I have figured out the problem: Apparently, the initialized Window is disposed of by garbage collection, as the variables are not declared as self:

This fixed the problem:

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_())

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM