gpt4 book ai didi

python - 保持 PyQt UI 对线程的响应

转载 作者:行者123 更新时间:2023-12-03 17:13:41 24 4
gpt4 key购买 nike

我创建了一个相对复杂的 PyQt 程序并尝试实现线程,以便当程序遇到程序的一部分特别占用 CPU 时,GUI 将始终保持刷新和响应。可悲的是,我在线程方面遇到了一些困难。

我使用 Python 2.7 的原因我认为不相关。

无论如何,整个程序在一个类中运行并调用 PyQt 设计器 .ui 文件以显示实际的 GUI。当按下特定按钮时,为了切碎文件,它会调用该类中的一个函数,然后使用“线程”模块启动一个线程,是的,过时了,我知道。然后从这里调用的粉碎函数开始粉碎文件。在整个文件的粉碎过程中,实际的粉碎功能与 GUI 交互并向 GUI 添加位,以使用户随时了解正在发生的事情。

在执行该功能期间,GUI 会继续刷新,但是它确实变得有点滞后,我可以应付。但是,当该功能完成时,程序不会顺利继续并允许用户继续使用该程序,而是会抛出一个完全的嘶嘶声,只是停止工作并不得不关闭。

希望有人可以在这里帮助我。我将非常感谢尽可能多的细节,因为我一直在寻找一种方法来解决这个问题已经好几个星期了。

我正在使用 PyQt4。

最佳答案

这是pyqt5中线程的简单演示。 Qt 有它自己的线程类,效果很好。

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import pyqtSignal
import sys
import time

class TheBoss(QtWidgets.QWidget):
def __init__(self, parent=None):
super(TheBoss, self).__init__(parent)
self.resize(300,200)
self.VL = QtWidgets.QVBoxLayout(self)
self.label = QtWidgets.QLabel()
self.VL.addWidget(self.label)
self.logger = Logger()
self.logger.sec_signal.connect(self.label.setText)
self.logger.start()

def closeEvent(self,event):
self.logger.terminate()

class Logger(QtCore.QThread):
sec_signal = pyqtSignal(str)
def __init__(self, parent=None):
super(Logger, self).__init__(parent)
self.current_time = 0
self.go = True
def run(self):
#this is a special fxn that's called with the start() fxn
while self.go:
time.sleep(1)
self.sec_signal.emit(str(self.current_time))
self.current_time += 1

if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app.setApplicationName("Thread Example")
window = TheBoss()
window.show()
sys.exit(app.exec_())

关于python - 保持 PyQt UI 对线程的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39669556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com