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