国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

【Python擴(kuò)展閱讀【轉(zhuǎn)】EasyGui學(xué)習(xí)文檔【超詳細(xì)中文版】】

2019-11-14 17:36:56
字體:
供稿:網(wǎng)友

翻譯改編自官方文檔:http://easygui.sourceforge.net/tutorial/index.html

翻譯改編者:小甲魚,本文歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)保證原文的完整性!

演示使用 Python 3.3.3 版本


0. 安裝 EasyGui

官網(wǎng):http://easygui.sourceforge.net

最新版: easygui-0.96.zip



使用標(biāo)準(zhǔn)方法安裝:

  • 使用命令窗口切換到easygui-docs-0.96的目錄下
  • 【W(wǎng)indows下】執(zhí)行C:/Python33/python.exe setup.py install
  • linux或Mac下】sudo /usr/bin/python33 setup.py install



1. 建議不要在 IDLE 上運(yùn)行 EasyGui

EasyGui 是運(yùn)行在 Tkinter 上并擁有自身的事件循環(huán),而 IDLE 也是 Tkinter 寫的一個(gè)應(yīng)用程序并也擁有自身的事件循環(huán)。因此當(dāng)兩者同時(shí)運(yùn)行的時(shí)候,有可能會(huì)發(fā)生沖突,且?guī)聿豢深A(yù)測(cè)的結(jié)果。因此如果你發(fā)現(xiàn)你的 EasyGui 程序有這樣的問題,請(qǐng)嘗試在 IDLE 外去運(yùn)行你的程序。


2. 一個(gè)簡(jiǎn)單的例子

在 EasyGui 中,所有的 GUI 互動(dòng)均是通過簡(jiǎn)單的函數(shù)調(diào)用,下邊一個(gè)簡(jiǎn)單的例子告訴你 EasyGui 確實(shí)很 Easy!



3. EasyGui 的各種功能演示


要運(yùn)行 EasyGui 的演示程序,在命令行調(diào)用 EasyGui 是這樣的:


或者你可以從 IDE(例如 IDLE, PythonWin, Wing, 等等)上來調(diào)用:


成功調(diào)用后你將可以嘗試 EasyGui 擁有的各種功能,并將你選擇的結(jié)果打印至控制臺(tái)。




4. 導(dǎo)入 EasyGui

為了使用 EasyGui 這個(gè)模塊,你應(yīng)該先導(dǎo)入它。最簡(jiǎn)單的導(dǎo)入語句是:

  1. import easygui


如果你使用上面這種形式導(dǎo)入的話,那么你使用 EasyGui 的函數(shù)的時(shí)候,必須在函數(shù)的前面加上前綴 easygui,像這樣:

  1. easygui.msgbox(...)


另一種選擇是導(dǎo)入整個(gè) EasyGui 包:

  1. from easygui import *


這使得我們更容易調(diào)用 EasyGui 的函數(shù),你可以直接這樣編寫代碼:

  1. msgbox(...)


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

  1. import easygui as g


這樣可以讓你保持 EasyGui 的命名空間,同時(shí)減少你的打字?jǐn)?shù)量。導(dǎo)入之后你就可以這么調(diào)用 EasyGui 的函數(shù):

  1. g.msgbox(...)



5. 使用 EasyGui


一旦你的模塊導(dǎo)入 EasyGui,GUI 操作就是一個(gè)簡(jiǎn)單的調(diào)用 EasyGui 函數(shù)的幾個(gè)參數(shù)的問題了。

例如,使用 EasyGui 來實(shí)現(xiàn)著名的“你好,世界!”程序是這樣的:

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




6. EasyGui 函數(shù)的默認(rèn)參數(shù)

對(duì)于所有函數(shù)而言,前兩個(gè)參數(shù)是消息和標(biāo)題。按照這個(gè)規(guī)律,在某種情況下,這可能不是最有利于用戶的安排(例如,對(duì)話框在獲取目錄和文件名的時(shí)候忽略消息參數(shù)),但我覺得保持這種一致性貫穿于所有的窗口部件是一種更為重要的考慮!
   
絕大部分的 EasyGui 函數(shù)都有默認(rèn)參數(shù),幾乎所有的組件都會(huì)顯示一個(gè)消息和標(biāo)題。標(biāo)題默認(rèn)是空字符串,信息通常有一個(gè)簡(jiǎn)單的默認(rèn)值。
  
這使得你可以盡量少的去設(shè)置參數(shù),比如 msgbox() 函數(shù)標(biāo)題部分的參數(shù)就是可選的,所以你調(diào)用 msgbox() 的時(shí)候可以只指定一個(gè)消息參數(shù),例如:

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


當(dāng)然你也可以指定標(biāo)題參數(shù)和消息參數(shù),例如:

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

 



在各類按鈕組件里,默認(rèn)的消息是"Shall I continue?",所以你可以不帶任何參數(shù)地去調(diào)用它們。這里我們演示不帶任何參數(shù)地去調(diào)用 ccbox(),當(dāng)選擇"cancel"或關(guān)閉窗口的時(shí)候返回一個(gè)布爾類型的值:

  1. if ccbox():
  2.         pass         # user chose to continue
  3. else:
  4.         return      # user chose to cancel



7. 使用關(guān)鍵字參數(shù)調(diào)用 EasyGui 的函數(shù)


調(diào)用 EasyGui 函數(shù)還可以使用關(guān)鍵字參數(shù)哦。(如忘了的童鞋翻出《零基礎(chǔ)入門學(xué)習(xí)Python》第18講自行腦補(bǔ))

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

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

 




8. 使用按鈕組件

根據(jù)需求,EasyGui 在 buttonbox() 上建立了一系列的函數(shù)供調(diào)用。


8.1 msgbox()

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

msgbox() 顯示一個(gè)消息和提供一個(gè)"OK"按鈕,你可以指定任意的消息和標(biāo)題,你甚至可以重寫"OK"按鈕的內(nèi)容。
以下是 msgbox() 的實(shí)例函數(shù):

  1. def msgbox(msg="(Your message goes here)", title="", ok_button="OK"):
  2.         ....


重寫"OK"按鈕最簡(jiǎn)單的方法是使用關(guān)鍵字參數(shù):

  1. >>> msgbox("我一定要學(xué)會(huì)編程!", ok_button="加油!")




8.2 ccbox()

ccbox(msg='Shall I continue?', title=' ', choices=('Continue', 'Cancel'), image=None)

ccbox() 提供一個(gè)選擇:Continue 或者 Cancel,并相應(yīng)的返回 1(選中Continue)或者 0(選中Cancel)。

注意 ccbox() 是返回整型的 1 或 0,不是布爾類型的 True 或 False。但你仍然可以這么寫:

  1. if ccbox('要再來一次嗎?', choices=('要啊要啊^_^', '算了吧T_T')):
  2.         msgbox('不給玩了,再玩就玩壞了......')
  3. else:
  4.         sys.exit(0) # 記得先 import sys 哈



8.3 ynbox()


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

同上,都不知作者設(shè)計(jì)這兩玩意兒搞啥......


8.4 buttonbox()

buttonbox(msg='', title=' ', choices=('Button1', 'Button2', 'Button3'), image=None, root=None)

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

當(dāng)用戶點(diǎn)擊任意一個(gè)按鈕的時(shí)候,buttonbox() 返回按鈕的文本內(nèi)容。如果用戶取消取消或者關(guān)閉窗口,那么會(huì)返回默認(rèn)選項(xiàng)(第一個(gè)選項(xiàng))。請(qǐng)看例子:




8.5 indexbox()

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

基本跟上邊一樣,區(qū)別就是當(dāng)用戶選擇第一個(gè)按鈕的時(shí)候返回序號(hào) 0, 選擇第二個(gè)按鈕的時(shí)候返回序號(hào) 1。


8.6 boolbox()

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

如果第一個(gè)按鈕被選中則返回 1,否則返回 0。


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

當(dāng)你調(diào)用一個(gè) buttonbox 函數(shù)(例如 msgbox(), ynbox(), indexbox() 等等)的時(shí)候,你還可以為關(guān)鍵字參數(shù) image 賦值,這是設(shè)置一個(gè) .gif 格式的圖像(注意僅支持 GIF 格式哦):

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




10. 為用戶提供一系列選項(xiàng)

10.1 choicebox()

choicebox(msg='Pick something.', title=' ', choices=())

按鈕組件方便提供用戶一個(gè)簡(jiǎn)單的按鈕選項(xiàng),但如果有很多選項(xiàng),或者選項(xiàng)的內(nèi)容特別長(zhǎng)的話,更好的策略是為它們提供一個(gè)可選擇的列表。   
   
choicebox() 為用戶提供了一個(gè)可選擇的列表,使用序列(元祖或列表)作為選項(xiàng),這些選項(xiàng)顯示前會(huì)按照不區(qū)分大小寫的方法排好序。

另外還可以使用鍵盤來選擇其中一個(gè)選項(xiàng)(比較糾結(jié),但一點(diǎn)兒都不重要):

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




10.2 multchoicebox()

multchoicebox(msg='Pick as many items as you like.', title=' ', choices=(), **kwargs)

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

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




11. 讓用戶輸入消息

11.1 enterbox()

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

enterbox() 為用戶提供一個(gè)最簡(jiǎn)單的輸入框,返回值為用戶輸入的字符串。默認(rèn)返回的值會(huì)自動(dòng)去除首尾的空格,如果需要保留首尾空格的話請(qǐng)?jiān)O(shè)置參數(shù) strip=False。




11.2 integerbox()

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

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


11.3 multenterbox()

multenterbox(msg='Fill in values for the fields.', title=' ', fields=(), values=())

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

  • 如果用戶輸入的值比選項(xiàng)少的話,則返回列表中的值用空字符串填充用戶為輸入的選項(xiàng)。
  • 如果用戶輸入的值比選項(xiàng)多的話,則返回的列表中的值將截?cái)酁檫x項(xiàng)的數(shù)量。
  • 如果用戶取消操作,則返回域中的列表的值或者None值。




12. 讓用戶輸入密碼

有時(shí)候我們需要讓用戶輸入密碼,就是用戶輸入的東西看上去都是"*******"。


12.1 passwordbox()

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

passwordbox() 跟 enterbox() 樣式一樣,不同的是用戶輸入的內(nèi)容用"*"顯示出來,返回用戶輸入的字符串:




12.2 multpasswordbox()

multpasswordbox(msg='Fill in values for the fields.', title=' ', fields=(), values=())

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




13. 顯示文本

EasyGui 還提供函數(shù)用于顯示文本。


13.1 textbox()

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

testbox() 函數(shù)默認(rèn)會(huì)以比例字體(參數(shù) codebox=1 設(shè)置為等寬字體)來顯示文本內(nèi)容(會(huì)自動(dòng)換行哦),這個(gè)函數(shù)適合用于顯示一般的書面文字。

注:text 參數(shù)(第三個(gè)參數(shù))可以是字符串類型,列表類型,或者元祖類型。




13.2 codebox()

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

codebox() 以等寬字體顯示文本內(nèi)容,相當(dāng)于 textbox(codebox=1)

注:等寬字體很丑的,不信你試試看@_@


14. 目錄與文件

GUI 編程中一個(gè)常見的場(chǎng)景是要求用戶輸入目錄及文件名,EasyGui 提供了一些基本函數(shù)讓用戶來瀏覽文件系統(tǒng),選擇一個(gè)目錄或文件。


14.1 diropenbox()

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

diropenbox() 函數(shù)用于提供一個(gè)對(duì)話框,返回用戶選擇的目錄名(帶完整路徑哦),如果用戶選擇"Cancel"則返回 None。

default 參數(shù)用于設(shè)置默認(rèn)的打開目錄(請(qǐng)確保設(shè)置的目錄已存在)。




14.2 fileopenbox()

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

fileopenbox() 函數(shù)用于提供一個(gè)對(duì)話框,返回用戶選擇的文件名(帶完整路徑哦),如果用戶選擇"Cancel"則返回 None。

關(guān)于 default 參數(shù)的設(shè)置方法:

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


例如:

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


關(guān)于 filetypes 參數(shù)的設(shè)置方法:

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






14.3 filesavebox()

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

filesavebox() 函數(shù)提供一個(gè)對(duì)話框,讓用于選擇文件需要保存的路徑(帶完整路徑哦),如果用戶選擇"Cancel"則返回 None。

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

filetypes 參數(shù)的設(shè)置方法請(qǐng)參考上邊。




15. 記住用戶的設(shè)置

15.1 EgStore

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

為了實(shí)現(xiàn)對(duì)用戶的設(shè)置進(jìn)行存儲(chǔ)和恢復(fù)這一過程,EasyGui 提供了一個(gè)叫做 EgStore 的類。為了記住某些設(shè)置,你的應(yīng)用程序必須定義一個(gè)類(暫時(shí)稱之為"設(shè)置"類,盡管你隨意地使用你想要的名稱設(shè)置它)繼承自 EgStore 類。

然后你的應(yīng)用程序必須創(chuàng)建一個(gè)該類的對(duì)象(暫時(shí)稱之為"設(shè)置"對(duì)象)。

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

一旦你這樣做了,你就可以在"設(shè)置"對(duì)象中通過設(shè)定值去實(shí)例化變量,從而很簡(jiǎn)單地記住設(shè)置。之后使用 settings.store() 方法在硬盤上持久化設(shè)置對(duì)象。

下面是創(chuàng)建一個(gè)"設(shè)置"類的例子:

  1. #-----------------------------------------------------------------------
  2. # create "settings", a persistent Settings object
  3. # Note that the "filename" argument is required.
  4. # The directory for the persistent file must already exist.
  5. #-----------------------------------------------------------------------
  6. settingsFilename = os.path.join("C:", "FishCApp", "settings.txt")  # Windows example
  7. settings = Settings(settingsFilename)


下面是使用"設(shè)置"對(duì)象的例子:

  1. # we initialize the "user" and "server" variables
  2. # In a real application, we'd PRobably have the user enter them via enterbox
  3. user    = "奧巴馬"
  4. server  = "白宮"
  5. # we save the variables as attributes of the "settings" object
  6. settings.userId = user
  7. settings.targetServer = server
  8. settings.store()    # persist the settings
  9. # run code that gets a new value for userId
  10. # then persist the settings with the new value
  11. user    = "小甲魚"
  12. settings.userId = user
  13. settings.store()

   
   
16. 捕獲異常


exceptionbox()

使用 EasyGui 編寫 GUI 程序,有時(shí)候難免會(huì)產(chǎn)生異常。當(dāng)然這取決于你如何運(yùn)行你的應(yīng)用程序,當(dāng)你的應(yīng)用程序崩潰的時(shí)候,堆棧追蹤可能會(huì)被拋出,或者被寫入到 stdout 標(biāo)準(zhǔn)輸出函數(shù)中。

EasyGui 通過 exceptionbox() 函數(shù)提供了更好的方式去處理異常,異常出現(xiàn)的時(shí)候,exceptionbox() 會(huì)顯示堆棧追蹤在一個(gè) codebox() 中并且允許你做進(jìn)一步的處理。

exceptionbox() 很容易使用,下面是一個(gè)例子:

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

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁武县| 报价| 普陀区| 平度市| 大宁县| 博罗县| 江山市| 内江市| 舟曲县| 昭苏县| 环江| 轮台县| 乌拉特后旗| 诸城市| 毕节市| 临朐县| 治多县| 沂源县| 九龙县| 北京市| 奉节县| 清苑县| 潍坊市| 临朐县| 永修县| 陆河县| 新蔡县| 马山县| 聂荣县| 甘德县| 徐水县| 定结县| 淳化县| 赣州市| 三河市| 白玉县| 临泽县| 文水县| 苍山县| 岑巩县| 湘乡市|