很多小伙伴可能会有这么一个需求:就是使用一个Label标签(labShow)来显示循环变量的即时变化,比如刚开始标签显示:循环即将开始,当点击按钮(pbStart)循环开始后,显示现在循环到第几个,循环结束后,显示循环结束。 如图(基于pyqt5在这里插入代码片 ):
大家可能会这么写程序:
class MY_UI(QMainWindow,Ui_Form):
def __init__(self):
QMainWindow.__init__(self)
Ui_Form.__init__(self)
self.setupUi(self)#继承界面类,调用界面类的setupUi方法
self.pbStart.clicked.connect(self.start)
self.pbEnd.clicked.connect(self.close)
def start(self):
num = eval(self.txtNumber.toPlainText())
for i in range(num):
self.labShow.setText("当前循环值为:{}".format(i))
time.sleep(1)
self.labShow.setText("循环结束")
运行程序后会发现,不是我们想要的结果,程序不会显示显示循环变量的值,而是循环结束后直接显示循环结束。 代码改成如下代码即可:
import threading
class MY_UI(QMainWindow,Ui_Form):
def __init__(self):
QMainWindow.__init__(self)
Ui_Form.__init__(self)
self.setupUi(self)#继承界面类,调用界面类的setupUi方法
self.pbStart.clicked.connect(self.onbutton)
self.pbEnd.clicked.connect(self.close)
def onbutton(self):
thread=threading.Thread(target=self.start)
thread.start()
def start(self):
num = eval(self.txtNumber.toPlainText())
for i in range(num):
self.labShow.setText("当前循环值为:{}".format(i))
time.sleep(1)
self.labShow.setText("循环结束")``
具体原因大家自己分析,这也是python内置模块threading的一个基本用法
|