EasyGUI 學習文件
目錄
由於版本更迭,本篇所有示例及截圖均已更新,最新演示版本為 EasyGUI 0.98 & Python 3.7。
注意:由於模組、Python 版本或系統環境的差異,書中涉及的演示截圖與實際環境可能會有出入,但函式的用法及行為均是一致。
0. 安裝 EasyGUI
1. 什麼是 EasyGUI?
EasyGUI 是 Python 中一個非常簡單的 GUI 程式設計模組,不同於其他的 GUI 生成器,它不是事件驅動的。相反,所有的 GUI 互動都是通過簡地函式呼叫就可以實現。
EasyGUI 為使用者提供了簡單的 GUI 互動介面,不需要程式設計師知道任何有關 tkinter,框架,部件,回撥或 lambda 的任何細節。
EasyGUI 可以很好地相容 Python 2 和 3,並且不存在任何依賴關係。
EasyGUI 是執行在 Tkinter 上並擁有自身的事件迴圈,而 IDLE 也是 Tkinter 寫的一個應用程式並也擁有自身的事件迴圈。因此當兩者同時執行的時候,有可能會發生衝突,且帶來不可預測的結果。因此如果你發現你的 EasyGUI 程式有這樣的問題,請嘗試在 IDLE 外去執行你的程式。
2. 一個簡單的例子
在 EasyGui 中,所有的 GUI 互動均是通過簡單的函式呼叫,下邊一個簡單的例子告訴你 EasyGui 確實很 Easy!
import easygui as g import sys while 1: g.msgbox("嗨,歡迎進入第一個介面小遊戲^_^") msg ="請問你希望在魚C工作室學習到什麼知識呢?" title = "小遊戲互動" choices = ["談戀愛", "程式設計", "OOXX", "琴棋書畫"] choice = g.choicebox(msg, title, choices) # 注意,msgbox的引數是一個字串 # 如果使用者選擇Cancel,該函式返回None g.msgbox("你的選擇是: " + str(choice), "結果") msg = "你希望重新開始小遊戲嗎?" title = "請選擇" # 彈出一個Continue/Cancel對話方塊 if g.ccbox(msg, title): pass # 如果使用者選擇Continue else: sys.exit(0) # 如果使用者選擇Cancel
3. EasyGUI 的各種功能演示
要執行 EasyGUI 的演示程式,在命令列呼叫 EasyGUI 是這樣的:
python easygui.py
或者可以從 IDE(例如 IDLE, PythonWin, Wing, 等等)上呼叫:
>>> import easygui
>>> easygui.egdemo()
成功呼叫後將可以嘗試 EasyGUI 擁有的各種功能,並將結果列印至控制檯。
4. 匯入 EasyGUI
為了使用 EasyGUI 這個模組,你應該先匯入它。
最簡單的匯入語句是:
import easygui
如果使用上面這種形式匯入的話,那麼你使用 EasyGUI 的函式的時候,必須在函式的前面加上字首 easygui,像這樣:
easygui.msgbox(...)
另一種選擇是匯入整個 EasyGUI 包:
from easygui import *
這使得我們更容易呼叫 EasyGUI 的函式,可以直接這樣編寫程式碼:
msgbox(...)
第三種方案是使用類似下邊的 import 語句:
import easygui as g
這種方法還可以讓你保持 EasyGUI 的名稱空間,同時減少你的打字數量。
匯入之後就可以這麼呼叫 EasyGUI 的函式:
g.msgbox(...)
5. 使用 EasyGUI
一旦你的模組匯入 EasyGUI,GUI 操作就是一個簡單的呼叫 EasyGUI 函式的幾個引數的問題了。
例如,使用 EasyGUI 來實現世界上最著名的打招呼:
import easygui as g
g.msgbox("Hello, world!")
6. EasyGUI 函式的預設引數
對於所有對話方塊而言,前兩個引數都是訊息主體和對話方塊標題。
按照這個規律,在某種情況下,這可能不是理想的佈局設計(比如當對話方塊在獲取目錄或檔名的時候會選擇忽略訊息引數),但保持這種一致性且貫穿於所有的視窗部件是更為得體的考慮!
絕大部分的 EasyGUI 函式都有預設引數,幾乎所有的元件都會顯示訊息主體和對話方塊標題。
標題預設是空字串,訊息主體通常有一個簡單的預設值。
這使得你可以儘可能少的去設定引數,比如 msgbox() 函式標題部分的引數是可選的,因此你呼叫 msgbox() 的時候只需要指定一個訊息引數即可,例如:
>>> msgbox('我愛小甲魚^_^')
當然你也可以指定標題引數和訊息引數,例如:
>>> msgbox('我愛小甲魚^_^', '魚油心聲')
在各類按鈕元件裡,預設的訊息是 “Shall I continue?”,所以你可以不帶任何引數地去呼叫它們。
這裡我們演示不帶任何引數地去呼叫 ccbox(),當選擇 “cancel” 或關閉視窗的時候返回一個布林型別的值:
if ccbox():
pass # 使用者選擇繼續
else:
return # 使用者選擇取消
7. 使用關鍵字引數呼叫 EasyGUI 的函式
呼叫 EasyGUI 函式還可以使用關鍵字引數哦。
現在假設你需要使用一個按鈕元件,但你不想指定標題引數(第二個引數),你仍可以使用關鍵字引數的方法指定 choices 引數(第三個引數),像這樣:
>>> choices = ['願意', '不願意', '有錢的時候就願意']
>>> 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” 按鈕的內容。
重寫 “OK” 按鈕最簡單的方法是使用關鍵字引數:
>>> msgbox("我一定要學會程式設計!", ok_button="加油!")
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 格式的影象也是支援的哦^_^):
buttonbox('大家說我長得帥嗎?', image='turtle.gif', choices=('帥', '不帥', '[email protected]#$%'))
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)
注:等寬字型很醜的,但適合程式碼編寫,不信你試試看@[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, 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” 的類:
from easygui import EgStore
# 定義一個叫做“Settings”的類,繼承自EgStore類
class Settings(EgStore):
def __init__(self, filename): # 需要指定檔名
# 指定要記住的屬性名稱
self.author = ""
self.book = ""
# 必須執行下面兩個語句
self.filename = filename
self.restore()
# 建立“Settings”的例項化物件“settings”
settingsFilename = "settings.txt"
settings = Settings(settingsFilename)
author = "小甲魚"
book = "《零基礎入門學習Pyhon》"
# 將上面兩個變數的值儲存到“settings”物件中
settings.author = author
settings.book = book
settings.store()
print("\n儲存完畢\n")
16. 捕獲異常
exceptionbox()
使用 EasyGUI 編寫 GUI 程式,有時候難免會產生異常。當然這取決於你如何執行你的應用程式,當你的應用程式崩潰的時候,堆疊追蹤可能會被丟擲,或者被寫入到 stdout 標準輸出函式中。
EasyGUI 通過 exceptionbox() 函式提供了更好的方式去處理異常。
當異常出現的時候,exceptionbox() 會將堆疊追蹤顯示在一個 codebox() 中,並且允許你做進一步的處理。
exceptionbox() 很容易使用,下面舉個例子:
try:
print('I Love FishC.com!')
int('FISHC') # 這裡會產生異常
except:
exceptionbox()
相關推薦
EasyGui 學習文件【超詳細中文版】[增強版]
翻譯改編自官方文件:http://easygui.sourceforge.net/tutorial/index.html 翻譯改編者:小甲魚,本文歡迎轉載,轉載請保證原文的完整性! 演示使用 Python 3.3.3 版本0. 安裝 EasyGui 官網:http://ea
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
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
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),傳入文件路徑即可打開讀取(如讀取成功,則返回字節數
shell學習文件操作之sort,cut,uniq
3linux系統使用過程中,我們經常需要對文件進行一些操作分析,例如對文本進行分類排序,去重,截取一些規則化字段。cut,sort,uniq很方便使用。 1.sort:一般有三種模式,分別為排序文本,檢查文件,合並文件。 常用方法及參數 sort [option] [file] -b,#忽略前空格或者制表
Python學習——文件操作和異常處理
not ret lease ext title eas err turn with # title = "Alice in Wonderland"# print(title.split())def count_words(filename): ‘‘‘ count ho
Python學習-文件操作
code see ref 字符 pri lines 清空 文件的 末尾 使用open函數創建文件對象, 然後就可以使用文件對象(file)常用的函數. 例: f = open(‘/path/to/targetfile/test.txt‘, mode=‘r‘, encodin
Linux(RedHat)基礎學習—文件尋址與管理
fcc 強制 表示 命名 mv命令 追加內容 size tar tro 1.系統結構 Linux系統目錄結構 /:根目錄,linux系統中最高層目錄。在根目錄下的目錄叫
Linux(RadHat)基礎學習—文件權限
chgrp 訪問 用戶權限 文件屬性 vpd 冒險位 images ont use 文件權限的意義:系統最底層安全設定方法之一,保證文件可以被可用的用戶作相應操作 1.文件屬性的查看 ls -l filename 等同於 ll filename (文件屬性) ls
Linux(RadHat)基礎學習—文件傳輸
文件歸檔 路徑 遠程同步 syn code tar.xz mnt 文件上傳 進行 1.scp傳輸 scp:遠程復制傳輸,速度很慢 目錄上傳: scp -r 目錄 用戶名@主機ip:絕對路徑 文件上傳 scp 文件 用戶名@主機ip:絕對路徑 遠程下
Python學習—文件操作
like import false 不能 pfile 返回 unicode 支持 zip 1.文件基礎知識 1.文件是存儲在外部介質上的數據的集合,文件的基本單位是字節,文件所含的字節數就是文件的長度。每個字節都有一個默認的位置,位置從0開始,文件頭的位置就是0,文件尾的位
ElasticSearch學習文件2018.11
1 Elasticsearch安裝 1.1 ES6.0版本安裝head外掛 1.1 下載head外掛 下載地址:https://github.com/mobz/elasticsearch-head
近期學習文件
node node 基礎 https://www.runoob.com/nodejs/nodejs-tutorial.html node api 查詢 http://nodejs.cn/api/ vue 基礎 https://router.vuejs.org/zh
Tushare學習文件(十 電影票房)
import tushare as ts 1.實時票房 ts.realtime_boxoffice() BoxOffice 實時票房(萬) Irank 排名 MovieName 影片名 boxPer 票房佔比 (%) movieD
Tushare學習文件(六 新聞事件資料)
import tushare as ts 1.即時新聞 ts.get_latest_news() ,預設是80條新聞 ts.get_latest_news(數字小於八十) ts.get_latest_news(top=10,show_conten
Tushare學習文件(三 股票分類資料)
import tushare as ts 1.行業分類 ts.get_industry_classified() 2.概念分類 ts.get_concept_classified() 3.地域分類 ts.get_area_classified()