Найти - Пользователи
Полная версия: PyQt4 достучатся до формочки из других модулей
Начало » GUI » PyQt4 достучатся до формочки из других модулей
1
Alex_Kutsan
Програмку составил из файлов:
main.py//1 функция создающая форму, и запускающая всё и вся
MainWindow.py// содержит class MainForm(QtGui.QMainWindow):
engine.py// движок, собственно в нём всё будет работать, и хотелось бы чтоб он имел доступ к моей формочке
думал импортиовать main, и а меине переменные формы сделать глобальной
import MainWindow
app = QtGui.QApplication(sys.argv)
form = MainWindow.MainForm()

def main():
global app
global form
form.show()
app.exec_()
input()
return 0
Но нифига, выдаёт ошибку module object has no Atribute MainForm()
как с этим боротся?
Если я пихну все переменные в main то всё идёт как по маслу.
Ну или как правильно делается когда надо чтоб други классы могли что-то изменять в форме.
mks
Можно при создании объекта engine передать в него объект формы, что то типа такого:
import MainWindow
app = QtGui.QApplication(sys.argv)
form = MainWindow.MainForm()
engine = Engine(form)
...
Alex_Kutsan
Хм, да но engine это модуль и движок, ну ладно, попрообую подобной идеей. спасибо.
Soteric
Я думаю нужно использовать MVP паттерн. Это довольно объемная тема, но она как раз описывает решение проблемы взаимодействия ядра программы и пользовательского интерфейса. В интернете есть масса материала, однако по большей части он объясняет лишь общий принцип паттерна. Я рекомендую

http://martinfowler.com/eaaDev/
http://aviadezra.blogspot.com/2007/07/twisting-mvp-triad-say-hello-to-mvpc.html

Вкратце суть в следующем. Между вашим ядром (engine) и интерфейсом (формой) появляется некий объект-медиатор, который имеет ссылки и на ядро и на форму. Этот объект (presenter в терминах MVP) следит за событиями в ядре и при возникновении интересующих его событий, дает команду форме обновить свое состояние. Также осуществляется обратная связь. Если пользователь нажал кнопку, то об этом извещается presenter, который вызывает нужный метод ядра (посчитать что-нибудь, обновить состояние и т.д.). Это позволяет сделать ядро и интерфейс независимыми друг от друга.

Конечно в простом случае достаточно описанного выше варианта.
Alex_Kutsan
Любобытно почитаю на досуге. Для данного просто го случая сделал так:
#engine.py
class get_form():

def __init__(self,form):

self.form = form

A = None
...
#main.py
form = MainWindow.MainForm()
engine.A = engine.get_form(form)
синтерпретировалось, работает на ура.
может сделаю так ,как советуете с MPV.
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