PyQt/Qt QThread 线程刷新UI踩过的坑

QThread,一个Qt里面的多线程类,被我踩过N次的坑。

class Thread(QThread):
	signal = Signal() #PySide2
	def run(self):
	    self.signal.emit()

...
g = Thread()
g.signal.connect(download_a_very_big_file)
g.start()

上面的代码展示了一个QThread的使用方式,使用他来下载一个特别大的文件。
当你运行之后,你就会发现,你的UI程序炸了/未响应。

翻阅了很多csdn上的文章在这里插入图片描述

真就尼玛卵蛋用没有。该卡的还是卡。

解决方案:
某篇文章写了,QT官方说啥批评将业务逻辑写在QThread内,就有了思路

python的多线程threading.Thread类继续用,接着奏乐接着演,在主UI类里添加一个signal信号槽

class FuckinUI(QWidget):
	signal = Signal()
	def ...

其他函数不受影响,只要把它放在初始化方法前就行(init)
然后在__init__里面定义:

class FuckingUI(QWidget):
	signal 
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是一个使用PyQt5的QThread类的示例,用于在文本框中每秒打印一个数字: ```python import sys from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.uic import loadUi class WorkerThread(QThread): countChanged = pyqtSignal(int) def run(self): count = 0 while True: self.countChanged.emit(count) count += 1 self.sleep(1) class MainWindow(QMainWindow): def __init__(self): super().__init__() loadUi("QThread_Example_UI.ui", self) self.workerThread = WorkerThread() self.workerThread.countChanged.connect(self.updateCount) self.workerThread.start() def updateCount(self, count): self.textEdit.append(str(count)) if __name__ == "__main__": app = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() sys.exit(app.exec_()) ``` 这个示例中,我们创建了一个继承自QThread的WorkerThread类,其中定义了一个countChanged信号和一个run方法。在run方法中,我们使用一个无限循环来不断增加计数器count,并通过countChanged信号将其发送给主窗口。 主窗口类MainWindow继承自QMainWindow,并使用loadUi方法加载了一个UI文件。在初始化方法中,我们创建了一个WorkerThread实例,并将其countChanged信号连接到了updateCount方法。然后,我们启动了workerThread线程。 updateCount方法用于更新文本框中的数字,每当countChanged信号被触发时,它会将count的值附加到文本框中。 请注意,为了运行这个示例,你需要将UI文件QThread_Example_UI.ui和Python脚本放在同一个目录下,并将UI文件转换为Python代码。你可以使用以下命令将UI文件转换为Python代码: ```shell pyuic5 QThread_Example_UI.ui -o QThread_Example_UI.py ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值