zl程序教程

您现在的位置是:首页 >  系统

当前栏目

pysimplegui模块实现进度条

模块 实现 进度条
2023-09-14 08:59:07 时间

一、代码

import PySimpleGUI as sg
layout = [[sg.Text('任务完成进度')],
          [sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progressbar')],
          [sg.Cancel()]]

window = sg.Window('机器人执行进度', layout)
progress_bar = window['progressbar']

for i in range(1000):
    event, values = window.read(timeout=10)
    if event == 'Cancel'  or event is None:
        break
    progress_bar.UpdateBar(i + 1)

window.close()

二、进阶应用

import pandas as pd

path = r"*****"
df = pd.read_excel(path)
layout = [[sg.Text('任务完成进度')],
          [sg.Text('', size=(5, 1), font=('Helvetica', 15), justification='center', key='text')],
          [sg.ProgressBar(len(df), orientation='h', size=(50, 20), key='progressbar')],
          [sg.Cancel()]]
window = sg.Window('机器人执行进度', layout)
progress_bar = window['progressbar']
# For循环
for i in range(0, len(df)):
    print(df.iloc[i])
    time.sleep(1) #假设处理的时间
    event, values = window.read(timeout=10)
    if event == 'Cancel' or event is None:
        break
    progress_bar.UpdateBar(i + 1)
    window['text'].update('{}%'.format(int(i / len(df) * 100)))
window.close()

三、把进度条装进装饰器

import pandas as pd
from functools import wraps

def Create_progress_bar(df):
    def wrapper(func):
        @wraps(func)
        def inner(*args,**kwargs):
            layout = [[sg.Text('任务完成进度')],
                      [sg.Text('', size=(5, 1), font=('Helvetica', 15), justification='center', key='text')],
                      [sg.ProgressBar(df.shape[0], orientation='h', size=(50, 20), key='progressbar')],
                      [sg.Cancel()]]
            window = sg.Window('机器人执行进度', layout)
            progress_bar = window['progressbar']
            # For循环
            for i in range(0, df.shape[0]):
                func(i,*args,**kwargs)
                event, values = window.read(timeout=10)
                if event == 'Cancel' or event is None:
                    break
                progress_bar.UpdateBar(i + 1)
                window['text'].update('{}%'.format(int(i / df.shape[0] * 100)))
            window.close()
        return inner
    return wrapper


path = r"*************"
df = pd.read_excel(path)

@Create_progress_bar(df)
def process(i:int): # i是df的行数
    # 处理过程
    print(df.iloc[i,0])
    time.sleep(0.5)

process()