PyQt5 使用了 QThread 分离 UI 和逻辑,结果 UI 还是会卡住

2018-04-22 15:26:53 +08:00
 xwyam
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()

请问这个实现哪里出了问题?

5421 次点击
所在节点    Python
10 条回复
dychenyi
2018-04-22 15:31:37 +08:00
没用过 pyqt,但是在用原生 qt,qt 起线程不是 start 吗? 你怎么直接调用 run。。。
catror
2018-04-22 16:09:34 +08:00
因为你在 ui 线程里调用的 run 函数,创建的新线程没用
nicevar
2018-04-22 16:28:47 +08:00
楼主你要补一下基础知识,你这直接调用 run 怎么能行呢,跟不用线程还有啥区别,用 start 启动线程
xwyam
2018-04-22 16:51:59 +08:00
@dychenyi 擦,手抖了。。。。多谢
xwyam
2018-04-22 16:52:12 +08:00
@catror 手抖了。。。。多谢
xwyam
2018-04-22 16:52:20 +08:00
@nicevar 手抖了。。。。多谢
Hopetree
2018-04-22 20:55:54 +08:00
strat() 正解,以前我也写过 pyqt,现在感觉真麻烦,还不如写成 web
xwyam
2018-04-24 12:37:19 +08:00
@Hopetree web 爬虫的话,是用后台的 python 做,还是直接 javascript 爬?
Hopetree
2018-04-24 13:10:59 +08:00
@xwyam 当然是 python 啊,你看一下我博客的工具页面,前面的三个工具都是利用的 Python 的爬虫完成的后台,然后把结果传递到前台展现,ajax 传递数据就行了,这是小爬虫。如果是耗时间比较长的爬虫可以设置定时任务让 python 爬,然后把结果存起来,前台要调用的时候去读取结果就行了,这是我理解的方式
Hopetree
2018-04-24 13:12:27 +08:00
@xwyam 忘了发博客工具页面的链接了 http://www.tendcode.com/tool/,还有我以前写的 pyqt 的工具,是多线程的任务,https://github.com/Hopetree/TMTools

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/448888

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX