Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 26, 2010 19:48:41

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt архитектура приложения

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

вот первая форма:
#-*- 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_())


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



Отредактировано (Фев. 26, 2010 19:50:43)

Офлайн

#2 Фев. 26, 2010 20:57:15

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt архитектура приложения

#!/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_()



Офлайн

#3 Фев. 27, 2010 12:31:37

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt архитектура приложения

Базука спасибо огромное!!!!!!!!! хороший и четкий пример,все сразу понятно стало!!!



Офлайн

#4 Фев. 27, 2010 12:52:37

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

PyQt архитектура приложения

на новых PyQt можно подписывать на сигналы вот так

self.hellobutton.clicked.connect(self.hello)



Офлайн

#5 Фев. 27, 2010 12:57:03

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PyQt архитектура приложения

truporez
на новых PyQt можно подписывать на сигналы вот так
На новых??? Уж года полтора как…
И это правильно.



Офлайн

#6 Фев. 27, 2010 12:59:05

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt архитектура приложения

Спасибо всем!!! тоже буду иметь ввиду.



Офлайн

#7 Фев. 27, 2010 13:22:31

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PyQt архитектура приложения

Хм… Посмотрел твой пример, bazooka… Мой опыт говорит о том, что QtGui.QApplication (как и QtCore.QCoreApplication) лучше трогать только в крайнем случае и оставить его только для настройки/допилки самого приложения.
Лучше сделать класс-контроллер от QtCore.QWidget, который создать после QtGui.QApplication:

if __name__ == "__main__":
app = QtGui.Application(sys.argv)
controller = Controller()
app.exec_()
А вот при инициализации контроллера создавать/настраивать виджеты (и модели!).
Помните: правильная проработка архитектуры, это половина программы.



Офлайн

#8 Фев. 27, 2010 14:27:42

bazooka
От:
Зарегистрирован: 2009-04-12
Сообщения: 165
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt архитектура приложения

у тебя контроллер - один виджет
а в моем примере надо подправить QPushButton на QMainWindow и тогда будет ваще зашибись



Офлайн

#9 Фев. 27, 2010 15:40:56

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

PyQt архитектура приложения

bazooka
у тебя контроллер - один виджет
Ой! Это я заглючился… Обрати внимание, что в модуле QtCore нет класса QWidget. Конечно, я имел в виду QtCore.QObject. А можно, кстати, и от обычного object – переносимее.

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



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version