PyQT 全屏问题

2 投票
2 回答
20475 浏览
提问于 2025-04-18 05:11

好的,我还是对Python比较陌生,刚开始在我的树莓派上使用PyQT来为我的代码制作一个图形界面。但是,窗口只打开了一瞬间就又关闭成一个小窗口。有人能告诉我我哪里出错了吗?

import sys
from PyQt4 import QtGui, QtCore

class mainUI(QtGui.QWidget):
        def __init__(self):
                super(mainUI, self).__init__()
                self.initUI()

        def initUI(self):

                MainWindow = QtGui.QWidget()
                MainWindow.showFullScreen()
                MainWindow.setWindowTitle('TimeBot')
                MainWindow.show()

                qbtn = QtGui.QPushButton('Quit')
                qbtn.clicked.connect(QtCore.QCoreApplication.quit)
                qbtn.move(5,5)
                qbtn.show()

                self.show()            

def main():
        app = QtGui.QApplication(sys.argv)

        window = mainUI()

        sys.exit(app.exec_())

if __name__ == '__main__':
        main()

2 个回答

0

self.showMaximized()

PyQt5是一个将Qt工具包与Python结合起来的库。关于QtWidgets的使用,有详细的说明文档。

https://doc.qt.io/qt-5/qwidget.html#showMaximized

如果你想了解其他的show*()方法,可以去看看文档,内容非常全面,写得也很好。可能这是世界上文档最齐全的C++框架。

6

问题在于,在 initUi 这个函数里,你又创建了一个新的 QWidget,把它设置为全屏显示,然后显示出来。但是当这个小部件超出范围后,它就会被垃圾回收机制清理掉,结果就消失了。你其实是想用 self,而不是再创建一个新的 QWidget。可以这样做:

import sys
from PyQt4 import QtGui, QtCore

class mainUI(QtGui.QWidget):
    def __init__(self):
        super(mainUI, self).__init__()
        self.initUI()

    def initUI(self):

        self.showFullScreen()
        qbtn = QtGui.QPushButton('Quit')
        qbtn.clicked.connect(QtCore.QCoreApplication.quit)
        qbtn.move(5,5)
        self.button = qbtn
        qbtn.show()


def main():
    app = QtGui.QApplication(sys.argv)
    window = mainUI()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

注意,我保留了对 qbtn 的引用,这样它就不会被垃圾回收机制清理掉而消失。

撰写回答