[PySimpleGUI界面學習](十一)菜單的創建

  • 2020 年 3 月 12 日
  • 筆記

<!–more–> # 簡述 從 `windows1.0` 開始,計算機的圖形用戶界面就開始快速發展起來了,附加而來的許多標配元素也慢慢讓幾乎所有用戶熟悉了,在許多人看來,一個圖形界面帶有菜單欄是再正常不過的一件事,那麼,菜單欄究竟是什麼東西呢?其實究其實際,它也並不會比一個普通的按鈕有多高明的地方,只不過菜單欄往往是一組按鈕,一般附加在窗體的正上方,而且其呈一行式排列,當用戶點擊其一時,它往往會呈抽屜式彈出一條菜單來,當然那只是諸多不同功能按鈕的集合罷了。 # 菜單在PySimpleGUI中的實現 在 `PySimpleGUI`中,菜單是與窗體的創建分離開的,要創建一個菜單十分容易,和創建窗體的語法十分相似,即先定義一個列表,然後調用`PySimpleGUI`的`Menu`函數將該列表填入即可,當創建窗體時,將該`Menu`語句創建的菜單放置於窗體的第一行,其餘就和前面創建窗體的方法一樣了。 # 一個菜單的小例子 下面展示了一個簡單的創建菜單的小例子: “`python import PySimpleGUI as sg sg.ChangeLookAndFeel('LightGreen') sg.SetOptions(element_padding=(0, 0)) # —— Menu Definition —— # menu_def = [['File', ['Open', 'Save', 'Exit' ]], ['Edit', ['Paste', ['Special', 'Normal', ], 'Undo'], ], ['Help', 'About…'], ] # —— GUI Defintion —— # layout = [ [sg.Menu(menu_def, )], [sg.Output(size=(60, 20))] ] window = sg.Window("Windows-like program", default_element_size=(12, 1), auto_size_text=False, auto_size_buttons=False, default_button_element_size=(12, 1)).Layout(layout) # —— Loop & Process button menu choices —— # while True: event, values = window.Read() if event == None or event == 'Exit': break print('Button = ', event) # —— Process menu choices —— # if event == 'About…': sg.Popup('About this program', 'Version 1.0', 'PySimpleGUI rocks…') elif event == 'Open': filename = sg.PopupGetFile('file to open', no_window=True) print(filename) window.Close() “` 其運行截圖如下圖所示: <a href="https://s2.ax1x.com/2020/02/06/1yWj41.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/02/06/1yWj41.png" alt="1yWj41.png" border="0" /></a> 當用戶點擊其中的菜單按鈕時,凡是有定義的菜單都會做出相應的反應。 如果用戶在創建菜單時,在`Menu`函數的參數中添加`tearoff=True`時,再次運行程序,點擊菜單時會發現在每個彈出的菜單下有條虛線,如圖所示: <a href="https://s2.ax1x.com/2020/02/06/1yfKKS.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/02/06/1yfKKS.png" alt="1yfKKS.png" border="0" /></a> 如果用戶用鼠標雙擊這條虛線,該彈出的菜單將會自動獨立飛出成為懸浮於主窗體的一個小窗體,相當酷。如下圖所示: <a href="https://s2.ax1x.com/2020/02/06/1yf1Ej.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/02/06/1yf1Ej.png" alt="1yf1Ej.png" border="0" /></a> # 小結 這篇文章簡單介紹了菜單如何創建,有興趣的讀者仔細研究這段代碼,自然會發現許多有趣的東西。