QWidget:必须在QPaintDevice python之前构造一个QApplication

时间:2016-06-05 16:14:52

标签: python pyqt

我在pyqt代码文件中导入另一个Python模块以获取输入并显示输出。但它给了我错误

  

QWidget:必须在QPaintDevice之前构建QApplication

我的代码是:

from PyQt4 import QtGui
import sys
from untitled import Ui_MainWindow
from PyQt4.QtCore import SIGNAL
from PyQt4.QtGui import QDialog, QApplication, QPushButton, QLineEdit, QFormLayout
from naivebase import *


class Main (QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.pushButton.clicked.connect(self.pushButton_clicked)
        self.ui.lineEdit.returnPressed.connect(self.pushButton_clicked)
        # self.connect(QPushButton(), SIGNAL("clicked()"),  self.pushButton_clicked)

    def pushButton_clicked(self):
         text1 = self.ui.lineEdit.text()
         # print text1
         ob2 = TweetClassfier()
         txt = ob2.lbl1
         self.ui.label_2.setText(txt)


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = Main()
    window.show()
    sys.exit(app.exec_())

我调试了这行后给我这个错误的代码

QtGui.QMainWindow.__init__(self)

3 个答案:

答案 0 :(得分:1)

首先运行此次且仅运行一次:     app = QtGui.QApplication(sys.argv)

然后运行:

if __name__ == "__main__":
    window = Main()
    window.show()
    sys.exit(app.exec_())

答案 1 :(得分:0)

您已从QApplication导入QtGui。这意味着无需在QtGui中引用app = QtGui.QApplication(sys.argv)

尝试:app = QApplicatiopn(sys.argv)

编辑:这可能不是原因。正如我在上面评论的那样,另一个猜测是避免使用星号导入naivebase,星号会混淆您的命名空间并导致错误,例如:如果其他内容被称为app

编辑:最后,如果没有untitled的内容(可能想给这个有意义的名字)和naivebase,我们无法确切地知道出了什么问题。

答案 2 :(得分:0)

而不是QMainWindow.__init__(self),请尝试使用super(QMainWindow, self).__init__()

这应该有效。

还要确保naivebase和untitled没有任何代码试图在主流中实例化QtGui对象。在QApplication()调用之前发生的任何事情应该是defclass内容或纯python内容。我不是指经典if __name__ == '__main__',而是文件中除def或类定义之外的任何其他代码或赋值。