[PySimpleGUI界面學習](十)列表的使用及一個簡易計算器例子
- 2020 年 3 月 12 日
- 筆記
<!–more–> # 回顧 在上一篇文章中,我們編寫了一個簡單的音樂播放器界面和一個腳本執行程序,展示了 `PySimpleGUI` 強大的功能,在這一篇中,我們繼續來學習新的控件,並嘗試用前面學習的內容編寫一個簡易計算器程序。 # 列表的使用 列表控件是我們日常用到的較多的一個控件,從表格製作到文件在文件夾中的排列,凡是需要排列的地方,我們總是第一個考慮是否需要一個列表控件來將所展示的數據進行有序化整理。下面這個小例子就展示了這個技術,為了和普通的文本區分開,將兩者分別列於同一個窗體上,讓讀者可以自行對比。 代碼如下: “`python import PySimpleGUI as sg sg.ChangeLookAndFeel('BlueMono') col = [[sg.Text('行列 1', text_color='white', background_color='blue')], [sg.Text('行列 2', text_color='white', background_color='blue'), sg.Input('可輸入文本框 1')], [sg.Text('行列 3', text_color='white', background_color='blue'), sg.Input('可輸入文本框 2')]] layout = [[sg.Listbox(values=('Listbox Item 1', 'Listbox Item 2', 'Listbox Item 3'), select_mode=sg.LISTBOX_SELECT_MODE_MULTIPLE, size=(20,3)), sg.Column(col, background_color='blue')], [sg.Input('別擔心,這只是一個小測試。')], [sg.OK()]] window = sg.Window('列表控件例子').Layout(layout) event, values = window.Read() window.Close() sg.Popup(event, values, line_width=200) “` “`html 'OK' “` 其運行圖如下所示: <a href="https://s2.ax1x.com/2020/02/06/1yRoeH.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/02/06/1yRoeH.png" alt="1yRoeH.png" border="0" /></a> 當用戶點擊列表控件中的某一項時,在界面關閉後,程序將彈出一個對話框來顯示用戶的點擊選項,這種方式展示了如何獲取列表值: <a href="https://s2.ax1x.com/2020/02/06/1yR7TA.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/02/06/1yR7TA.png" alt="1yR7TA.png" border="0" /></a> # 一個簡易計算器例子 在學習了這麼多例子之後,我們來完成一個簡易計算器的例子,這個例子可以完成整數的加減乘除運算,具體代碼如下: “`python import PySimpleGUI as sg def jisuanqi(): layout = [[sg.Text("計算器")], [sg.InputText(do_not_clear=True, size=(19,3), key="_SHU1_",font=('Helvetica', 20))], ] #將0~9及加減乘除排列成四行四列 lst0_9 = [1,2,3,"+",4,5,6,"-",7,8,9,"×","",0,"","÷"] tmp_shuzifuhao_lst = [] for item in lst0_9: tmp_shuzifuhao_lst.append(sg.Button(str(item),button_color=('black', 'orange'), size=(4,2),font=('Helvetica', 18))) if len(tmp_shuzifuhao_lst) == 4: layout.append(tmp_shuzifuhao_lst) tmp_shuzifuhao_lst = [] layout.append([sg.Button("計算", button_color=('white', 'springgreen4'), font=('黑體', 16), size=(7,2)), sg.Button("清空",button_color=('white', 'springgreen4'), font=('黑體', 16),size=(7,2)), sg.Button("退出",button_color=('white', 'springgreen4'), font=('黑體', 16),size=(7,2))]) window = sg.Window("計算器").Layout(layout) while True: button, values = window.Read() if button is None or button=="退出": break elif button=="清空": window.FindElement("_SHU1_").Update("") elif button=="計算": shu1 = values["_SHU1_"] res_str = shu1.replace("×", "*") res_str = res_str.replace("÷", "/") try: result = eval(res_str) shu1 += "=" shu1 += str(result) window.FindElement("_SHU1_").Update(shu1) except: window.FindElement("_SHU1_").Update("表達式有誤,請查證!") else: shu1 = values["_SHU1_"] if shu1 == "" and (button not in ["+","-","×","÷"]): shu1 = button elif shu1 == "" and (button in ["+","-","×","÷"]): pass else: if shu1[-1] in ["+","-","×","÷"] and (button in ["+","-","×","÷"]): pass else: shu1 += button window.FindElement("_SHU1_").Update(str(shu1)) window.Close() jisuanqi() “` 這段代碼運行結果如圖所示: <a href="https://s2.ax1x.com/2020/02/06/1yWJXD.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/02/06/1yWJXD.png" alt="1yWJXD.png" border="0" /></a> 用戶可以點擊其中的數字及運算符號進行運算,代碼並沒有優化,有興趣的讀者可以仔細研究,在這段代碼中用到了控件的更新、控件的排列、控件背景的設置等等。 現在為止,界面設計中的一些控件已經介紹了一部分,如果有興趣,可以到其官方網站查閱相應的文檔,下一章節,我們來研究一下菜單的設計。