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

0 投票
2 回答
589 浏览
提问于 2025-04-15 13:24

考虑下面的代码:

 #!/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

... 当我启动这个脚本时,我收到这个错误:

类型错误:QMainWindow.setCentralWidget()的第一个参数类型无效

这个错误信息对我来说很难理解,因为我无法将它与我所做的修改联系起来。 你知道这个错误可能是什么原因吗?

2 个回答

0

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

class MyWidget(QtGui.QWidget):
   def __init__(self):
      # Where is the call to QtGui.QWidget's init ?
      pass
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_())

在我这儿运行得很好(当然是显示一个空窗口)。所以我想这可能跟版本有关!我在使用的是系统自带的 Python 2.5.1,操作系统是 Mac OS X 10.5.7,并且加上一个

print QtCore.PYQT_VERSION_STR

显示我正在使用的 PyQt 版本是 4.5.1。你呢?

撰写回答