Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 19, 2010 09:29:39

linzman
От:
Зарегистрирован: 2010-03-10
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

ООП

Добрый день, помогите пожалуйста с ооп,

я использую PyQt4, у меня в главном классе при помощи экземпляра другого класса , создаются потоки которые выполняют какие то действия, и результат этих действий, надо возвращать в форму, скажите пожалуйста как организовать архитектуру классов чтобы я из потоков мог писать в гуи?



Офлайн

#2 Ноя. 19, 2010 10:36:52

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

ООП

Я не писал с PyQT4, но возможно выходом здесь может послужить паттерн Event Bus (дополненный паттерн Observer) - http://www.dossier-andreas.net/software_architecture/eventbus.html Вот его простейшая реализация:

class Event(object):
__events = []

@classmethod
def fire(cls, name, *args):
for event in cls.__events:
if event.__name == name:
event.__method(*args)

def __init__(self, name, method):
self.__name = name
self.__method = method
Event.__events.append(self)
Тогда в вашем классе GUI при инициализации вы можете подписаться на какое-то событие и добавить обработчик:
Event('some_event_X', self.__on_event_X)
...
def __on_event_X(self, arg1, arg2):
... do something here
По завершении работы поток генерирует этот ивент, передавая аргументами результаты работы:
Event.fire('some_event_X', arg1, arg2)
Тогда Event класс найдет в списке ивент с именем ‘some_event_X’, вызовет метод __on_event_X и передаст ему аргументы arg1, arg2 (в общем любые аргументы какие вы укажете в Event.fire). Класс Event конечно должен быть расширен методами unsubscribe, возможно поиском ивентов по типу, а не по имени и т.п. вещами, но это уже детали реализации.



Офлайн

#3 Ноя. 19, 2010 16:12:45

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

ООП

linzman
скажите пожалуйста как организовать архитектуру классов чтобы я из потоков мог писать в гуи?
http://python.su/forum/viewtopic.php?pid=59645#p59645



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version