在函数中显示PyQt主窗口

2024-10-01 09:30:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试向matplotlib这样的应用程序编写python脚本。 我需要一个函数调用来显示Qt主窗口。我该怎么做?在

class MainWindow(QtGui.QMainWindow):
    def __init__(self,parent=None):
       super(MainWindow, self).__init__(parent)
       self.setupUi(self)
       self.numbers = 4
       ...

app = QtGui.QApplication(sys.argv)
dmw = DesignerMainWindow()
dmw.show()
sys.exit(app.exec_()) #this works, but pops the window right away

我想在我想的时候打电话给窗户。(像这样)

^{pr2}$

编辑:粘贴解决方案感谢jadkik94

class App(QtGui.QApplication):
    def __init__(self, args):
        QtGui.QApplication.__init__(self,args)
        self.window = MainWindow()

    def doSomething(self, ii):
        self.window.numbers = ii

    def show(self):
        self.window.show()
        sys.exit(self.exec_())
a = App(sys.argv)
a.doSomething(12) #updates numbers alternately a.window.numbers = 12
a.show()          #pops the window!

Tags: selfappinitdefshowsyswindowclass
2条回答

在函数内部使用时,窗口不显示。问题很简单:窗口被垃圾回收,因为它是在函数的作用域内定义的,然后不再使用,所以Python将其视为“垃圾”并删除对象。在

我发现避免这种情况的最好方法是使用一个应用程序类来保存对所有要显示的窗口的引用。因此,您可以让一个常规类为您完成这项工作,或者将QtGui.QApplication子类化(如果您也可以使用它的话)。我会选择第二种选择。在

另一个选择,如果你真的不想使用一个类,那就是将它设置为一个全局变量,这通常可以防止它被Python垃圾回收。在

这就是你想要的:

import sys
from PyQt4 import QtGui


class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Icon')        
        self.show()

def main():    
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

a = main()
a.show()

相关问题 更多 >