PySimpleGUI

PyQt5很強大贤牛,但是并不那么簡單;
PySimpleGUI 說是很簡單则酝,所以來看看殉簸;

代碼1

import PySimpleGUI as sg

event, values = sg.Window('獲取文件舉例',
                          [[sg.Text('文件名'), sg.Input(), sg.FileBrowse('瀏覽')], [sg.OK('確定'), sg.Cancel('取消')]]).Read()
print(event, values)
image.png

這是一個用來獲取文件的示例,似于網(wǎng)頁表單提交文件沽讹;

[[sg.Text('文件名'), sg.Input(), sg.FileBrowse('瀏覽')], [sg.OK('確定'), sg.Cancel('取消')]]
是個列表般卑,列表可以分組,并用","隔開爽雄;

稍作修改:

import PySimpleGUI as sg

event, values = sg.Window('獲取文件舉例',
                          [[sg.Text('文件名')], [sg.Input(), sg.FileBrowse('瀏覽')], [sg.OK('確定'), sg.Cancel('取消')]]).Read()
print(event, values)
image.png

就變成了這個樣子蝠检;
可以理解為用列表分組來改變布局;
這里面的布局類似于網(wǎng)格化布局挚瘟;
用列表+","來換行叹谁;
接下來迟杂,當我們選擇文件并點擊確定后:

image.png

打印了輸出結(jié)果:

確定 {0: 'E:/Python_Pro/Test_Pro/PySimpleGUI_test/test.py', '瀏覽': 'E:/Python_Pro/Test_Pro/PySimpleGUI_test/test.py'}

需要注意的是:
“確定”對應“event”,是字符串類型本慕;
"{0: 'E:/Python_Pro/Test_Pro/PySimpleGUI_test/test.py', '瀏覽': 'E:/Python_Pro/Test_Pro/PySimpleGUI_test/test.py'}"對應values排拷,是字典類型;
可以看到字典里面的“0”的鍵值和“瀏覽”的鍵值是一樣的锅尘;
到目前為止监氢,真的非常簡單!

代碼2

import PySimpleGUI as sg

sg.theme('Dark Blue 5')  # please make your creations colorful

layout = [[sg.Text('Filename')],
          [sg.Input(), sg.FileBrowse()],
          [sg.OK(), sg.Cancel()]]

window = sg.Window('Get filename example', layout)

event, values = window.Read()
window.close()

sg.theme('Dark Blue 5') 是用來設置主題藤违;

layout = [[sg.Text('Filename')],
[sg.Input(), sg.FileBrowse()],
[sg.OK(), sg.Cancel()]]
不再和窗體顯示混在一起浪腐;
當需要顯示窗體時,只需要傳入layout即可顿乒;

獲取文件名舉例(Get filename example)

import PySimpleGUI as sg

sg.theme('DarkAmber')  # Add a touch of color
# All the stuff inside your window.
layout = [[sg.Text('Some text on Row 1')],
          [sg.Text('Enter something on Row 2'), sg.InputText()],
          [sg.Button('Ok'), sg.Button('Cancel')]]

# Create the Window
window = sg.Window('Window Title', layout)
# Event Loop to process "events" and get the "values" of the inputs
while True:
    event, values = window.read()
    if event in (None, 'Cancel'):  # if user closes window or clicks cancel
        break
    print('You entered ', values[0])

window.close()

效果:


image.png

sg.theme('DarkAmber') 名稱為‘DarkAmber’的配色主題议街;
sg.InputText() 是輸入框,如果需要可以在輸入框加入默認文字:sg.InputText('xxx')


image.png
while True:
    event, values = window.read()
    if event in (None, 'Cancel'):  # if user closes window or clicks cancel
        break
    print('You entered ', values[0])
    print('You entered ', values)

這個部分的意思是監(jiān)聽窗體璧榄;
從輸入框讀取內(nèi)容特漩;
目前只有一個輸入框;
輸入框作為字典骨杂,被讀入涂身;
點擊'OK',會打印輸出:

You entered  xxx
You entered  {0: 'xxx'}

我再加一個輸入框,來看看捕捉到了什么:

import PySimpleGUI as sg

sg.theme('DarkAmber')  # Add a touch of color
# All the stuff inside your window.
layout = [[sg.Text('Some text on Row 1'), sg.InputText('aaa')],
          [sg.Text('Enter something on Row 2'), sg.InputText('bbb')],
          [sg.Button('Ok'), sg.Button('Cancel')]]

# Create the Window
window = sg.Window('Window Title', layout)
# Event Loop to process "events" and get the "values" of the inputs
while True:
    event, values = window.read()
    if event in (None, 'Cancel'):  # if user closes window or clicks cancel
        break

    print('You entered ', values)

window.close()
image.png

打印輸出:

You entered  {0: 'aaa', 1: 'bbb'}

這樣就很清楚了搓蚪,第一個輸入框的鍵為‘0’蛤售,第二個是‘1’,以此類推妒潭;
獲取到輸入值悴能,我們就可以進行后續(xù)操作了;
上面代碼的layout再添加一項:

layout = [[sg.Text('Some text on Row 1'), sg.InputText('aaa')],
          [sg.Text('Enter something on Row 2'), sg.InputText('bbb')],
          [sg.Text('This is some text', font='Courier 12', text_color='blue', background_color='green')],
          [sg.Button('Ok'), sg.Button('Cancel')]]

效果:


image.png

好玩得很雳灾!

彈窗Popup匯總

sg.Popup('Popup')  # Shows OK button
# sg.PopupOk('PopupOk')  # Shows OK button
sg.PopupYesNo('PopupYesNo')  # Shows Yes and No buttons
sg.PopupCancel('PopupCancel')  # Shows Cancelled button
sg.PopupOKCancel('PopupOKCancel')  # Shows OK and Cancel buttons
sg.PopupError('PopupError')  # Shows red error button
sg.PopupTimed('PopupTimed')  # Automatically closes
sg.PopupAutoClose('PopupAutoClose')  # Same as PopupTimed
sg.PopupScrolled('okkk')

各種彈窗效果漠酿,自行嘗試;
需要特別說明的彈窗:

PopupScrolled

sg.PopupScrolled('okkk')

效果:


image.png

顯示多行文本佑女;

但是發(fā)現(xiàn)標題和文本內(nèi)容是一致的记靡;
修改為:

text = 'abcdefg'
sg.PopupScrolled(text, no_titlebar=True)

效果:


image.png

不可移動;
似乎用來顯示一些說明信息還行团驱;
更詳細的用法和參數(shù)信息參考官網(wǎng);

PopupGetFile

msg = '請選擇文件路徑:'
sg.PopupGetFile(msg)

效果:


image.png

這個結(jié)果類似于“代碼1”空凸;
但是怎么獲取選擇后的文件路徑呢嚎花?

進度條OneLineProgressMeter

import PySimpleGUI as sg

for i in range(1, 10000):
    sg.OneLineProgressMeter('My Meter', i + 1, 10000, 'key', 'Optional message')

效果:


image.png

橫向

for i in range(1, 10000):
    sg.OneLineProgressMeter('My Meter', i + 1, 10000, 'key', 'Optional message', orientation='h')

效果:


image.png

調(diào)試輸出Print

import PySimpleGUI as sg

for i in range(10000):
    sg.Print(i)

等效于:

import PySimpleGUI as sg

print=sg.Print
for i in range(100):
    print(i)

效果:


image.png

所有的PySimpleGUI程序都將使用兩種設計模式之一,具體取決于您要實現(xiàn)的窗口類型

模式1-“一次性窗口”-讀取一次窗口然后將其關閉

import PySimpleGUI as sg

sg.theme('Dark Blue 3')  # please make your windows colorful

layout = [[sg.Text('SHA-1 and SHA-256 Hashes for the file')],
                 [sg.InputText(), sg.FileBrowse()],
                 [sg.Submit(), sg.Cancel()]]

window = sg.Window('SHA-1 & 256 Hash', layout)

event, values = window.read()
window.close()

source_filename = values[0]     # the first input element is values[0]

效果:


image.png

模式2

A-持久窗口(使用事件循環(huán)多次讀妊街蕖)

import PySimpleGUI as sg

sg.theme('Dark Blue 3')  # please make your windows colorful

layout = [[sg.Text('Persistent window')],
          [sg.Input()],
          [sg.Button('Read'), sg.Exit()]]

window = sg.Window('Window that stays open', layout)

while True:
    event, values = window.read()
    if event is None or event == 'Exit':
        break
    print(event, values)

window.close()

效果:


image.png

B-持久窗口(使用事件循環(huán)多次讀取+更新窗口中的數(shù)據(jù))

import PySimpleGUI as sg

sg.theme('Dark Blue 3')  # please make your windows colorful

layout = [[sg.Text('Your typed chars appear here:'), sg.Text(size=(12,1), key='_OUTPUT_')],
          [sg.Input(key='_IN_')],
          [sg.Button('Show'), sg.Button('Exit')]]

window = sg.Window('Window Title', layout)

while True:  # Event Loop
    event, values = window.read()       # can also be written as event, values = window()
    print(event, values)
    if event is None or event == 'Exit':
        break
    if event == 'Show':
        # change the "output" element to be the value of "input" element
        window['_OUTPUT_'].update(values['_IN_'])
        # above line can also be written without the update specified
        window['_OUTPUT_'](values['_IN_'])

window.close()

效果:


image.png

參考文檔

https://pysimplegui.readthedocs.io/en/latest/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末紊选,一起剝皮案震驚了整個濱河市献烦,隨后出現(xiàn)的幾起案子卖词,更是在濱河造成了極大的恐慌此蜈,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惕橙,居然都是意外死亡,警方通過查閱死者的電腦和手機彬坏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門幻赚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來离熏,“玉大人钻蔑,你說我怎么就攤上這事∮掣” “怎么了孔轴?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵优构,是天一觀的道長碑诉。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任右蒲,我火速辦了婚禮间坐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竹宋。我一直安慰自己劳澄,他們只是感情好秒拔,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般回官。 火紅的嫁衣襯著肌膚如雪歉提。 梳的紋絲不亂的頭發(fā)上笛坦,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天,我揣著相機與錄音侄泽,去河邊找鬼礁芦。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的柿扣。 我是一名探鬼主播肖方,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼未状!你這毒婦竟也來了俯画?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤司草,失蹤者是張志新(化名)和其女友劉穎艰垂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體埋虹,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡猜憎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了搔课。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胰柑。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辣辫,靈堂內(nèi)的尸體忽然破棺而出旦事,到底是詐尸還是另有隱情,我是刑警寧澤急灭,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布姐浮,位于F島的核電站,受9級特大地震影響葬馋,放射性物質(zhì)發(fā)生泄漏卖鲤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一畴嘶、第九天 我趴在偏房一處隱蔽的房頂上張望蛋逾。 院中可真熱鬧,春花似錦窗悯、人聲如沸区匣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亏钩。三九已至,卻和暖如春欺旧,著一層夾襖步出監(jiān)牢的瞬間姑丑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工辞友, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留栅哀,地道東北人震肮。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像留拾,于是被迫代替她去往敵國和親戳晌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容