爱问问题的编程小白 2022-04-19 22:06 采纳率: 75%
浏览 342
已结题

如何用pyqt5的Qprogressbar控件做一个显示脚本运行进度的进度条?

想用pyqt5做一个显示脚本运行的进度条,但是不知道如何写代码才能触发qprogressbar控件的信号槽监测到我的这个脚本

我的脚本文件:
import os,sys

def file_calcuation3(file3):
for foldername in os.listdir(file3):
print(foldername)
old_file_name = foldername
newname = foldername.replace('1_', '')
print(newname)
new_file_name = newname
os.rename(file3+'/' + old_file_name,file3+'/' + new_file_name)

上网查大都数案例都是下面这种,请问我该如何进行代码编写,才能让Qprogressbar控件知道我的脚本运行结果,实现我的脚本文件的进度显示
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QProgressBar
from PyQt5.QtCore import QBasicTimer
class MyClass(QWidget):
definit(self):
super().init()
self.initUI()
def initUI(self):
self.resize(300, 200)

载入进度条控件

self.pgb = QProgressBar(self)
self.pgb.move(50, 50)
self.pgb.resize(250, 20)
self.pv = 0
self.timer1 = QBasicTimer()
self.pgb.setMinimum(0)
self.pgb.setMaximum(100)
self.pgb.setValue(self.pv)
self.btn = QPushButton("开始", self)
self.btn.move(50, 100)
self.btn.clicked.connect(self.myTimerState)
self.show()
def myTimerState(self):
if self.timer1.isActive():
self.timer1.stop()
self.btn.setText("开始")
else:
self.timer1.start(100, self)
self.btn.setText("停止")
def timerEvent(self, e):
if self.pv == 100:
self.timer1.stop()
self.btn.setText("完成")
else:
self.pv += 1
self.pgb.setValue(self.pv)

if name == "main":
app = QApplication(sys.argv)
mc = MyClass()
app.exec_()

  • 写回答

2条回答 默认 最新

  • 关注
    
    import os
    import sys
    
    from PyQt5.QtCore import QBasicTimer
    from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QProgressBar
    from threading import Thread
    
    class MyClass(QWidget):
        def __init__(self):
            super().__init__()
            self.initUI()
        
        def initUI(self):
            self.resize(300,200)
            self.pgb = QProgressBar(self)
            self.pgb.move(50,50)
            self.pgb.resize(250,20)
            self.pv = 0
            # self.timer1 = QBasicTimer()
            self.pgb.setMinimum(0)
            self.pgb.setMaximum(100)
            self.pgb.setValue(self.pv)
            self.btn = QPushButton("开始",self)
            self.btn.move(50,100)
            self.btn.clicked.connect(self.myTimerState)
            self.show()
        
        def myTimerState(self):
            # if self.timer1.isActive():
            #     self.timer1.stop()
            #     self.btn.setText("开始")
            # else:
            #     # self.timer1.start(100,self)
            #     self.btn.setText("停止")
            if self.btn.text()=="开始":
                self.pgb.setValue(0)
                self.btn.setText("停止")
                # 启动脚本
                filefath=r"G:\迅雷下载"
                Thread(target = self.file_calcuation3,args = (filefath,)).start()
                # self.file_calcuation3(filefath)
            else:
                self.btn.setText("开始")
                
        def timerEvent(self,e):
            if self.pv == 100:
                self.timer1.stop()
                self.btn.setText("完成")
            else:
                self.pv += 1
                self.pgb.setValue(self.pv)
    
        def file_calcuation3(self,file3):
            templist=os.listdir(file3)
            # 获取进度总量
            total=len(templist)
            for i in range(total):
                foldername=templist[i]
                print(foldername)
                old_file_name = foldername
                newname = foldername.replace('_01','')
                print(newname)
                new_file_name = newname
                os.rename(file3 + '/' + old_file_name,file3 + '/' + new_file_name)
                self.pv=int(round((i+1)/total*100,0))
                print(self.pv)
                self.pgb.setValue(self.pv)
            print('任务完成')
            self.btn.setText("开始")
    
    
    if __name__ == '__main__':
        
        app = QApplication(sys.argv)
        mc = MyClass()
        app.exec_()
    

    有帮助请采纳,谢谢

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月29日
  • 已采纳回答 4月21日
  • 创建了问题 4月19日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装