2016-12-09 2 views
-1

У меня есть два разных файла. Один содержит GUI-код, а другой содержит логику программы. ГИП часть:QWidget: должен построить QApplication перед ошибкой QWidget

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: Должен построить QApplication перед ошибки QWidget. Добавление from PyQt5.QtWidgets import (QApplication, etc.) к логике не поможет. Что не так с кодом?

+0

FWIW, я думаю, вы создаете много ненужных проблем, пытаясь структурировать свою программу таким образом. Используйте [Qt Designer] (http://doc.qt.io/qt-4.8/designer-manual.html) и [pyuic] (http://pyqt.sourceforge.net/Docs/PyQt5/designer.html), чтобы создать gui, а затем использовать подкласс главного окна для остальной части логики программы. – ekhumoro

+0

Возможный дубликат [PyQt. Получить ошибки, пытаясь отделить GUI от логики] (http://stackoverflow.com/questions/41047671/pyqt-get-errors-trying-to-separate-gui-from-logic) – ImportanceOfBeingErnest

+0

Пользователь задал почти тот же вопрос уже здесь: http://stackoverflow.com/questions/41047671/pyqt-get-errors-trying-to-separate-gui-from-logic Вместо публикации нескольких вопросов попробуйте задать один вопрос или удалить один из них. – ImportanceOfBeingErnest

ответ

1

Обратите внимание, как prog = gui.Program() в вашем logic модуля бежится при import logic из основной программы

Это означает, что вы создаете Program экземпляр, который создает много QWidgets до QApplication создаются в вашем __main__

Таким образом, в своем логическом модуле:

  • Удалить prog = gui.Program()
  • Ремонтное вашу addToList() функцию, чтобы взять Program экземпляр в качестве параметра вместо обращения к глобальной переменной
+0

не могли бы вы привести пример? потому что теперь, когда я редактировал свой код, я получаю такие ошибки, как «Программа не имеет атрибута second_list» – AndreyK4

+0

@ AndreyK4 Все, что вам нужно в коде, который вы отправили, - это изменить 'def addToList (self):' to 'def addToList (prog):' – nos

+0

дает мне эту «RecursionError: максимальная глубина рекурсии превышена при вызове объекта Python» – AndreyK4

 Смежные вопросы

  • Нет связанных вопросов^_^