Найти - Пользователи
Полная версия: PyQt архитектура приложения
Начало » Python для новичков » PyQt архитектура приложения
1
apologize828
Помогите пожалуйста разобраться в таком вопросе:
Имеется два класса-две формы у каждого класса есть свои методы. как разделить логику от интерфейса и создать класс контроллер где хранились бы все методы к которым мы будем обращаться?

вот первая форма:
#-*- coding: utf-8 -*-
from PyQt4 import QtGui

class Form_main(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)

self.resize(200,200)
self.setWindowTitle(“Магазин автозапчастей”)

def zapysk(self):
self.my_form=Form_main()
self.my_form.show()

вот вторая:
#-*-coding:utf-8-*-
from PyQt4 import QtCore,QtGui
class Form_enter_in_system(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)

self.setFixedSize(237,110)
def zapysk(self):
self.my_form_enter_in_system=Form_enter_in_system()
self.my_form_enter_in_system.show()

запускающий файл:
#-*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui
from start import Form_main

app=QtGui.QApplication(sys.argv)
Form_main.zapysk(Form_main)
sys.exit(app.exec_())


А вот как эти методы перенести в отдельный класс контроллер чтобы уже потом через него обращаться к методам я не совсем понимаю как это сделать,уже запарился пробовать и химичить!
Объясните пожалуйста,или скиньте пример где реализована такая задача чтобы я мог посмотреть и разобраться.
Или киньте ссылки где такие примеры можно посмотреть!
Буду вам очень благодарен!
bazooka
#!/usr/bin/env python

import sys
from PyQt4 import QtCore, QtGui

class HelloApplication(QtGui.QApplication):

def __init__(self, args):
QtGui.QApplication.__init__(self, args)
self._place_widgets()

def _place_widgets(self):
self.hellobutton = QtGui.QPushButton("Say 'Hello world!'", None)
self.connect(self.hellobutton, QtCore.SIGNAL("clicked()"), self.hello)
self.hellobutton.show()

def hello(self):
print "Hello, World!"

if __name__ == "__main__":
app = HelloApplication(sys.argv)
app.exec_()
apologize828
Базука спасибо огромное!!!!!!!!! хороший и четкий пример,все сразу понятно стало!!!
truporez
на новых PyQt можно подписывать на сигналы вот так
self.hellobutton.clicked.connect(self.hello)
ZZZ
truporez
на новых PyQt можно подписывать на сигналы вот так
На новых??? Уж года полтора как…
И это правильно.
apologize828
Спасибо всем!!! тоже буду иметь ввиду.
ZZZ
Хм… Посмотрел твой пример, bazooka… Мой опыт говорит о том, что QtGui.QApplication (как и QtCore.QCoreApplication) лучше трогать только в крайнем случае и оставить его только для настройки/допилки самого приложения.
Лучше сделать класс-контроллер от QtCore.QWidget, который создать после QtGui.QApplication:
if __name__ == "__main__":
app = QtGui.Application(sys.argv)
controller = Controller()
app.exec_()
А вот при инициализации контроллера создавать/настраивать виджеты (и модели!).
Помните: правильная проработка архитектуры, это половина программы.
bazooka
у тебя контроллер - один виджет
а в моем примере надо подправить QPushButton на QMainWindow и тогда будет ваще зашибись
ZZZ
bazooka
у тебя контроллер - один виджет
Ой! Это я заглючился… Обрати внимание, что в модуле QtCore нет класса QWidget. Конечно, я имел в виду QtCore.QObject. А можно, кстати, и от обычного object – переносимее.

bazooka
в моем примере надо подправить QPushButton на QMainWindow и тогда будет ваще зашибись
Я говорил о том, что делать из QtCore.QCoreApplication контроллер, это плохая практика. У меня были с этим трудноотлавливаемые проблемы.
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