下面就是详细讲解如何使用PySimpleGUI设置进度条及控件使用的完整攻略:
1. 安装 PySimpleGUI
在开始使用 PySimpleGUI 之前,需要先安装它。可以使用 pip 命令进行安装:
pip install pysimplegui
2. 创建窗口和布局
创建 PySimpleGUI 窗口非常简单,在代码中导入 PySimpleGUI,然后创建一个窗口变量并定义其布局,即可创建一个窗口:
import PySimpleGUI as sg
# 定义应用主题
sg.theme('Dark Blue 3')
# 定义窗口布局
layout = [[sg.Text('My progress bar window')],
[sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progress')],
[sg.Cancel()]]
# 创建窗口
window = sg.Window('Window Title', layout) # 定义窗体大小
以上代码中,我们定义了一个名为 Window Title
的窗口,并设置了主题和布局。在布局中,我们添加了一个文本标签、一个进度条和一个 Cancel
按钮。
3. 更新进度条
在开始更新进度条之前,首先要正确定义一个变量,该变量用于存储进度的百分比。在本示例中,假设我们要将进度条设置为到达 1000 帧(或 1000 行文件),则我们定义一个变量 progress_value
来存储进度百分比:
# 用于存储进度
progress_value = 0
然后,在更新进度条之前,我们需要使用 read
方法读取窗口的变化,以便可以及时更新进度条的状态。我们可以使用 PySimpleGUI 的 Update
方法来更新进度条的值,如下所示:
while True:
event, values = window.read(timeout=100)
if event == 'Cancel' or event == sg.WIN_CLOSED:
break
# 更新进度条
window['progress'].update_bar(progress_value + 1)
if progress_value >= 1000:
break
progress_value += 1
以上代码中,我们使用 window.read()
方法来读取窗体,以便捕获事件并更新进度条。我们使用 window['progress'].update_bar()
方法来更新进度条的值。在每次循环时,我们将变量 progress_value
增加 1,然后使用 update_bar()
方法来更新进度条。
4. 示例说明
示例一:文件读取进度条
下面是一个完整的示例,该示例使用 PySimpleGUI 创建了一个带有进度条的窗口,以显示读取文件的进度:
import PySimpleGUI as sg
sg.theme('Dark Blue 3')
layout = [[sg.Text('File Reading Progress')],
[sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progress')],
[sg.Cancel()]]
window = sg.Window('File Reader', layout)
file = open('my_file.txt', 'r')
num_lines = sum(1 for line in file)
file.close()
progress_value = 0
with open('my_file.txt', 'r') as file:
while True:
event, values = window.read(timeout=100)
if event == 'Cancel' or event == sg.WIN_CLOSED:
break
line = file.readline()
if not line:
break
# 更新进度条
progress_value += 1
window['progress'].update_bar(progress_value)
file.close()
window.close()
在示例中,我们打开一个文本文件 my_file.txt
,预计文件中有 1000 行。我们使用 sum
方法预先处理文件中行的数目,这样可以减少代码中的代码,并确保进度条到达 100%。
然后,在主循环中,我们使用 window.read()
方法读取窗口,以便自动更新进度条的状态。我们读取文件的每一行,并使用 update_bar()
方法来显示文件读取的进度。文件读取完成后,我们关闭文件并关闭窗口。
示例二:多个进度条
PySimpleGUI 还支持多个进度条,使其成为创建示例并监视其进度的强大工具。
在下面的示例中,我们为水果服务的订单创建了一个窗口,它包含一个完整配送订单的进度条,以及每个水果的独立进度条(苹果,香蕉和橙子):
import PySimpleGUI as sg
import time
sg.theme('Dark Blue 3')
apples = 50
bananas = 100
oranges = 20
total_orders = apples + bananas + oranges
# 定义布局
layout = [[sg.Text('Order Progress')],
[sg.ProgressBar(total_orders, orientation='h', size=(40,10), key='orders')],
[sg.Text('Apple')],
[sg.ProgressBar(apples, orientation='h', size=(20, 20), key='apple_progress')],
[sg.Text('Bananas')],
[sg.ProgressBar(bananas, orientation='h', size=(20, 20), key='banana_progress')],
[sg.Text('Oranges')],
[sg.ProgressBar(oranges, orientation='h', size=(20, 20), key='orange_progress')],
[sg.Cancel()]]
# 创建窗口
window = sg.Window('Fruit Order Progress', layout)
# 定义变量
orders_complete = 0
apple_complete = 0
banana_complete = 0
orange_complete = 0
while True:
event, values = window.Read(timeout=10)
if event == 'Cancel' or event == sg.WIN_CLOSED:
break
# 更新订单进度条
if orders_complete < total_orders:
window['orders'].update_bar(orders_complete + 1)
orders_complete += 1
# 更新水果进度条
if apple_complete < apples and orders_complete >= apple_complete:
window['apple_progress'].update_bar(apple_complete + 1)
apple_complete += 1
if banana_complete < bananas and orders_complete >= apple_complete + banana_complete:
window['banana_progress'].update_bar(banana_complete + 1)
banana_complete += 1
if orange_complete < oranges and orders_complete >= apple_complete + banana_complete + orange_complete:
window['orange_progress'].update_bar(orange_complete + 1)
orange_complete += 1
window.close()
在本示例中,我们创建了一个名为 Fruit Order Progress
的窗口,并将订单进度条、苹果进度条、香蕉进度条和橙子进度条添加到该窗口中。我们还定义了变量来跟踪我们处理的水果数量、订单数量和进度百分比。
在主循环中,我们首先使用 window.read()
方法读取窗口。然后,我们更新订单进度条和各个水果进度条的状态。请注意,在更新每个进度条之前,我们都检查该条所需的任务是否已完成。如果已经完成,则不更新该进度条。
最后,当事件为 Cancel
时或窗口关闭时,我们退出主循环并关闭窗口。
以上就是使用 PySimpleGUI 设置进度条及控件的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python使用PySimpleGUI设置进度条及控件使用 - Python技术站