欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年06月10日 10:24:30   作者:dandanfengyun  
PySimpleGUI是一個(gè)在tkinter基礎(chǔ)上的,足夠簡單,方便,pythonic的GUI庫.本文給大家介紹python使用PySimpleGUI設(shè)置進(jìn)度條的方法及進(jìn)度條控件使用代碼,感興趣的朋友跟隨小編一起看看吧

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

安裝

pip install PySimpleGUI

一、簡單進(jìn)度條使用

PySimpleGUI有一個(gè)一條命令即可展示進(jìn)度條的控件。one_line_progress_meter

import time
import PySimpleGUI as sg


if __name__ == '__main__':
    sg.one_line_progress_meter('進(jìn)度條標(biāo)題',
                               10,
                               100,
                               'key1',
                               '內(nèi)容')
    # sg.one_line_progress_meter()
    time.sleep(10)

進(jìn)度條1

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

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

其它常用參數(shù)orientation
由于參數(shù)*args 的存在,調(diào)用時(shí)如果希望傳入自定義參數(shù),那么前面的基本參數(shù)需要使用非關(guān)鍵字形式傳入。當(dāng)然也可以不傳入自定義參數(shù)。
orientation 表示 進(jìn)度條是橫向的或是縱向的。
h橫向 v縱向(默認(rèn))

 sg.one_line_progress_meter(title='進(jìn)度條標(biāo)題2',
                               current_value=20,
                               max_value=100,
                               key='key2',
                               orientation='h')

進(jìn)度條2

模擬進(jìn)度條一步步填滿

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(
            '進(jìn)度條',
            i+1,
            1000,
            'key',
            '測(cè)試使用進(jìn)度條',
            orientation='h'
        )

進(jìn)度條3

此處休眠時(shí)間可以當(dāng)做完成任務(wù)的時(shí)間。沒完成一點(diǎn)任務(wù)進(jìn)度條就會(huì)增加。

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

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

附。PySimpleGUI的彈窗使用。

sg.popup('注意!')
sg.popup_ok('默認(rèn)彈窗')
sg.popup_yes_no('帶Yes和No按鈕的彈窗')
sg.popup_cancel('帶cancel按鈕的彈窗')
sg.popup_ok_cancel('帶OK和cancel按鈕的彈窗')
sg.popup_error('帶紅色error按鈕的彈窗')
sg.popup_auto_close('幾秒后自動(dòng)關(guān)閉的彈窗')
sg.popup_auto_close('10秒后自動(dòng)關(guān)閉的彈窗', auto_close_duration=10)

二、進(jìn)度條控件使用

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

import PySimpleGUI as sg

# 布局,是一個(gè)用戶定義的二維列表。
# 第一維德元素分居不同的行上,第二維度上的元素們居于同一行,不同列上
# 此處定義的列表  由三部分組成 Text文件 ProgressBar進(jìn)度條 Cancel取消按鈕構(gòu)成
# Text Progress等有各自的參數(shù)設(shè)置,如size等。此處不再贅述
layout = [[sg.Text('任務(wù)完成進(jìn)度')],
          [sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progressbar')],
          [sg.Cancel()]]

# window只需將自定義的布局加載出來即可 第一個(gè)參數(shù)是窗口標(biāo)題。
window = sg.Window('機(jī)器人執(zhí)行進(jìn)度', layout)

# 根據(jù)key值獲取到進(jìn)度條
progress_bar = window['progressbar']

# window的read函數(shù)分為同步和異步,
# 不帶timeout參數(shù)即為同步函數(shù) 一直等到手動(dòng)點(diǎn)擊按鈕才會(huì)返回。
# 帶timeout參數(shù)不為None的為異步函數(shù),timeout時(shí)間內(nèi)無時(shí)間或者點(diǎn)擊了按鈕都會(huì)產(chǎn)生結(jié)果。
# 異步方式不會(huì)阻塞后面的程序運(yùn)行。
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()

進(jìn)度條4

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

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

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

import random
import time
from queue import Empty

import PySimpleGUI as sg
import threading
import queue

# 布局,是一個(gè)用戶定義的二維列表。
# 第一維德元素分居不同的行上,第二維度上的元素們居于同一行,不同列上
# 此處定義的列表  由三部分組成 Text文件 ProgressBar進(jìn)度條 Cancel取消按鈕構(gòu)成
layout = [[sg.Text('任務(wù)完成進(jìn)度')],
          [sg.ProgressBar(100, orientation='h', size=(50, 20), key='progressbar')],
          [sg.Cancel()]]

# window只需將自定義的布局加載出來即可 第一個(gè)參數(shù)是窗口標(biāo)題。
window = sg.Window('機(jī)器人執(zhí)行進(jìn)度', layout)

# 根據(jù)key值獲取到進(jìn)度條
progress_bar = window['progressbar']

# 隊(duì)列 后進(jìn)先出
q = queue.Queue()


def task_1():
    global q
    for i in range(100):
        # 因?yàn)橐笥趙indow.read設(shè)置超時(shí)時(shí)間100ms 保證讀取時(shí)隊(duì)列最多只有一個(gè)元素
        time.sleep(random.random() + 0.1)
        q.put(i+1)    # 向隊(duì)列中放入當(dāng)前任務(wù)完成度

# 創(chuàng)建多線程 設(shè)置以保護(hù)模式啟動(dòng),即主線程運(yùn)行結(jié)束,子線程也停止運(yùn)行
worker_task = threading.Thread(target=task_1)
worker_task.setDaemon(True)
worker_task.start()

while True:     # 死循環(huán)不斷讀取隊(duì)列中數(shù)據(jù),直到讀到100
    # event 就是返回的事件
    # 如點(diǎn)擊Cancel后    event=Cancel
    event, values = window.read(timeout=100)
    if event == 'Cancel' or event is None:
        # 點(diǎn)擊取消按鈕或者返回事件為 None
        break

    # 10ms 無操作算超時(shí)event會(huì)等于 __TIMEOUT__
    # 其實(shí)不用判斷
    try:
        # get是等待讀取,直到讀取到數(shù)據(jù)
        #  get_nowait 不等待,讀取不到數(shù)據(jù) 就報(bào)異常
        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:   # 進(jìn)度滿跳出循環(huán)
            break

window.close()

任務(wù)完成進(jìn)度

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

相關(guān)文章

  • Django項(xiàng)目搭建之實(shí)現(xiàn)簡單的API訪問

    Django項(xiàng)目搭建之實(shí)現(xiàn)簡單的API訪問

    這篇文章主要給大家介紹了關(guān)于Django項(xiàng)目搭建之實(shí)現(xiàn)簡單的API訪問的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • Python解釋器以及PyCharm的安裝教程圖文詳解

    Python解釋器以及PyCharm的安裝教程圖文詳解

    PyCharm是一種Python IDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時(shí)提高其效率的工具。這篇文章主要介紹了Python解釋器以及PyCharm的安裝教程圖文詳解,需要的朋友可以參考下
    2020-02-02
  • Python qqbot 實(shí)現(xiàn)qq機(jī)器人的示例代碼

    Python qqbot 實(shí)現(xiàn)qq機(jī)器人的示例代碼

    這篇文章主要介紹了Python qqbot 實(shí)現(xiàn)qq機(jī)器人的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 分享一些非常實(shí)用的Python小技巧

    分享一些非常實(shí)用的Python小技巧

    這篇文章主要分享一些非常實(shí)用的Python小技巧,助力你在Python學(xué)習(xí)的道路上一帆風(fēng)順,接下來就一起來學(xué)習(xí)一下吧
    2023-03-03
  • 如何使用python批量修改文本文件編碼格式

    如何使用python批量修改文本文件編碼格式

    把文本文件的編碼格式進(jìn)行批量幻化,比如ascii, gb2312, utf8等,相互轉(zhuǎn)化,字符集的大小來看,utf8>gb2312>ascii,因此最好把gb2312轉(zhuǎn)為utf8,否則容易出現(xiàn)亂碼,這篇文章主要介紹了如何使用python批量修改文本文件編碼格式,需要的朋友可以參考下
    2023-03-03
  • 部署django項(xiàng)目安裝uwsgi出錯(cuò)的解決方法總結(jié)

    部署django項(xiàng)目安裝uwsgi出錯(cuò)的解決方法總結(jié)

    uwsgi協(xié)議是一個(gè)uWSGI服務(wù)器自有的協(xié)議,它用于定義傳輸信息的類型(type of information),每一個(gè)uwsgi packet前4byte為傳輸信息類型描述,它與WSGI相比是兩樣?xùn)|西,下面這篇文章主要給大家介紹了關(guān)于部署django項(xiàng)目安裝uwsgi出錯(cuò)的解決方法,需要的朋友可以參考下
    2022-08-08
  • 教你用scrapy框架爬取豆瓣讀書Top250的書類信息

    教你用scrapy框架爬取豆瓣讀書Top250的書類信息

    這篇文章主要介紹了教你用scrapy框架爬取豆瓣讀書Top250的書類信息,文中提供了解決思路和部分實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2023-03-03
  • tensorflow 2.1.0 安裝與實(shí)戰(zhàn)教程(CASIA FACE v5)

    tensorflow 2.1.0 安裝與實(shí)戰(zhàn)教程(CASIA FACE v5)

    這篇文章主要介紹了tensorflow 2.1.0 安裝與實(shí)戰(zhàn)(CASIA FACE v5),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • python使用百度翻譯進(jìn)行中翻英示例

    python使用百度翻譯進(jìn)行中翻英示例

    這篇文章主要介紹了python使用百度翻譯進(jìn)行中翻英示例,需要的朋友可以參考下
    2014-04-04
  • python spilt()分隔字符串的實(shí)現(xiàn)示例

    python spilt()分隔字符串的實(shí)現(xiàn)示例

    split() 方法可以實(shí)現(xiàn)將一個(gè)字符串按照指定的分隔符切分成多個(gè)子串,本文介紹了spilt的具體使用,感興趣的可以了解一下
    2021-05-05

最新評(píng)論