Найти - Пользователи
Полная версия: Ошибка при разбивке программы на модули
Начало » Центр помощи » Ошибка при разбивке программы на модули
1
Andrey2016
Хочу разбить программу на два модуля - один модуль для 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: Must construct a QApplication before a QWidget. Как мне подсказали, исправляется эта ошибка передачей инстанса класса Program в функцию addToList. Но видимо я делаю что-то не так, потому что при запуске программа всё равно выдает ошибки (но уже другие). Пожалуйста, напишите как должен выглядеть исправленный код
FishHook
А какой из модулей вы запускаете как программу?
Andrey2016
тот что с интерфейсом
FishHook
Ну тогда все понятно. Когда вы импортируете модуль, все его содержимое выполняется.
Когда вы делаете это
 import logic
у вас выполняется это
 prog = gui.Program()
а на тот момент еще нет никакого QApplication в программе. У вас очень странная конструкция модулей, в частности непонятно зачем вы два раза инстациируете главное окно. Так же совершенно стремная ситуация - ваши модули импортирую друг друга, такого не должно быть никогда.
FishHook
Вы вообще понимаете, что строка prog = gui.Program() создает совершенно новый объект, который вообще никак не связан с тем, который вы создаете здесь ex = Program(). Это два разных объекта в разных участках памяти. Вам бы для начала чего-нибудь почитать про ОПП, да и вообще про питон и программирование.
Andrey2016
Я понимаю, что не разбираюсь в ООП, но нужно написать небольшую программу. Если бы вы показали где и как именно исправить код, вы бы очень помогли))
FishHook
Andrey2016
Давайте тогда называть вещи своими именами, тему надо было назвать “Напишите за меня программу”
Переношу её в соответствующее место
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB