Форум сайта python.su
Програмку составил из файлов:
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
Офлайн
Можно при создании объекта engine передать в него объект формы, что то типа такого:
import MainWindow
app = QtGui.QApplication(sys.argv)
form = MainWindow.MainForm()
engine = Engine(form)
...
Офлайн
Хм, да но engine это модуль и движок, ну ладно, попрообую подобной идеей. спасибо.
Офлайн
Я думаю нужно использовать MVP паттерн. Это довольно объемная тема, но она как раз описывает решение проблемы взаимодействия ядра программы и пользовательского интерфейса. В интернете есть масса материала, однако по большей части он объясняет лишь общий принцип паттерна. Я рекомендую
http://martinfowler.com/eaaDev/
http://aviadezra.blogspot.com/2007/07/twisting-mvp-triad-say-hello-to-mvpc.html
Вкратце суть в следующем. Между вашим ядром (engine) и интерфейсом (формой) появляется некий объект-медиатор, который имеет ссылки и на ядро и на форму. Этот объект (presenter в терминах MVP) следит за событиями в ядре и при возникновении интересующих его событий, дает команду форме обновить свое состояние. Также осуществляется обратная связь. Если пользователь нажал кнопку, то об этом извещается presenter, который вызывает нужный метод ядра (посчитать что-нибудь, обновить состояние и т.д.). Это позволяет сделать ядро и интерфейс независимыми друг от друга.
Конечно в простом случае достаточно описанного выше варианта.
Офлайн
Любобытно почитаю на досуге. Для данного просто го случая сделал так:
#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)
Офлайн