У меня есть странная проблема с QThreads in (pyqt). Я протестировал QThread с внедрением метода , выполнив метод и выполнив бесконечный цикл внутри него. это не влияет на основную нить (gui). но когда я излучаю сигнал , как ниже псевдокода, любой длинный рабочий цикл или входы влияют на основную нить и заставляют замораживать gui.QThread без реализации метода запуска
class MyThread(QThread):
def __init__(self , *args):
QThread.__init__(self , *args)
self.connect(self , SIGNAL("do_some_io(QString)") , self.doSomething)
def doSomething(self , params):
#do some large i/o and loops
parent.emit(SIGNAL("process_done()"))
class MyDialog(QDialog):
def __init__(self , *args):
QThread.__init__(self , *args)
self.Thread = MyThread(self)
self.Thread.start()
self.connect(self.btn , SIGNAL("clicked()") , self.buttonClicked)
self.connect(self , SIGNAL("process_done()") , self.showMsgBox)
def buttonClicked(self):
self.Thread.emit(SIGNAL("do_some_io(QString)") , "param")
def showMsgBox(self):
#show messagebox
Когда вы говорите Замораживание, вы имеете в виду всплеск, за несколько секунд, или, по-видимому навсегда? –
он зависает до завершения ввода/вывода или любого процесса блокировки – SantaXYZ
@SantaXYZ. Если вы понимаете, почему вам нужно переопределить 'run', и знаете, что он работает так, как ожидалось, то почему, черт возьми, вы его изменили? Чего вы на самом деле пытаетесь достичь? – ekhumoro