PyQt: почему добавление фиктивного определения класса в моем файле приводит к сбою приложения?

StackOverflow https://stackoverflow.com/questions/1233711

  •  22-07-2019
  •  | 
  •  

Вопрос

Рассмотрите код ниже:

 #!/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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top