【问题标题】:Open second window with QTDesigner 5 in Python 3在 Python 3 中使用 QTDesigner 5 打开第二个窗口
【发布时间】:2017-06-19 19:52:07
【问题描述】:

我有 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 函数打开第二个窗口,则没有任何反应。我没有收到错误消息,也没有出现任何窗口。然而,打印命令告诉我第二个窗口的 init_function 被调用...

有人有想法,问题可能是什么?

提前致谢!

【问题讨论】:

    标签: python class user-interface window pyqt5


    【解决方案1】:

    我发现了问题: 显然,初始化的 Window 被垃圾回收处理掉了,因为变量没有声明为 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_())
    

    【讨论】:

      猜你喜欢
      • 2010-12-20
      • 1970-01-01
      • 1970-01-01
      • 2012-12-21
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      相关资源
      最近更新 更多