Осваиваю 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)