Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 10, 2016 18:42:46

Andrey2016
Зарегистрирован: 2016-12-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при разбивке программы на модули

Хочу разбить программу на два модуля - один модуль для 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. Но видимо я делаю что-то не так, потому что при запуске программа всё равно выдает ошибки (но уже другие). Пожалуйста, напишите как должен выглядеть исправленный код

Отредактировано Andrey2016 (Дек. 10, 2016 18:44:08)

Офлайн

#2 Дек. 10, 2016 18:47:31

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Ошибка при разбивке программы на модули

А какой из модулей вы запускаете как программу?



Офлайн

#3 Дек. 10, 2016 18:48:17

Andrey2016
Зарегистрирован: 2016-12-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при разбивке программы на модули

тот что с интерфейсом

Офлайн

#4 Дек. 10, 2016 19:38:39

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Ошибка при разбивке программы на модули

Ну тогда все понятно. Когда вы импортируете модуль, все его содержимое выполняется.
Когда вы делаете это

 import logic
у вас выполняется это
 prog = gui.Program()
а на тот момент еще нет никакого QApplication в программе. У вас очень странная конструкция модулей, в частности непонятно зачем вы два раза инстациируете главное окно. Так же совершенно стремная ситуация - ваши модули импортирую друг друга, такого не должно быть никогда.



Офлайн

#5 Дек. 10, 2016 19:41:35

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Ошибка при разбивке программы на модули

Вы вообще понимаете, что строка prog = gui.Program() создает совершенно новый объект, который вообще никак не связан с тем, который вы создаете здесь ex = Program(). Это два разных объекта в разных участках памяти. Вам бы для начала чего-нибудь почитать про ОПП, да и вообще про питон и программирование.



Отредактировано FishHook (Дек. 10, 2016 19:42:14)

Офлайн

#6 Дек. 10, 2016 19:48:13

Andrey2016
Зарегистрирован: 2016-12-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при разбивке программы на модули

Я понимаю, что не разбираюсь в ООП, но нужно написать небольшую программу. Если бы вы показали где и как именно исправить код, вы бы очень помогли))

Офлайн

#7 Дек. 10, 2016 19:55:31

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Ошибка при разбивке программы на модули

Andrey2016
Давайте тогда называть вещи своими именами, тему надо было назвать “Напишите за меня программу”
Переношу её в соответствующее место



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version