Найти - Пользователи
Полная версия: PyQt4.8.1 Обращение к GUI из потоков
Начало » GUI » PyQt4.8.1 Обращение к GUI из потоков
1
SHS
Привет.
Нигде не могу найти инфу, как обновлять progressBar из обычного питоновского потока (не Qt)
Да и вообще как обращаться к GUI из потоков. Например показать QMessageBox.
Если подбросите наипростейщий пример, буду очень признателен.
dimabest
Вместе с Qt нужно использовать Qt-шные потоки, ибо из них можно посылать сигналы.

http://python.su/forum/viewtopic.php?pid=60517#p60517
SHS
Очень жаль, но тем не менее деваться некуда и придется использовать…

Только вопрос… Как получать доступ к контроллам формы из потока 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_())
Еще интересует может ли поток принимать переменные?
dimabest
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-ов можно передавать простые параметры.
SHS
Спасибо за содержательный ответ.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB