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: аргумент 1 из QMainWindow.setCentralWidget () имеет неверный тип
Это сообщение об ошибке является загадочным для меня, поскольку я не могу подключить его к выполненной модификации. У вас есть идея, что может быть источником этой ошибки?
Решение
Невозможно воспроизвести проблему, как сообщается: следующий точный код
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
показывает, что я нахожусь на версии 4.5.1 PyQt. Как насчет тебя?
Другие советы
Я раньше не работал с PyQt, но вы не забыли вызвать здесь конструктор суперкласса? Р>
class MyWidget(QtGui.QWidget):
def __init__(self):
# Where is the call to QtGui.QWidget's init ?
pass