人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

python使用PySimpleGUI設(shè)置進度條及控件使用

發(fā)布日期:2022-03-14 08:30 | 文章來源:站長之家

PySimpleGUI 使用起來感覺比tkinter要方便,當然我也沒怎么用過這兩者。只是學習模擬一下任務(wù)進度完成情況。

安裝

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',
'內(nèi)容')
 # sg.one_line_progress_meter()
 time.sleep(10)

基本參數(shù)
前面的參數(shù)分別代表
進度條標題,
進度條當前進度,
進度條最大進度,
進度條的 key, (key相同代表是同一個進度條)
進度條傳入?yún)?shù)(可以是多個非關(guān)鍵字參數(shù))。

sg.one_line_progress_meter('進度條標題',10,100,'key1','內(nèi)容1')

其它常用參數(shù)orientation
由于參數(shù)*args 的存在,調(diào)用時如果希望傳入自定義參數(shù),那么前面的基本參數(shù)需要使用非關(guān)鍵字形式傳入。當然也可以不傳入自定義參數(shù)。
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 完成了千分之一的任務(wù)
  sg.one_line_progress_meter(
'進度條',
i+1,
1000,
'key',
'測試使用進度條',
orientation='h'
  )

此處休眠時間可以當做完成任務(wù)的時間。沒完成一點任務(wù)進度條就會增加。

但實際上真正運行時有很多耗時任務(wù)執(zhí)行時會阻塞進度條。使進度條陷入未響應(yīng)狀態(tài)(如第一個圖片)。所以一般會把耗時任務(wù)使用多線程執(zhí)行,執(zhí)行完成后想辦法通知進度條更新狀態(tài)。注(PySimpleGUI組件需要運行在主線程,參見源文檔說明)

one_line_progress_meter雖然方便,但樣式無法控制,其上也有很多不關(guān)心的顯示無法去除。。。

附。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('幾秒后自動關(guān)閉的彈窗')
sg.popup_auto_close('10秒后自動關(guān)閉的彈窗', auto_close_duration=10)

二、進度條控件使用

普通方法展示進度條控件。需要大概知曉布局和窗口的關(guān)系。

import PySimpleGUI as sg
# 布局,是一個用戶定義的二維列表。
# 第一維德元素分居不同的行上,第二維度上的元素們居于同一行,不同列上
# 此處定義的列表  由三部分組成 Text文件 ProgressBar進度條 Cancel取消按鈕構(gòu)成
# Text Progress等有各自的參數(shù)設(shè)置,如size等。此處不再贅述
layout = [[sg.Text('任務(wù)完成進度')],
 [sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progressbar')],
 [sg.Cancel()]]
# window只需將自定義的布局加載出來即可 第一個參數(shù)是窗口標題。
window = sg.Window('機器人執(zhí)行進度', layout)
# 根據(jù)key值獲取到進度條
progress_bar = window['progressbar']
# window的read函數(shù)分為同步和異步,
# 不帶timeout參數(shù)即為同步函數(shù) 一直等到手動點擊按鈕才會返回。
# 帶timeout參數(shù)不為None的為異步函數(shù),timeout時間內(nèi)無時間或者點擊了按鈕都會產(chǎn)生結(jié)果。
# 異步方式不會阻塞后面的程序運行。
for i in range(1000):	# 循環(huán)
 event, values = window.read(timeout=10)
 if event == 'Cancel' or event is None:
  break
 progress_bar.UpdateBar(i + 1)
window.close()

此處依然是使用的for循環(huán)將進度條填滿。下面使用線程模擬任務(wù)進度完成。

三、模擬任務(wù)完成度 進度條

使用線程模擬任務(wù)進度完成。當然,沒有現(xiàn)實的任務(wù),所以還是使用for循環(huán)加休眠組成。。。當然,與原來還是有區(qū)別的。因為任務(wù)在線程內(nèi)完成,完成后需要通知主線程進度條更新。

import random
import time
from queue import Empty
import PySimpleGUI as sg
import threading
import queue
# 布局,是一個用戶定義的二維列表。
# 第一維德元素分居不同的行上,第二維度上的元素們居于同一行,不同列上
# 此處定義的列表  由三部分組成 Text文件 ProgressBar進度條 Cancel取消按鈕構(gòu)成
layout = [[sg.Text('任務(wù)完成進度')],
 [sg.ProgressBar(100, orientation='h', size=(50, 20), key='progressbar')],
 [sg.Cancel()]]
# window只需將自定義的布局加載出來即可 第一個參數(shù)是窗口標題。
window = sg.Window('機器人執(zhí)行進度', layout)
# 根據(jù)key值獲取到進度條
progress_bar = window['progressbar']
# 隊列 后進先出
q = queue.Queue()

def task_1():
 global q
 for i in range(100):
  # 因為要大于window.read設(shè)置超時時間100ms 保證讀取時隊列最多只有一個元素
  time.sleep(random.random() + 0.1)
  q.put(i+1) # 向隊列中放入當前任務(wù)完成度
# 創(chuàng)建多線程 設(shè)置以保護模式啟動,即主線程運行結(jié)束,子線程也停止運行
worker_task = threading.Thread(target=task_1)
worker_task.setDaemon(True)
worker_task.start()
while True:  # 死循環(huán)不斷讀取隊列中數(shù)據(jù),直到讀到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是等待讀取,直到讀取到數(shù)據(jù)
  #  get_nowait 不等待,讀取不到數(shù)據(jù) 就報異常
  progress_value = q.get_nowait()
 except Empty:# 沒有讀取到數(shù)據(jù)的話,繼續(xù)window.read
  continue
 else:# 讀取到數(shù)據(jù)
  progress_bar.UpdateBar(progress_value)
  if progress_value == 100:# 進度滿跳出循環(huán)
break
window.close()

以上就是python使用PySimpleGUI設(shè)置進度條的詳細內(nèi)容,更多關(guān)于python PySimpleGUI進度條的資料請關(guān)注本站其它相關(guān)文章!

香港服務(wù)器租用

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部