• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python使用PySimpleGUI设置进度条及控件使用

    PySimpleGUI 使用起来感觉比tkinter要方便,当然我也没怎么用过这两者。只是学习模拟一下任务进度完成情况。

    安装

    pip install PySimpleGUI

    一、简单进度条使用

    PySimpleGUI有一个一条命令即可展示进度条的控件。one_line_progress_meter

    import time
    import PySimpleGUI as sg
    
    
    if __name__ == '__main__':
        sg.one_line_progress_meter('进度条标题',
                                   10,
                                   100,
                                   'key1',
                                   '内容')
        # sg.one_line_progress_meter()
        time.sleep(10)

    基本参数
    前面的参数分别代表
    进度条标题,
    进度条当前进度,
    进度条最大进度,
    进度条的 key, (key相同代表是同一个进度条)
    进度条传入参数(可以是多个非关键字参数)。

    sg.one_line_progress_meter('进度条标题',
                               10,
                               100,
                               'key1',
                               '内容1')

    其它常用参数orientation
    由于参数*args 的存在,调用时如果希望传入自定义参数,那么前面的基本参数需要使用非关键字形式传入。当然也可以不传入自定义参数。
    orientation 表示 进度条是横向的或是纵向的。
    h横向 v纵向(默认)

     sg.one_line_progress_meter(title='进度条标题2',
                                   current_value=20,
                                   max_value=100,
                                   key='key2',
                                   orientation='h')

    模拟进度条一步步填满

    import time
    import PySimpleGUI as sg
    
    
    if __name__ == '__main__':
        for i in range(1000):
            time.sleep(0.02)    # 模拟0.02s 完成了千分之一的任务
            sg.one_line_progress_meter(
                '进度条',
                i+1,
                1000,
                'key',
                '测试使用进度条',
                orientation='h'
            )

    此处休眠时间可以当做完成任务的时间。没完成一点任务进度条就会增加。

    但实际上真正运行时有很多耗时任务执行时会阻塞进度条。使进度条陷入未响应状态(如第一个图片)。所以一般会把耗时任务使用多线程执行,执行完成后想办法通知进度条更新状态。注(PySimpleGUI组件需要运行在主线程,参见源文档说明)

    one_line_progress_meter虽然方便,但样式无法控制,其上也有很多不关心的显示无法去除。。。

    附。PySimpleGUI的弹窗使用。

    sg.popup('注意!')
    sg.popup_ok('默认弹窗')
    sg.popup_yes_no('带Yes和No按钮的弹窗')
    sg.popup_cancel('带cancel按钮的弹窗')
    sg.popup_ok_cancel('带OK和cancel按钮的弹窗')
    sg.popup_error('带红色error按钮的弹窗')
    sg.popup_auto_close('几秒后自动关闭的弹窗')
    sg.popup_auto_close('10秒后自动关闭的弹窗', auto_close_duration=10)

    二、进度条控件使用

    普通方法展示进度条控件。需要大概知晓布局和窗口的关系。

    import PySimpleGUI as sg
    
    # 布局,是一个用户定义的二维列表。
    # 第一维德元素分居不同的行上,第二维度上的元素们居于同一行,不同列上
    # 此处定义的列表  由三部分组成 Text文件 ProgressBar进度条 Cancel取消按钮构成
    # Text Progress等有各自的参数设置,如size等。此处不再赘述
    layout = [[sg.Text('任务完成进度')],
              [sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progressbar')],
              [sg.Cancel()]]
    
    # window只需将自定义的布局加载出来即可 第一个参数是窗口标题。
    window = sg.Window('机器人执行进度', layout)
    
    # 根据key值获取到进度条
    progress_bar = window['progressbar']
    
    # window的read函数分为同步和异步,
    # 不带timeout参数即为同步函数 一直等到手动点击按钮才会返回。
    # 带timeout参数不为None的为异步函数,timeout时间内无时间或者点击了按钮都会产生结果。
    # 异步方式不会阻塞后面的程序运行。
    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()

    此处依然是使用的for循环将进度条填满。下面使用线程模拟任务进度完成。

    三、模拟任务完成度 进度条

    使用线程模拟任务进度完成。当然,没有现实的任务,所以还是使用for循环加休眠组成。。。当然,与原来还是有区别的。因为任务在线程内完成,完成后需要通知主线程进度条更新。

    import random
    import time
    from queue import Empty
    
    import PySimpleGUI as sg
    import threading
    import queue
    
    # 布局,是一个用户定义的二维列表。
    # 第一维德元素分居不同的行上,第二维度上的元素们居于同一行,不同列上
    # 此处定义的列表  由三部分组成 Text文件 ProgressBar进度条 Cancel取消按钮构成
    layout = [[sg.Text('任务完成进度')],
              [sg.ProgressBar(100, orientation='h', size=(50, 20), key='progressbar')],
              [sg.Cancel()]]
    
    # window只需将自定义的布局加载出来即可 第一个参数是窗口标题。
    window = sg.Window('机器人执行进度', layout)
    
    # 根据key值获取到进度条
    progress_bar = window['progressbar']
    
    # 队列 后进先出
    q = queue.Queue()
    
    
    def task_1():
        global q
        for i in range(100):
            # 因为要大于window.read设置超时时间100ms 保证读取时队列最多只有一个元素
            time.sleep(random.random() + 0.1)
            q.put(i+1)    # 向队列中放入当前任务完成度
    
    # 创建多线程 设置以保护模式启动,即主线程运行结束,子线程也停止运行
    worker_task = threading.Thread(target=task_1)
    worker_task.setDaemon(True)
    worker_task.start()
    
    while True:     # 死循环不断读取队列中数据,直到读到100
        # event 就是返回的事件
        # 如点击Cancel后    event=Cancel
        event, values = window.read(timeout=100)
        if event == 'Cancel' or event is None:
            # 点击取消按钮或者返回事件为 None
            break
    
        # 10ms 无操作算超时event会等于 __TIMEOUT__
        # 其实不用判断
        try:
            # get是等待读取,直到读取到数据
            #  get_nowait 不等待,读取不到数据 就报异常
            progress_value = q.get_nowait()
        except Empty:   # 没有读取到数据的话,继续window.read
            continue
        else:   # 读取到数据
            progress_bar.UpdateBar(progress_value)
            if progress_value == 100:   # 进度满跳出循环
                break
    
    window.close()

    以上就是python使用PySimpleGUI设置进度条的详细内容,更多关于python PySimpleGUI进度条的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • 6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
    • 一个非常简单好用的Python图形界面库(PysimpleGUI)
    • 六种酷炫Python运行进度条效果的实现代码
    • Python 给下载文件显示进度条和下载时间的实现
    • Python Multiprocessing多进程 使用tqdm显示进度条的实现
    • 详细介绍Python进度条tqdm的使用
    • 在python tkinter中Canvas实现进度条显示的方法
    • Python小进度条显示代码
    上一篇:python3+PyQt5+Qt Designer实现界面可视化
    下一篇:浅谈如何测试Python代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python使用PySimpleGUI设置进度条及控件使用 python,使用,PySimpleGUI,设置,