2009-08-05 44 views
0

考虑下面的代码:PyQt:为什么在我的文件中添加一个虚拟类定义会导致应用程序崩溃?

#!/usr/bin/env python 


from PyQt4 import QtCore, QtGui 

import os,sys 

class MainWindow(QtGui.QMainWindow): 

    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     self.listWidget = QtGui.QListWidget(None) 
     self.setCentralWidget(self.listWidget) 

if __name__ == '__main__': 
    app = QtGui.QApplication (sys.argv) 
    mainWin = MainWindow() 
    mainWin.show() 
    sys.exit (app.exec_()) 

工程确定。 现在,如果我添加一个虚拟类(即从QtGui模块的类继承)在全球范围内...

class MainWindow(QtGui.QMainWindow): 
... # unchanged 

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

if __name__ == '__main__': 
... # unchanged 

...当我启动脚本我得到的错误:

TypeError: argument 1 of QMainWindow.setCentralWidget() has an invalid type

这个错误信息对我来说太神秘了,因为我无法将它连接到已完成的修改。 你有什么想法可能是这个错误的根源?

回答

1

无法重现作为报告的问题:下面的确切的代码

from PyQt4 import QtCore, QtGui 

import os, sys 

class MainWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent) 
     self.listWidget = QtGui.QListWidget(None) 
     self.setCentralWidget(self.listWidget) 

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

if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    mainWin = MainWindow() 
    mainWin.show() 
    sys.exit(app.exec_()) 

运行得很好,我(当然出一个空窗口)。所以我想这是版本细节!我在Mac OS X 10.5.7上使用系统提供的Python 2.5.1并添加了一个

print QtCore.PYQT_VERSION_STR 

显示我在PyQt的4.5.1版本中。你呢?

+0

来自python.org和PyQt 4.5.2的Python 2.6.2 刚刚切换回Python 2.5.4,它就像一个魅力。谢谢! – kraymer 2009-08-05 17:19:06

+0

@kraymer,不用客气,但如果最新的PyQt不能与最新的Python一起工作会很麻烦 - 当我有时间的时候我会尝试用Python 2.6.2重新编译PyQt,看看是什么给了(也许打开一个PyQt的跟踪器上的错误...?) – 2009-08-05 17:25:34

0

我以前没有用过PyQt,但是你没有忘记在这里调用超类的构造函数吗?

class MyWidget(QtGui.QWidget): 
    def __init__(self): 
     # Where is the call to QtGui.QWidget's init ? 
     pass 
+0

结果是一样的,但我修改我的代码,使之清楚。 – kraymer 2009-08-05 14:57:24

相关问题