[PySimpleGUI界面學習](一)安裝及簡單說明
- 2020 年 3 月 12 日
- 筆記
# 一、界面編程到底是什麼? 關於程序設計,有太多的書來描述,那麼界面編程又是什麼東西呢? 當你學習完一本程序設計的書本時,一般情況下都學會了某個編程語言的一些基本流程,而在學習的過程中,無須牽扯到界面編程,無論是獲取用戶的字符輸入還是文件讀寫甚或是線程操作等等,都只需在命令窗口執行你寫的代碼就好。然而,在計算機的發展史上,終於還是出現了界面,發展至今,從個人電腦到手機,從各種各樣的測試台到所有智能設備,用戶操作界面無處不在,優秀的界面不但承載着人類方便的命令輸入,也從最初的展示收集部件發展到現在的動態、智能、並具備收集人類各種有意識和潛意識狀態的工具,其細化程度之繁雜,令人嘆為觀止。 界面指的是用戶界面,此用戶是指那些非專業程序員的客戶。計算機的迅猛發展,可以解放人類的勞動力,各行各業都有各種需求,但是對於非專業程序員而言,面對命令窗口這種沉默的怪物,那種不友好是可想而知的,於是從人類自身出發,手、眼、語言等功能性的外延就成了界面設計的最初構想,在友好的界面上,即使對計算機再陌生的人,也會按照傻瓜式的指導一步步完成其想要完成的任務,而程序員要做的就是將用戶當成完全不懂計算機的人來製作界面,這種自以為是的程序員和不懂計算機的小白客戶之間於是就會產生各種各樣的不理解,這種互動性直接催生了界面的規範化操作。
# 二、PySimpleGUI是什麼? 然而從程序員的角度來看,**所有的界面只不過是一堆零部件的組合,其功能也只是收集數據而已!**基於這樣的觀點,PySimpleGUI這個Python的工具包就開發出來了,這個工具包的目的就是要將這種界面設計哲學實現出來,使得程序員從繁雜的重複性代碼書寫中解脫出來,讓他們的精力不再花費於那些瑣碎的開發,更加專註於界面的搭配及功能實現,從這個角度來看,這不得不說是界面編程的一場革命。 目前比較主流的幾種界面工具包有wxWidget,Qt,Tcl/Tk等等,Python自帶Tck/Tk工具包,正如同上述,這些工具包的使用都要擺出一些架式,熟悉的程序員當然不覺得怎樣,但是對於新手而言,這些東西的每一步學習都是比較吃力的,於是一種符合人性化的哲學出來的時候,必然有許多天才程序員開始為這種哲學努力,即用統一的形式將這些主流工具包一一包裝,使得程序員在利用這種統一包裝語言進行編程的時候,無須考慮各種界面庫的不同名稱、不同方法以及不同語法,這種統一化的編程方式一經推出,即得到相當多程序員的關注,畢竟,對規律化東西的追求根植於我們人類的天性之中。 需要強調的是:**PySimpleGUI不是一個獨立的界面工具包,它只是提供一種人性化的統一調度接口,在Python下,默認調用Tkinter**。
# 三、PySimpleGUI的安裝 在Windows下,首先推薦安裝Python3.6以上的版本,至於為什麼不是Python2.7或其他,那是因為從對漢字的處理方式來看,Python3版本比Python2版本要方便(不要問我是如何知道的,當然還有許多其他的區別),而從進化來看,Python3肯定是版本越高越好,也許最新的版本可能會有一些小問題,但是能解決的問題還是問題嗎?人活着不就是為了解決問題來的嗎? Python3.6自帶pip版本,用pip來安裝的命令如下: “`cmd pip3 install PySimpleGUI “` 在linux下,需要將pip換成pip3,因為一般linux下默認安裝的python版本是2。
# 四、一個簡單的界面小程序。 先來一個直觀的吧,如果你看懂了,恭喜你,你真的具備編程天賦!沒有看明白?沒關係,好吧,開始這個程序的分析。 “`python import PySimpleGUI as sg layout = [[sg.Text('輸入你的名字'),sg.InputText()],[sg.OK()]] window = sg.Window('我的第一個GUI窗口').Layout(layout) button,(name,) = window.Read() window.Close() “` 將上述代碼複製到你的ipython窗口/jupyter notebook窗口/vscode窗口/idle都是可以的,然後回車即可產生一個小窗口,當你在窗口中輸入名字後,按OK按鈕窗口即關閉。 <a href="https://s2.ax1x.com/2020/01/18/1pEX5T.png" class="highslide" onclick="return hs.expand(this,{slideshowGroup:'images'})"><img src="https://s2.ax1x.com/2020/01/18/1pEX5T.png" alt="1pEX5T.png" border="0" /></a>