PyQt5 使用了 QThread 分离 UI 和逻辑,结果 UI 还是会卡住
class Ux(QMainWindow, window.Ui_MainWindow):
@pyqtSlot()
def do_stop_search(self):
pass
@pyqtSlot(dict)
def do_append_result(self, item):
pass
def on_btn_search_clicked(self):
self.search = SearchThread(self, text)
self.search.run()
class SearchThread(QThread):
to_append_result = pyqtSignal([dict])
to_stop_search = pyqtSignal()
def __init__(self, obj, key_word):
super().__init__()
self.site = obj.site # obj.site is a class
self.key = key_word
self.to_append_result.connect(obj.do_append_result)
self.to_stop_search.connect(obj.do_stop_search)
def run(self):
search = self.site(self.to_append_result)
search.search(self.key) # do a lot of things
self.to_stop_search.emit()
请问这个实现哪里出了问题?
----------------------- 以下是精选回复-----------------------
答:没用过 pyqt,但是在用原生 qt,qt 起线程不是 start 吗? 你怎么直接调用 run。。。
答:因为你在 ui 线程里调用的 run 函数,创建的新线程没用
答:楼主你要补一下基础知识,你这直接调用 run 怎么能行呢,跟不用线程还有啥区别,用 start 启动线程
答:strat() 正解,以前我也写过 pyqt,现在感觉真麻烦,还不如写成 web
0条评论