QWidget:必须在QWidget错误之前构造QApplication

时间:2016-12-09 15:54:08

标签: python pyqt

我有两个不同的文件。一个包含GUI代码,另一个包含程序的逻辑。 GUI部分:

import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import (QApplication, QPushButton, QMainWindow,  QLabel, QDesktopWidget, QListWidget)
from PyQt5.QtGui import QFont
import logic

class Program(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.first_list = QListWidget(self)
        self.first_list.setGeometry(15, 35, 140, 42)

        add_to_list_button = QPushButton('Add', self)
        add_to_list_button.setGeometry(165, 35, 30, 20)
        add_to_list_button.clicked.connect(lambda: logic.addToList(self))

        self.second_list = QListWidget(self)
        self.second_list.setGeometry(205, 35, 140, 192)

        for i in range(30):
            self.second_list.addItem(logic.list_one[i][3])

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Program()
    sys.exit(app.exec_())

逻辑部分:

import gui

# list_one and list_two go here

prog = gui.Program()

def addToList(self):
    for i in range(len(prog.second_list)):
        if list_one[i][3] == str(prog.second_list.currentItem().text()):
            index = i

    list_two.append(list_one[index])

但是当我运行程序时,我得到 QWidget:必须在QWidget 错误之前构造一个QApplication。将from PyQt5.QtWidgets import (QApplication, etc.)添加到逻辑将无济于事。代码有什么问题?

1 个答案:

答案 0 :(得分:1)

注意当您从主程序中prog = gui.Program()时,logic模块中import logic的运行情况

这意味着您创建了一个Program实例,该实例会在__main__

中创建QApplication之前创建大量QWidgets

所以,在你的逻辑模块中:

  • 删除prog = gui.Program()
  • 修改addToList()函数,将Program实例作为参数,而不是引用全局变量