python easygui用法


一個簡單的例子

在 EasyGui 中,所有的 GUI 互動均是通過簡單的函數調用,下邊一個簡單的例子告訴你 EasyGui 確實很 Easy!

  1. import easygui as g
  2. import sys
  3. while 1:
  4.         g.msgbox("嗨,歡迎進入第一個界面小游戲^_^")
  5.         msg ="請問你希望在魚C工作室學習到什么知識呢?"
  6.         title = "小游戲互動"
  7.         choices = ["談戀愛", "編程", "OOXX", "琴棋書畫"]
  8.         
  9.         choice = g.choicebox(msg, title, choices)
  10.         # 注意,msgbox的參數是一個字符串
  11.         # 如果用戶選擇Cancel,該函數返回None
  12.         g.msgbox("你的選擇是: " + str(choice), "結果")
  13.         msg = "你希望重新開始小游戲嗎?"
  14.         title = "請選擇"
  15.         # 彈出一個Continue/Cancel對話框
  16.         if g.ccbox(msg, title):
  17.                 pass            # 如果用戶選擇Continue
  18.         else:
  19.                 sys.exit(0)     # 如果用戶選擇Cancel



3. EasyGUI 的各種功能演示

要運行 EasyGUI 的演示程序,在命令行調用 EasyGUI 是這樣的:

  1. python easygui.py


或者可以從 IDE(例如 IDLE, PythonWin, Wing, 等等)上調用:

  1. >>> import easygui
  2. >>> easygui.egdemo()


成功調用后將可以嘗試 EasyGUI 擁有的各種功能,並將結果打印至控制台。



4. 導入 EasyGUI

為了使用 EasyGUI 這個模塊,你應該先導入它。

最簡單的導入語句是:

  1. import easygui


如果使用上面這種形式導入的話,那么你使用 EasyGUI 的函數的時候,必須在函數的前面加上前綴 easygui,像這樣:

  1. easygui.msgbox(...)


另一種選擇是導入整個 EasyGUI 包:

  1. from easygui import *


這使得我們更容易調用 EasyGUI 的函數,可以直接這樣編寫代碼:

  1. msgbox(...)


第三種方案是使用類似下邊的 import 語句:

  1. import easygui as g


這種方法還可以讓你保持 EasyGUI 的命名空間,同時減少你的打字數量。

導入之后就可以這么調用 EasyGUI 的函數:

  1. g.msgbox(...)



5. 使用 EasyGUI

一旦你的模塊導入 EasyGUI,GUI 操作就是一個簡單的調用 EasyGUI 函數的幾個參數的問題了。

例如,使用 EasyGUI 來實現世界上最著名的打招呼:

  1. import easygui as g
  2. g.msgbox("Hello, world!")




6. EasyGUI 函數的默認參數

對於所有對話框而言,前兩個參數都是消息主體和對話框標題。

按照這個規律,在某種情況下,這可能不是理想的布局設計(比如當對話框在獲取目錄或文件名的時候會選擇忽略消息參數),但保持這種一致性且貫穿於所有的窗口部件是更為得體的考慮!
   
絕大部分的 EasyGUI 函數都有默認參數,幾乎所有的組件都會顯示消息主體和對話框標題。

標題默認是空字符串,消息主體通常有一個簡單的默認值。
  
這使得你可以盡可能少的去設置參數,比如 msgbox() 函數標題部分的參數是可選的,因此你調用 msgbox() 的時候只需要指定一個消息參數即可,例如:

  1. >>> msgbox('我愛小甲魚^_^')


當然你也可以指定標題參數和消息參數,例如:

  1. >>> msgbox('我愛小甲魚^_^', '魚油心聲')

 




在各類按鈕組件里,默認的消息是 “Shall I continue?”,所以你可以不帶任何參數地去調用它們。

這里我們演示不帶任何參數地去調用 ccbox(),當選擇 “cancel” 或關閉窗口的時候返回一個布爾類型的值:

  1. if ccbox(): 
  2.         pass         # 用戶選擇繼續
  3. else: 
  4.         return      # 用戶選擇取消



7. 使用關鍵字參數調用 EasyGUI 的函數

調用 EasyGUI 函數還可以使用關鍵字參數哦。

現在假設你需要使用一個按鈕組件,但你不想指定標題參數(第二個參數),你仍可以使用關鍵字參數的方法指定 choices 參數(第三個參數),像這樣:

  1. >>> choices = ['願意', '不願意', '有錢的時候就願意']
  2. >>> reply = choicebox('你願意購買資源打包支持小甲魚嗎?', choices = choices)



8. 使用按鈕組件

根據需求,EasyGUI 在 buttonbox() 上建立了一系列的函數供調用。
8.1 msgbox()

msgbox(msg='(Your message goes here)', title=' ', ok_button='OK', image=None, root=None)

 

 

 



8.2 ccbox()

ccbox(msg='Shall I continue?', title=' ', choices=('C[o]ntinue', 'C[a]ncel'), image=None, default_choice='C[o]ntinue', cancel_choice='C[a]ncel')

ccbox() 提供一個選擇:“C[o]ntinue” 或者 “C[a]ncel”,並相應的返回 True 或者 False。

注意:“C[o]ntinue” 中的 [o] 表示快捷鍵,也就是說當用戶在鍵盤上敲一下 o 字符,就相當於點擊了 “C[o]ntinue” 按鍵。

8.3 ynbox()

ynbox(msg='Shall I continue?', title=' ', choices=('[<F1>]Yes', '[<F2>]No'), image=None, default_choice='[<F1>]Yes', cancel_choice='[<F2>]No')

跟 ccbox() 一樣,只不過這里默認的 choices 參數值不同而已,[<F1>] 表示將鍵盤上的 F1 功能按鍵作為 “Yes” 的快捷鍵使用。


8.4 buttonbox()

buttonbox(msg='', title=' ', choices=('Button[1]', 'Button[2]', 'Button[3]'), image=None, images=None, default_choice=None, cancel_choice=None, callback=None, run=True)

可以使用 buttonbox() 定義自己的一組按鈕,buttonbox() 會顯示一組由你自定義的按鈕。

當用戶點擊任意一個按鈕的時候,buttonbox() 返回按鈕的文本內容。

如果用戶點擊取消或者關閉窗口,那么會返回默認選項(第一個選項)。

請看例子:



8.5 indexbox()

indexbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None, default_choice='Yes', cancel_choice='No')

基本跟 buttonbox() 一樣,區別就是當用戶選擇第一個按鈕的時候返回序號 0, 選擇第二個按鈕的時候返回序號 1。


8.6 boolbox()

boolbox(msg='Shall I continue?', title=' ', choices=('[Y]es', '[N]o'), image=None, default_choice='Yes', cancel_choice='No')

如果第一個按鈕被選中則返回 True,否則返回 False。


9. 如何在 buttonbox 里邊顯示圖片

當你調用一個 buttonbox 函數(例如 msgbox(), ynbox(), indexbox() 等等)的時候,你還可以為關鍵字參數 image 賦值,可以設置一個 .gif 格式的圖像(PNG 格式的圖像也是支持的哦^_^):

  1. buttonbox('大家說我長得帥嗎?', image='turtle.gif', choices=('帥', '不帥', '!@#$%'))



10. 為用戶提供一系列選項

10.1 choicebox()

choicebox(msg='Pick an item', title='', choices=[], preselect=0, callback=None, run=True)

按鈕組件方便提供用戶一個簡單的按鈕選項,但如果有很多選項,或者選項的內容特別長的話,更好的策略是為它們提供一個可選擇的列表。   
   
choicebox() 為用戶提供了一個可選擇的列表,使用序列(元祖或列表)作為選項,這些選項會按照字母進行排序。

另外還可以使用鍵盤來選擇其中一個選項(比較糾結,但一點兒都不重要):

  • 例如當按下鍵盤上的 “g” 鍵,將會選中的第一個以 “g” 開頭的選項。再次按下 “g” 鍵,則會選中下一個以 “g” 開頭的選項。在選中最后一個以 “g” 開頭的選項的時候,再次按下 “g” 鍵將重新回到在列表的開頭的第一個以 “g” 開頭的選項。
  • 如果選項中沒有以 “g” 開頭的,則會選中字符排序在 “g” 之前(“f”)的那個字符開頭的選項
  • 如果選項中沒有字符的排序在 “g” 之前的,那么在列表中第一個元素將會被選中。


結合我們之前學習的文件操作,舉個高達上的例子(源代碼在第35講的課后作業中^_^):




10.2 multchoicebox()

multchoicebox(msg='Pick an item', title='', choices=[], preselect=0, callback=None, run=True)

multchoicebox() 函數也是提供一個可選擇的列表,與 choicebox() 不同的是,multchoicebox() 支持用戶選擇 0 個,1 個或者同時選擇多個選項。

multchoicebox() 函數也是使用序列(元祖或列表)作為選項,這些選項顯示前會按照不區分大小寫的方法排好序。




11. 讓用戶輸入消息

11.1 enterbox()

enterbox(msg='Enter something.', title=' ', default='', strip=True, image=None, root=None)

enterbox() 為用戶提供一個最簡單的輸入框,返回值為用戶輸入的字符串。

默認返回的值會自動去除首尾的空格,如果需要保留首尾空格的話請設置參數 strip=False。

 



11.2 integerbox()

integerbox(msg='', title=' ', default=None, lowerbound=0, upperbound=99, image=None, root=None)

integerbox() 為用戶提供一個簡單的輸入框,用戶只能輸入范圍內(lowerbound 參數設置最小值,upperbound 參數設置最大值)的整型數值,否則會要求用戶重新輸入。


11.3 multenterbox()

multenterbox(msg='Fill in values for the fields.', title=' ', fields=[], values=[], callback=None, run=True)

multenterbox() 為用戶提供多個簡單的輸入框,要注意以下幾點:

  • 如果用戶輸入的值比選項少的話,則返回列表中的值用空字符串填充用戶為輸入的選項。
  • 如果用戶輸入的值比選項多的話,則返回的列表中的值將截斷為選項的數量。
  • 如果用戶取消操作,則返回域中的列表的值或者 None 值。


實現如下圖(源代碼在第35講的課后作業中^_^):




12. 讓用戶輸入密碼

有時候可能需要讓用戶輸入密碼等敏感信息,那么界面看上去應該是這樣的:*******。

12.1 passwordbox()

passwordbox(msg='Enter your password.', title=' ', default='', image=None, root=None)

passwordbox() 跟 enterbox() 樣式一樣,不同的是用戶輸入的內容用星號(*)顯示出來,該函數返回用戶輸入的字符串:

 

12.2 multpasswordbox()

multpasswordbox(msg='Fill in values for the fields.', title=' ', fields=(), values=(), callback=None, run=True)

multpasswordbox() 跟 multenterbox() 使用相同的接口,但當它顯示的時候,最后一個輸入框顯示為密碼的形式(*):



13. 顯示文本

EasyGUI 還提供函數用於顯示文本。

13.1 textbox()

textbox(msg='', title=' ', text='', codebox=False, callback=None, run=True)

textbox() 函數默認會以比例字體(參數 codebox=True 設置為等寬字體)來顯示文本內容(自動換行),這個函數適合用於顯示一般的書面文字。

注:text 參數設置可編輯文本區域的內容,可以是字符串、列表或者元祖類型。




13.2 codebox()

codebox(msg='', title=' ', text='')

codebox() 以等寬字體顯示文本內容(不自動換行),相當於 textbox(codebox=True)

注:等寬字體很丑的,但適合代碼編寫,不信你試試看@_@


14. 目錄與文件

GUI 編程中一個常見的場景是要求用戶輸入目錄及文件名,EasyGUI 提供了一些基本函數讓用戶來瀏覽文件系統,選擇一個目錄或文件。

14.1 diropenbox()

diropenbox(msg=None, title=None, default=None)

diropenbox() 函數用於提供一個對話框,返回用戶選擇的目錄名(帶完整路徑哦),如果用戶選擇 “Cancel” 則返回 None。

default 參數用於設置默認的打開目錄(請確保設置的目錄已存在)。




14.2 fileopenbox()

fileopenbox(msg=None, title=None, default='*', filetypes=None, multiple=False)

fileopenbox() 函數用於提供一個對話框,返回用戶選擇的文件名(帶完整路徑哦),如果用戶選擇 “Cancel” 則返回 None。

關於 default 參數的設置方法:

  • default 參數指定一個默認路徑,通常包含一個或多個通配符。
  • 如果設置了 default 參數,fileopenbox() 顯示默認的文件路徑和格式。
  • default 默認的參數是 '*',即匹配所有格式的文件。


例如:

  • default="c:/fishc/*.py" 即顯示 C:\fishc 文件夾下所有的 Python 文件。
  • default="c:/fishc/test*.py" 即顯示 C:\fishc 文件夾下所有的名字以 test 開頭的 Python 文件。


關於 filetypes 參數的設置方法:

  • 可以是包含文件掩碼的字符串列表,例如:filetypes = ["*.txt"]
  • 可以是字符串列表,列表的最后一項字符串是文件類型的描述,例如:filetypes = ["*.css", ["*.htm", "*.html", "HTML files"]]


最后是 multiple 參數,如果為 True 則表示可以同時選擇多個文件。




14.3 filesavebox()

filesavebox(msg=None, title=None, default='', filetypes=None)

filesavebox() 函數提供一個對話框,讓用於選擇文件需要保存的路徑(帶完整路徑哦),如果用戶選擇 “Cancel” 則返回 None。

default 參數應該包含一個文件名(例如當前需要保存的文件名),當然也可以設置為空的,或者包含一個文件格式掩碼的通配符。

filetypes 參數的設置方法請參考 fileopenbox() 函數。




15. 記住用戶的設置

15.1 EgStore

GUI 編程中一個常見的場景就是要求用戶設置一下參數,然后保存下來,以便下次用戶使用你的程序的時候可以記住他的設置。

為了實現對用戶的設置進行存儲和恢復這一過程,EasyGUI 提供了一個叫做 EgStore 的類。

為了記住某些設置,你的應用程序必須定義一個類(下面案例中的 “Settings”)繼承自 EgStore 類。

然后你的應用程序必須創建一個該類的實例化對象(下面案例中的 “settings”)。

設置類的構造函數(__init__ 方法)必須初始化所有的你想要它所記住的那些值。

一旦你這樣做了,你就可以在 settings 對象中通過設定值去實例化變量,從而很簡單地記住設置。

之后使用 settings.store() 方法在硬盤上持久化保存。

下面創建一個叫做 “Settings” 的類:

  1. from easygui import EgStore
  2. # 定義一個叫做“Settings”的類,繼承自EgStore類
  3. class Settings(EgStore):
  4.     def __init__(self, filename):  # 需要指定文件名
  5.         # 指定要記住的屬性名稱
  6.         self.author = ""
  7.         self.book = ""
  8.         # 必須執行下面兩個語句
  9.         self.filename = filename
  10.         self.restore()
  11. # 創建“Settings”的實例化對象“settings”
  12. settingsFilename = "settings.txt"
  13. settings = Settings(settingsFilename)
  14. author = "小甲魚"
  15. book = "《零基礎入門學習Pyhon》"
  16. # 將上面兩個變量的值保存到“settings”對象中
  17. settings.author = author
  18. settings.book = book
  19. settings.store()
  20. print("\n保存完畢\n")



16. 捕獲異常

exceptionbox()

使用 EasyGUI 編寫 GUI 程序,有時候難免會產生異常。當然這取決於你如何運行你的應用程序,當你的應用程序崩潰的時候,堆棧追蹤可能會被拋出,或者被寫入到 stdout 標准輸出函數中。

EasyGUI 通過 exceptionbox() 函數提供了更好的方式去處理異常。

當異常出現的時候,exceptionbox() 會將堆棧追蹤顯示在一個 codebox() 中,並且允許你做進一步的處理。

exceptionbox() 很容易使用,下面舉個例子:

  1. try:
  2.         print('I Love FishC.com!')
  3.         int('FISHC') # 這里會產生異常
  4. except:
  5.         exceptionbox()

轉載:小甲魚


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM