【问题标题】:How to keep QMainWindow open?如何保持 QMainWindow 打开?
【发布时间】:2017-11-19 22:23:41
【问题描述】:

我有一个使用 Qt Creator 创建的 UI 文件。当我通过 PyCharm 执行应用程序时,主窗口会短暂打开,然后关闭。我认为它正在被垃圾收集,但我不知道如何让它工作。有什么想法吗?

计算器.py

from PyQt5.QtWidgets import QApplication
import MainWindow
import sys


class Calculator(QApplication):

    def __init__(self):
        args = sys.argv
        QApplication.__init__(self, args)
        self.initializeApplication()

    def initializeApplication(self):
        app = MainWindow.MainWindow()
        app.show()


if __name__ == '__main__':
    app = Calculator()
    sys.exit(app.exec_())

MainWindow.py

from PyQt5 import uic
from PyQt5.QtWidgets import QMainWindow


class MainWindow(QMainWindow):

    def __init__(self):
        QMainWindow.__init__(self, None)
        uic.loadUi(r'interface/MainWindow.ui', self)
        self.initializeUI()

    def initializeUI(self):
        self.setWindowTitle('Calculator')

我是 Python 新手,所以请多多包涵。我查看了几个不同的示例,但没有真正涵盖当您的应用程序跨越多个源文件时。谢谢。

【问题讨论】:

    标签: python python-3.x pyqt5 qmainwindow


    【解决方案1】:

    垃圾收集器正在删除它的注释是正确的,因为在函数中创建的变量仅在调用函数时存在。此外,为了能够执行 GUI,您必须调用 exec_() 来生成所需的主循环。

    class Calculator(QApplication):
    
        def __init__(self):
            args = sys.argv
            QApplication.__init__(self, args)
            self.initializeApplication()
            self.exec_()
    
        def initializeApplication(self):
            self.app = MainWindow.MainWindow()
            self.app.show()
    
    
    if __name__ == '__main__':
        app = Calculator()
    

    【讨论】:

    • 这似乎工作得很好,谢谢!有没有更清洁的方法来实现这一点。我读过的所有内容,以及我看过的示例似乎都以不同的方式进行。
    • 这个方法我觉得够用了。不要忘记将我的答案标记为正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2015-09-21
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多