Осваиваю PyQt.
Разбираюсь с нитками.
Конкретно меня интересует следующее, какая-то нитка вырабатывает
сигнал и передаёт произвольный питоновский объект в основной цикл
разбора сообщений.
Делаю следующее:
class Producer(QThread):
def __init__(self, parent=None):
QThread.__init__(self, parent)
self.keep_running = True
self.count = 0
self.active = False
def activate(self):
self.active = True
def deactivate(self):
self.active = False
def run(self):
while self.keep_running:
self.count += 1
# Вот именно 300 или что здесь указать зачасутю передаётся
# вместо словаря с данными
self.msleep(300)
d = {
'time': time.time(),
'count': self.count }
self.d = d
# Тут пробовал указывать и d и self.d
if self.active:
self.emit(SIGNAL('newData'), dict(d))
class Logic(QObject):
def __init__(self, widget):
QObject.__init__(self)
self.widget = widget
self.text = self.widget.text
self.start_button = self.widget.start_button
self.stop_button = self.widget.stop_button
self.thread = Producer()
self.connect(self.start_button, SIGNAL('clicked()'),
self.thread.activate)
self.connect(self.stop_button, SIGNAL('clicked()'),
self.thread.deactivate)
# Здесь пробовал Qt.QueuedConnection не указывать. Та же фигня
self.connect(self.thread, SIGNAL('newData'), self.processData,
Qt.QueuedConnection)
self.connect(self.thread, SIGNAL('text(QString)'), self.text.append)
self.thread.start()
def processData(self, data):
print data
print type(data)
И косяк в том что Logic.processData() иногда печатает то что надо,
т.е. словарь а иногда (даже скорее как правило :-() передаётся
значение аргумента Producer.msleep() 8-()
Знатоки PyQT, что я делаю не так? И как это надо делать?
P.S. В wxPython-е такое работает на ура :-)

Ответ на:
комментарий
от ero-sennin
Ответ на:
комментарий
от redvasily

Ответ на:
комментарий
от ero-sennin

Ответ на:
комментарий
от ero-sennin
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Kill QThread (2011)
- Форум Быдлокод Pygtk (2012)
- Форум pyqt5 + QPyDesignerTaskMenuExtension (2018)
- Форум Timers cannot be stopped from another thread (2016)
- Форум [gtk][pygtk] Неправильная реакция на обработчики сигналов «test-collapse-row» и «test-expand-row» виджета gtk.TreeView (2011)
- Форум Убить процесс загрузки стрима в vlc.py (2017)
- Форум Python PyQt5 вspjd виджета из класса eventFilter (2020)
- Форум Добавить выполнение команды после каждого ввода в qtconsole (2017)
- Форум pygtk обработка флагов (2012)
- Форум Закрыть окно gtk, если оно потеряло фокус (2024)