Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » PyQt4.8.1 Обращение к GUI из потоков [RSS Feed]

#1 Дек. 10, 2010 22:36:39

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

PyQt4.8.1 Обращение к GUI из потоков

Привет.
Нигде не могу найти инфу, как обновлять progressBar из обычного питоновского потока (не Qt)
Да и вообще как обращаться к GUI из потоков. Например показать QMessageBox.
Если подбросите наипростейщий пример, буду очень признателен.



Офлайн

#2 Дек. 11, 2010 01:19:59

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

PyQt4.8.1 Обращение к GUI из потоков

Вместе с Qt нужно использовать Qt-шные потоки, ибо из них можно посылать сигналы.

http://python.su/forum/viewtopic.php?pid=60517#p60517



Отредактировано (Дек. 11, 2010 01:21:34)

Офлайн

#3 Дек. 11, 2010 07:43:42

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

PyQt4.8.1 Обращение к GUI из потоков

Очень жаль, но тем не менее деваться некуда и придется использовать…

Только вопрос… Как получать доступ к контроллам формы из потока QThread?

Код:

class MyThread(QThread):


def __init__(self, parent=None):
QThread.__init__(self, parent)

countSignal = pyqtSignal(str)

def run(self):
#Тут вылетает ошибка - "CountThread has no attribute listOfTables"
selectedTable = self.listOfTables.currentItem().text()
msg = (selectedTable)
self.emit(countSignal(msg))

def __del__(self):
self.exiting = True
self.wait()


class MForm(QMainWindow):


def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.ui = Ui_MainForm()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.pushButton_OnClick)

def pushButton_OnClick(self):
self.t = MyThread()
self.t.start()
self.cntThread.countSignal.connect(self.msgBox)

def msgBox(self, msg):
QMessageBox.information(self, "Test Program", msg, 1, 0)

if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
myapp = MForm()
myapp.show()
sys.exit(app.exec_())
Еще интересует может ли поток принимать переменные?



Отредактировано (Дек. 11, 2010 09:15:30)

Офлайн

#4 Дек. 11, 2010 12:11:53

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

PyQt4.8.1 Обращение к GUI из потоков

SHS
Только вопрос… Как получать доступ к контроллам формы из потока QThread?
Никак. Обновлять GUI можно только из главного потока. В твоем случае в методе msgBox.
SHS
Еще интересует может ли поток принимать переменные?
Может.

1. через конструктор
class Thread(QThread):
def __init__(self, param):
QThread.__init__(self)
self.param = param
параметр передаем при создании потока:
thread = QThread(1111)
2. через очередь Queue.
по ссылке, которую я давал выше, как раз пример с очередью заданий (Queue). Главный поток задания кладет (put) в очередь, а рабочие потоки опрашивают очередь и задания забирают (get). В твоем случае вместо Task-ов можно передавать простые параметры.



Отредактировано (Дек. 11, 2010 12:12:52)

Офлайн

#5 Дек. 11, 2010 13:36:34

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

PyQt4.8.1 Обращение к GUI из потоков

Спасибо за содержательный ответ.



Офлайн

  • Начало
  • » GUI
  • » PyQt4.8.1 Обращение к GUI из потоков[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version