我正在尝试将python脚本写入像matplotlib这样的应用程序。 我需要一个函数调用来显示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!
答案 0 :(得分:2)
这就是你想要的:
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()
答案 1 :(得分:2)
在功能内部使用时,窗口不显示。问题很简单:窗口是垃圾收集的,因为它是在函数范围内定义的,然后不再使用,因此Python将其视为“垃圾”并删除对象。
我发现避免这种情况的最好方法是拥有一个应用程序类,它将保存对您要显示的所有窗口的引用。所以你可以有一个常规类为你做这个,或者如果你也可以使用QtGui.QApplication
的子类。我会选择第二种选择。
如果你真的不想使用类,另一个选择是将它设置为全局变量,这通常会阻止它被Python垃圾收集。