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

如何用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日

悬赏问题

  • ¥15 网络科学导论,网络控制
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)