PySimpleGUI 中文手冊(常用部分)

Yvan發表於2020-08-27

window

window = sg.Window("Windows-like program",layout)
window.disappear() # 視窗隱藏
window.reappear() # 視窗展示
window = sg.Window('My window with tabs', layout, font=("宋體", 15),default_element_size=(50,1))  
# 字型為宋體,大小5預設視窗大小為501

可用控制元件列表

使用方法:直接sg.Text()即可

  • Text # 文字
  • InputText # 單行輸入框
  • Button # 按鈕
    • FileBrowse # 檔案選擇,選擇多個檔案FilesBrowse,儲存檔案FileSaveAs
    • FolderBrowse # 資料夾選擇
    • CalendarButton # 日曆選擇,必須輸入按鈕名如'choose date',返回字串
    • ColorChooser # 顏色選擇,如sg.ColorChooserButton(‘顏色選擇’),返回RGB元組
  • Combo # 下拉選擇選單,如sg.Combo([‘choice 1’, ‘choice 2’])
  • Checkbox # 核取方塊。如sg.Checkbox(‘My first Checkbox!’, default=True), sg.Checkbox(‘My second Checkbox!’),返回布林值
  • Radio # 單選按鈕,如sg.Radio(‘My first Radio!’, “RADIO1”, default=True),sg.Radio(‘My second radio!’, “RADIO1”),第一個是顯示的字元,第二個是單選按鈕所在組,只有在同一組的單選按鈕才有排他性,第三個是預設選中,返回布林值True or False
  • Listbox # 列表框,如sg.Listbox(values=[‘Listbox 1’, ‘Listbox 2’, ‘Listbox 3’]
  • Slider # 滾動條,如sg.Slider(range=(1,500),default_value=222,orientation=’horizontal’),垂直是vertical
  • Multiline # 多行輸入框
  • Multi-line Text Output (not on tkinter version)
  • Spin # 一個可以上下調節的控制元件,像一個簡化版的滾動條?如sg.Spin([i for i in range(1,11)], initial_value=1)
  • ProgressBar # 進度條,下面是一個使用案例:
layout = [[sg.Text('A custom progress meter')],
          [sg.ProgressBar(1000, orientation='h', size=(20, 20), key='progressbar')],
          [sg.Cancel()]]

window = sg.Window('Custom Progress Meter', layout)
progress_bar = window['progressbar']
# loop that would normally do something useful
for i in range(1000):
    # check to see if the cancel button was clicked and exit loop if clicked
    event, values = window.read(timeout=10)
    if event == 'Cancel'  or event is None:
        break
  # update bar with loop value +1 so that bar eventually reaches the maximum
    progress_bar.UpdateBar(i + 1)
# done with loop... need to destroy the window as it's still open
window.close()
  • Menu # 選單
  • ButtonMenu # 選單按鈕
menu_def = [['File', ['Open', 'Save', 'Exit' ]],
            ['Edit', ['Paste', ['Special', 'Normal',], 'Undo'],]]

# 定義佈局
layout = [[sg.Menu(menu_def, tearoff=False, pad=(20,1))],
          [sg.ButtonMenu('ButtonMenu',key='-BMENU-', menu_def=menu_def[0])],]

window = sg.Window('My window with tabs', layout)
  • Frame # 框,如下面的程式碼:
sg.Frame(layout=[      
    [sg.Checkbox('Checkbox', size=(10,1)),  sg.Checkbox('My second checkbox!', default=True)],      
    [sg.Radio('My first Radio!', "RADIO1", default=True, size=(10,1)), sg.Radio('My second Radio!', "RADIO1")]], 
    title='Options',title_color='red', relief=sg.RELIEF_SUNKEN, tooltip='Use these to set flags')]

  • Image # 圖片檢視,只支援png,gif格式,如sg.Image(r’C:\PySimpleGUI\Logos\PySimpleGUI_Logo_320.png’),不知道為什麼我執行這個函式總會有各種問題……
  • TabGroup # 選項卡
tab1_layout =  [[sg.T('This is inside tab 1')]]    
tab2_layout = [[sg.T('This is inside tab 2')],    
               [sg.In(key='in')]]    
layout = [[sg.TabGroup([[sg.Tab('Tab 1', tab1_layout), sg.Tab('Tab 2', tab2_layout)]])],    
          [sg.Button('Read')]]    
window = sg.Window('My window with tabs', layout)    
  • Output # 輸出框,可以使用print()直接列印,下面是一個例子:
def ChatBot():
    layout = [[(sg.Text('This is where standard out is being routed', size=[40, 1]))],
              [sg.Output(size=(80, 20))],
              [sg.Multiline(size=(70, 5), enter_submits=True),
               sg.Button('SEND', button_color=(sg.YELLOWS[0], sg.BLUES[0])),
               sg.Button('EXIT', button_color=(sg.YELLOWS[0], sg.GREENS[0]))]]

    window = sg.Window('Chat Window', layout, default_element_size=(30, 2))

    # ---===--- Loop taking in user input and using it to query HowDoI web oracle --- #
    while True:
        event, value = window.read()
        if event == 'SEND':
            print(value)
        else:
            break
    window.close()
ChatBot()

基本可用引數:

  • key,指定鍵名
  • size=(8,6),控制元件大小
  • font = ('宋體',15),字型,前者是字型型別,後者是字型大小
  • enable_events,是否觸發事件
  • justification='center',居中

內建Button

雖然官方列了很多內建Button,但是測試下來似乎並沒有什麼特殊效果,只是多了可以直接使用的Button罷了

  • OK
  • Ok
  • Submit
  • Cancel
  • Yes
  • No
  • Exit
  • Quit
  • Help
  • Save
  • SaveAs
  • Open

比如說,你可以直接sg.OK(),也可以sg.Button('OK')

target引數

選擇器型控制元件,如FileBrowse,FilesBrowse,FolderBrowse,FileSaveAs,CalendarButton,ColorChooserButton,會傳遞選擇值給視窗上的另外一個控制元件,可以是TextInputText或它本身。比如它與輸入框在同一行時會傳地址給輸入框,如[sg.InputText(),sg.FolderBrowse()],可以為輸入框加一個visible=False引數隱藏(是隱藏整個輸入框)。

那麼我想讓值傳遞給指定控制元件,可以加一個target引數,如:

layout = [[sg.T('Source Folder')],
              [sg.In(key='input')],
              [sg.FolderBrowse(key='_BUTTON_KEY_',target='input'), sg.OK()]]

這樣選擇的值就會傳遞給相同key的控制元件

注意,使用此引數時,就無法獲取選擇器控制元件的值了,比如說上面的例子,你就無法print(values['_BUTTON_KEY_'])

popup

popup

簡單來說,popup就是一個彈出視窗,執行該函式時,會停止執行當前視窗,直到使用者關閉彈出視窗時才會重新執行。

可以輸入任意數量的引數,都會轉化為字串並輸出。

擁有以下型別的popup:

sg.popup('Popup')  # Shows OK button
sg.popup_ok('PopupOk')  # Shows OK button
sg.popup_yes_no('PopupYesNo')  # Shows Yes and No buttons
sg.popup_cancel('PopupCancel')  # Shows Cancelled button
sg.popup_ok_cancel('PopupOKCancel')  # Shows OK and Cancel buttons
sg.popup_error('PopupError')  # Shows red error button
sg.popup_timed('PopupTimed')  # Automatically closes
sg.popup_auto_close('PopupAutoClose')  # Same as PopupTimed

比如popup_ok是一個帶有ok按鈕的彈出視窗,popup_timed是一個過一段時間自動關掉的彈出視窗。

popup中可以輸入的引數,自行help(sg.popup),需要注意的一點是因為popup會把所有輸入的引數都當做字串輸出,所以特殊的引數需要標識出來,比如sg.popup('values[0],values[1],title="test"')

popup_scrolled

還有一類特殊的popup,即Scrolled Output,它展示的是帶有滾動條的彈出視窗,適用於展示大量資訊時,函式名為sg.popup_scrolled()

popup_scrolled會自動調整大小,如果想自定義的話,可以sg.popup_scrolled(my_text, size=(80, None))

上述程式碼會展示一個寬度為80字元,高度隨輸出字串變化的彈出視窗。

效果

popup_get_file

獲取一個或多個檔案地址

# 例子:
text = sg.popup_get_file('Please enter a file name')

效果:

特殊引數:

save_as=False,是否顯示儲存按鈕,multiple_files=False是否允許選擇多個檔案,no_window=False是否跳過彈出視窗直接顯示系統開啟檔案介面?

popup_get_folder

即獲取資料夾路徑

注意,該函式沒有save_as=Falsemultiple_files=False引數,但是有no_window=False

主題theme

theme_name_list = sg.theme_list() # 獲取所有可用主題,返回一個列表
sg.theme_previewer() # 在layout中新增此函式,執行時會展示所有主題的預覽

下面程式碼創造了一個主題瀏覽器,可以用下拉餐單切換預覽所有主題

sg.theme('Dark Brown')
layout = [[sg.Text('Theme Browser')],
          [sg.Text('Click a Theme color to see demo window')],
          [sg.Listbox(values=sg.theme_list(), size=(20, 12), key='-LIST-', enable_events=True)],
          [sg.Button('Exit')]]
window = sg.Window('Theme Browser', layout)

while True:  # Event Loop
    event, values = window.read()
    if event in (None, 'Exit'):
        break
    sg.theme(values['-LIST-'][0])
    sg.popup_get_text('This is {}'.format(values['-LIST-'][0]))

window.close()

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章