0

考虑下面的代码:

 #!/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:QMainWindow.setCentralWidget() 的参数 1 的类型无效

此错误消息对我来说很神秘,因为我无法将其连接到已完成的修改。你知道这个错误的根源是什么吗?

4

2 回答 2

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 版。那你呢?

于 2009-08-05T15:49:39.287 回答
0

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

class MyWidget(QtGui.QWidget):
   def __init__(self):
      # Where is the call to QtGui.QWidget's init ?
      pass
于 2009-08-05T14:48:47.130 回答