Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PySide: Опять про сигналы и потоки [RSS Feed]

#1 Сен. 9, 2011 02:25:07

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

PySide: Опять про сигналы и потоки

Помогите разобраться c Qt'шными потоками.
И так, по нажатию кнопки стартует функция, которая запускает потоки. После того как поток отработал он должен внести изменения в соответствующее поле в таблице.

В тестовом варианте ‘i’ из потока должно выводиться через функцию test. Но это не работает. Подскажите плиз как это можно сделать?

def chk_upd(self): #

def test(q):
print q

self.threads = []
for i in range(self.tableWidget.rowCount()):
name = self.tableWidget.item(i,0).text()
thread = ChechUpdThread()
self.threads.append(thread)
QObject.connect(thread,SIGNAL('test'),test)
thread.start()
поток:
class ChechUpdThread(QThread):
def __init__(self, parent=None):
super(ChechUpdThread, self).__init__(parent)

def run(self):
#Тут код, который возвращяет 1 или 0
i = 1
self.emit(SIGNAL('test'), i)



Офлайн

#2 Сен. 16, 2011 06:01:10

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

PySide: Опять про сигналы и потоки

Так, с одной проблемой я разобрался. Теперь вопрос в следующем. Проконсультируйте по поводу QThreadPool и QRunnable. Как их правильно использовать?
Сперва сам поток:

class CheckUpdThread(QRunnable, QObject):
result = Signal(object)
def __init__(self, queue, parent=None):
super(CheckUpdThread, self).__init__(parent)
QObject.__init__(self)
self.queue = queue

def run(self):
while not self.queue.empty():
item = self.queue.get()
self.result.emit(('Start',item[1]))
url = PyBase().getUrlByName(item[0])
checkUpdate = WebSite().checkUpd(item[0], url)['stats']
if checkUpdate == '0':
res = (0,item[1])
elif checkUpdate == '1':
res = (1,item[1])
self.result.emit(res)
Проблема в том что после запуска потока не обновляется главное окно, пока все потоки не отработают:
        
thread = CheckUpdThread(self.queue)
thread.result.connect(test)
q = QThreadPool()
for i in range(q.maxThreadCount()):
q.start(thread)
Если использовать QThread вместо QRunnable то все отрабатывает нормально, но мне нужно знать когда все потоки отработают



Офлайн

  • Начало
  • » GUI
  • » PySide: Опять про сигналы и потоки[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version