我有一个pyqt程序用来可视化一些python对象。我想显示多个对象,每个都在自己的窗口中。
在pyqt4中实现多窗口应用程序的最佳方法是什么?
目前我有以下几点:
from PyQt4 import QtGui
class MainWindow(QtGui.QMainWindow):
windowList = []
def __init__(self, animal):
pass
def addwindow(self, animal)
win = MainWindow(animal)
windowList.append(win)
if __name__=="__main__":
import sys
app = QtGui.QApplication(sys.argv)
win = QMainWindow(dog)
win.addWindow(fish)
win.addWindow(cat)
app.exec_()
然而,这种方法并不令人满意,因为当我试图将multiplewindows部分分解到它自己的类中时,我面临一些问题。例如:
class MultiWindows(QtGui.QMainWindow):
windowList = []
def __init__(self, param):
raise NotImplementedError()
def addwindow(self, param)
win = MainWindow(param) # How to call the initializer of the subclass from here?
windowList.append(win)
class PlanetApp(MultiWindows):
def __init__(self, planet):
pass
class AnimalApp(MultiWindows):
def __init__(self, planet):
pass
if __name__=="__main__":
import sys
app = QtGui.QApplication(sys.argv)
win = PlanetApp(mercury)
win.addWindow(venus)
win.addWindow(jupiter)
app.exec_()
上面的代码将调用MainWindow类的初始值设定项,而不是相应子类的初始值设定项,因此将抛出异常。
如何调用子类的初始值设定项?有没有比这更优雅的方法?
最佳答案
为什么不使用对话框在Qt中,除非您想使用docks等,否则不需要使用主窗口使用对话框将具有相同的效果。
我还可以看到你的逻辑中有一个问题,你希望你的超级类调用它的子类的构造函数,当然它可以是任何类型。我建议你重写如下:ojit_pre
期望超级类知道要在其子类的in It中使用的参数不是一个好主意,因为很难确保所有构造函数都是相同的(可能animal对话框/窗口采用diff参数)。
希望有帮助。