1. 程式人生 > >EasyGui 學習文件【超詳細中文版】[增強版]

EasyGui 學習文件【超詳細中文版】[增強版]

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

翻譯改編者:小甲魚,本文歡迎轉載,轉載請保證原文的完整性!

演示使用 Python 3.3.3 版本


0. 安裝 EasyGui

官網:http://easygui.sourceforge.net

最新版:

使用標準方法安裝:

  • 使用命令視窗切換到easygui-docs-0.96的目錄下
  • 【Windows下】執行C:\Python33\python.exe setup.py install
  • 【Linux或Mac下】sudo /usr/bin/python33 setup.py install


1. 建議不要在 IDLE 上執行 EasyGui


EasyGui 是執行在 Tkinter 上並擁有自身的事件迴圈,而 IDLE 也是 Tkinter 寫的一個應用程式並也擁有自身的事件迴圈。因此當兩者同時執行的時候,有可能會發生衝突,且帶來不可預測的結果。因此如果你發現你的 EasyGui 程式有這樣的問題,請嘗試在 IDLE 外去執行你的程式。


2. 一個簡單的例子

在 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.         choice = g.choicebox(msg, title, choices)
  9.         # note that we convert choice to string, in case
  10.         # the user cancelled the choice, and we got None.
  11.         g.msgbox("你的選擇是: " + str(choice), "結果")
  12.         msg = "你希望重新開始小遊戲嗎?"
  13.         title = "請選擇"
  14.         if g.ccbox(msg, title):     # show a Continue/Cancel dialog
  15.                 pass  # user chose Continue
  16.         else:
  17.                 sys.exit(0)     # user chose Cancel
複製程式碼
3. EasyGui 的各種功能演示


要執行 EasyGui 的演示程式,在命令列呼叫 EasyGui 是這樣的:
  1. C:\Python33\python.exe easygui.py
複製程式碼
或者你可以從 IDE(例如 IDLE, PythonWin, Wing, 等等)上來呼叫:
  1. >>> import easygui as g
  2. >>> g.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         # user chose to continue
  3. else:
  4.         return      # user chose to cancel
複製程式碼
7. 使用關鍵字引數呼叫 EasyGui 的函式


呼叫 EasyGui 函式還可以使用關鍵字引數哦。(如忘了的童鞋翻出《零基礎入門學習Python》第18講自行腦補)

現在假設你需要使用一個按鈕元件,但你不想指定標題引數(第二個引數),你仍可以使用關鍵字引數的方法指定 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)

msgbox() 顯示一個訊息和提供一個"OK"按鈕,你可以指定任意的訊息和標題,你甚至可以重寫"OK"按鈕的內容。
以下是 msgbox() 的例項函式:
  1. def msgbox(msg="(Your message goes here)", title="", ok_button="OK"):
  2.         ....
複製程式碼
重寫"OK"按鈕最簡單的方法是使用關鍵字引數:
  1. >>> msgbox("我一定要學會程式設計!", ok_button="加油!")
複製程式碼



8.2 ccbox()

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

ccbox() 提供一個選擇:Continue 或者 Cancel,並相應的返回 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)

同上,都不知作者設計這兩玩意兒搞啥......


8.4 buttonbox()

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


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

當用戶點選任意一個按鈕的時候,buttonbox() 返回按鈕的文字內容。如果使用者取消取消或者關閉視窗,那麼會返回預設選項(第一個選項)。請看例子:




8.5 indexbox()

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


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


8.6 boolbox()

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

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


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

當你呼叫一個 buttonbox 函式(例如 msgbox(), ynbox(), indexbox() 等等)的時候,你還可以為關鍵字引數 image 賦值,這是設定一個 .gif 格式的影象(注意僅支援 GIF 格式哦):
  1. buttonbox('大家說我長得帥嗎?', image='turtle.gif', choices=('帥', '不帥', '[email protected]#$%'))
複製程式碼



10. 為使用者提供一系列選項

10.1 choicebox()


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

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

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

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

綜合我們之前學習的檔案功能,舉個高達上的例子(原始碼在第35講的課後作業中^_^):




10.2 multchoicebox()

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


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='', lowerbound=0, upperbound=99, image=None, root=None, **invalidKeywordArguments)

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


11.3 multenterbox()

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

例:list1= ['使用者名稱:','密碼:']

        g.multpasswordbox(msg='請輸入使用者名稱和密碼',title='登入',fields=(list1))

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=())


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




13. 顯示文字

EasyGui 還提供函式用於顯示文字。


13.1 textbox()

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

例:g.textbox(text= open('E:\\新建文字文件.txt','r'))

testbox() 函式預設會以比例字型(引數 codebox=1 設定為等寬字型)來顯示文字內容(會自動換行哦),這個函式適合用於顯示一般的書面文字。

注:text 引數(第三個引數)可以是字串型別,列表型別,或者元祖型別。




13.2 codebox()

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


codebox() 以等寬字型顯示文字內容,相當於 textbox(codebox=1)

注:等寬字型很醜的,不信你試試看@[email protected]


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)


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"]]





14.3 filesavebox()

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


filesavebox() 函式提供一個對話方塊,讓用於選擇檔案需要儲存的路徑(帶完整路徑哦),如果使用者選擇"Cancel"則返回 None。

default 引數應該包含一個檔名(例如當前需要儲存的檔名),當然你也可以設定為空的,或者包含一個檔案格式掩碼的萬用字元。

filetypes 引數的設定方法請參考上邊。




15. 記住使用者的設定

15.1 EgStore

GUI 程式設計中一個常見的場景就是要求使用者設定一下引數,然後儲存下來,以便下次使用者使用你的程式的時候可以記住他的設定。

為了實現對使用者的設定進行儲存和恢復這一過程,EasyGui 提供了一個叫做 EgStore 的類。為了記住某些設定,你的應用程式必須定義一個類(暫時稱之為"設定"類,儘管你隨意地使用你想要的名稱設定它)繼承自 EgStore 類。

然後你的應用程式必須建立一個該類的物件(暫時稱之為"設定"物件)。

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

一旦你這樣做了,你就可以在"設定"物件中通過設定值去例項化變數,從而很簡單地記住設定。之後使用 settings.store() 方法在硬碟上持久化設定物件。

下面是建立一個"設定"類的例子:
  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)
複製程式碼
下面是使用"設定"物件的例子:
  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 程式,有時候難免會產生異常。當然這取決於你如何執行你的應用程式,當你的應用程式崩潰的時候,堆疊追蹤可能會被丟擲,或者被寫入到 stdout 標準輸出函式中。

EasyGui 通過 exceptionbox() 函式提供了更好的方式去處理異常,異常出現的時候,exceptionbox() 會顯示堆疊追蹤在一個 codebox() 中並且允許你做進一步的處理。

exceptionbox() 很容易使用,下面是一個例子:
  1. try:
  2.         print('I Love FishC.com!')
  3.         int('FISHC') # 這裡會產生異常
  4. except:
  5.         exceptionbox()
複製程式碼

相關推薦

EasyGui 學習詳細中文版[增強]

翻譯改編自官方文件:http://easygui.sourceforge.net/tutorial/index.html 翻譯改編者:小甲魚,本文歡迎轉載,轉載請保證原文的完整性! 演示使用 Python 3.3.3 版本0. 安裝 EasyGui 官網:http://ea

Tensorflow學習待更新

本文部分參考  https://morvanzhou.github.io/ https://www.bilibili.com/video/av9156347/?from=search&seid=14443754263386295565 如何安裝? win1

EasyGUI 學習

目錄 由於版本更迭,本篇所有示例及截圖均已更新,最新演示版本為 EasyGUI 0.98 & Python 3.7。 注意:由於模組、Python 版本或系統環境的差異,書中涉及的演示截圖與實際環

easygui學習

使用標準方法安裝: 使用命令視窗切換到easygui-docs-0.96的目錄下 【Windows下】執行C:\Python33\python.exe setup.py install 【Linux或Mac下】sudo /usr/bin/python33

WebService核心web-config.wsdd調用操作

app names row data- esp scope ice tac namespace WebService核心文件【server-config.wsdd】詳解及調用示例 作者:瑪莎拉蒂-小賤人 一、準備工作 導入需要的jar包:

掃描某目錄下的所有的MD5碼並導出可執行jar

output clean mvn clean hot sts balance tid eat .get pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.

RCNN系列詳細解析

一、基於Region Proposal(候選區域)的深度學習目標檢測演算法 Region Proposal(候選區域),就是預先找出圖中目標可能出現的位置,通過利用影象中的紋理、邊緣、顏色等資訊,保證在選取較少視窗(幾千個甚至幾百個)的情況下保持較高的召回率(IoU,Int

RCNN系列詳細解析1

  一、基於Region Proposal(候選區域)的深度學習目標檢測演算法 Region Proposal(候選區域),就是預先找出圖中目標可能出現的位置,通過利用影象中的紋理、邊緣、顏色等資訊,保證在選取較少視窗

PostgreSQL 10.1 前言---3.約定

約定 在命令的概要中使用了以下約定:方括號([和])表示可選的部分。(在Tcl命令的大綱中,使用問號(?)代替,如Tcl中常見的那樣。)大括號({和})和豎線(|)表示您必須選擇一個選項。點(…)意味著前面的元素可以重複。 在增強清晰性的地方,SQL命令前面

Oracle數據庫的安裝 詳細圖詳解

ech passwd pat 適用於 下載 當前 play 領域 .so Oracle簡介Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關系數據庫管理系統。它是在數據庫領域一直處於領先地位的產品。可以說Oracle數據庫

Python:EasyGUI v0.96學習

使用命令視窗切換到easygui-docs-0.96的目錄下 【Windows下】執行C:\Python33\python.exe setup.py install 【Linux或Mac下】sudo /usr/bin/python33 setup.py install

unity中事件函式的執行順序詳細,圖+

在Unity指令碼中,有一些事件函式會在指令碼執行時按預定順序執行。 該執行順序如下所述: 編輯 Reset:Reset是用來初始化指令碼屬性的,在第一次指令碼附在物件上的時候和按下Reset按鈕的時候會被執行。 第一次場景載入 Awake:Awa

SQLMap用戶手冊詳細

youtube select other avi 通過 linux中 message ole db pac http://192.168.136.131/sqlmap/mysql/get_int.php?id=1當給sqlmap這麽一個url的時候,它會:1、判斷可註入的參

字節輸入流寫本文OutputStream、FileOutputStream

byte[] 方法名 cell end borde 方法 oid 所有 寫入文件 字節輸入流寫文本文件 1.OutputStream基類 作用:把內存中的數據輸出到文件中。 ※OutputStream類的常用方法 方法名稱 說明

Linux上使用程序相對路徑訪問

blog 設置 article main函數 所有 printf style art file 轉自:http://blog.csdn.net/yinxusen/article/details/7444249 今天一個朋友問我這個問題,說為什麽在Windows上跑得很

測試過程中常用的linux命令之查看指定行的內容

sed head tail 在開展測試工作的過程中,通常要接觸到服務器,對於linux服務器,總結一些常用的命令。 準備工作為了能直觀展示命令結果,使用腳本創建一個文件,在顯示文件內容的同時,也直觀的顯示行號。#!/bin/bash FileName=TestFile.log touch ./$

Ubuntu學習 權限

表示 就是 ubuntu 復制 權限 復制代碼 數字 寫的權限 root 文件權限```rwxrwxr-- : 三組rwx 分別表示 所有者、所有組、其他人 的權限。r : 表示可讀, 可以用數字 4 來表示w : 標識可寫 ,可以用數字 2 來表示x : 表示可執行 ,

Linux學習-管理(1)

詳細信息 src 最長 mod 展開 重新啟動 upper 填充 虛擬 文件管理——當你使用Linux時,大部分時間都會和文件打交道,我們需要了解基本的文件操作,如創建文件、刪除文件、復制文件、重命名文件以及為文件創建鏈接等。目錄 文件的組成 目錄結構

Linux學習-管理(2)

mdi 批量 字符 nbsp ren 交互 替換 mkdir -p txt 九、移動、重命名文件 mv 移動文件 格式:mv+源文件+目標 -i 交互式,覆蓋前提示 -f 強制覆蓋 rm 刪除文件和目錄 -i

(獨孤九劍)--PHP視頻學習--系統

獲取文件 pen 讀取 warning 寫入 字符型 級別 fread 資源 【一】文件系統概述 文件的創建,刪除,編輯,復制,粘貼(移動),即文件的增刪改查 【二】讀取文件 打開讀取:readfile(string),傳入文件路徑即可打開讀取(如讀取成功,則返回字節數