Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 26, 2009 16:14:17

Ockonal
От:
Зарегистрирован: 2009-03-05
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt - система оповещений

Здравствуйте, в моей программе реализована функция оповещений (всплывающие окна). У меня есть отдельный класс, который над всем этим работает, у него есть статистическая ф-ция,в которую передают текст и тип оповещения. Например: (“Файл не найден”, “Ошибка”).
В разных частях импортирую этот класс и использую. Но есть проблемка, вызывать из других потоков нельзя.
Одна из идей была создать свой сигнал и привязать его к классу с оповещениями. И просто когда надо emit сигнал с нужными параметрами. Но как-то все криво. Что скажите?



Офлайн

#2 Апрель 26, 2009 18:10:38

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt - система оповещений

Одна из идей была создать свой сигнал и привязать его к классу с оповещениями. И просто когда надо emit сигнал с нужными параметрами. Но как-то все криво.
Так сигналы нужно не привязывать к классу, а определять слоты и соединять нужные сигналы с нужными слотами. И тогда не будет криво.



Отредактировано (Апрель 26, 2009 18:13:13)

Офлайн

#3 Апрель 26, 2009 18:57:13

Ockonal
От:
Зарегистрирован: 2009-03-05
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt - система оповещений

Значит я могу как-то глобально все это делать? Не привязывать к классам?
Например:
connect(AlertClass, SIGNAL(“signature…”), AlertClass.ShowAlert)
Так я привязываю мой класс, который показывает уведомления к сигналу, обработчик - статистическая ф-ция в классе AlertClass
И в нужном месте эмулирую сигнал: emit(SIGNAL(“signature…”))
Так пройдет?



Офлайн

#4 Апрель 26, 2009 19:29:48

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt - система оповещений

Главная цель - это создать событие (event) в главном потоке программы, в котором работает eventloop Qt-а.
1) создать свой кастомный event и делать postEvent из рабочего потока, сам event и диалог будут отрабатываться в основном потоке;
- или -
2) посылать сигнал (по сути тоже самое что и первое, только более высокоуровневое) из рабочего потока;
В любом случае нужен получатель события, который будет показывать диалог - им может быть любой Qt-шный класс. Как всё это будет реализовано - это уже отдельный вопрос, я бы сделал всё в рамках одного класса и посылал бы события “сам себе” но через eventloop :)



Офлайн

#5 Апрель 26, 2009 19:32:34

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt - система оповещений

Ockonal connect(AlertClassInstance, SIGNAL(“signature…”), AlertClass.ShowAlert)



Офлайн

#6 Апрель 26, 2009 19:37:59

Ockonal
От:
Зарегистрирован: 2009-03-05
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt - система оповещений

А можете показать какой-то небольшой пример… Я что-то не могу въехать.



Отредактировано (Апрель 26, 2009 19:38:45)

Офлайн

#7 Апрель 27, 2009 00:05:40

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

PyQt - система оповещений

Офлайн

#8 Апрель 27, 2009 21:56:37

Ockonal
От:
Зарегистрирован: 2009-03-05
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt - система оповещений

Спасибо за пример. Кажется, понял.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version