gpt4 book ai didi

python - 在函数内显示 PyQt 主窗口

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:12 24 4
gpt4 key购买 nike

我正在尝试为像 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

我希望能够在需要时调用窗口。 (像这样)

def newWin():
app = QtGui.QApplication(sys.argv)
dwm = MainWindow()
sys.exit(app.exec_())
return dwn

a = newWin() # application is created now
a.numbers = 10 # do something
a.show() # should pop me the window now

编辑:粘贴解决方案 感谢 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!

最佳答案

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

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

如果您真的不想使用一个类,另一种选择是将它设置为一个全局变量,这通常会阻止它被 Python 垃圾回收。

关于python - 在函数内显示 PyQt 主窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13768012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com