知識點:EasyGui python可視化編程


原址:http://bbs.fishc.com/forum.php?mod=viewthread&tid=46069&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403

1:EasyGui 的各種功能演示

要運行 EasyGui 的演示程序,

方法1: 在命令行cmd調用 EasyGui

C:\Python33\python.exe easygui.py

方法2: 在IDLE上運行

import easygui as g
g.egdemo()

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

 

2:導入EasyGui 

方法1:最簡單的導入方法,使用 EasyGui 的函數的時候,必須在函數的前面加上前綴 easygui

import easygui
easygui.msgbox("hello")

方法2:選擇是導入整個 EasyGui 包, 這使得我們更容易調用 EasyGui 的函數,你可以直接這樣編寫代碼

from easygui import *
msgbox("hello")

 

方法3:推薦的方法.這樣可以讓你保持 EasyGui 的命名空間,同時減少你的打字數量。導入之后你就可以這么調用 EasyGui 的函數

import easygui as g
g.msgbox("hello")

3:EasyGui 函數的默認參數

 對於所有函數而言,前兩個參數是消息和標題。絕大部分的 EasyGui 函數都有默認參數,幾乎所有的組件都會顯示一個消息和標題。標題默認是空字符串,信息通常有一個簡單的默認值。

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

 

import easygui as g
g.ccbox()

“Continue”--->返回1

 “Cancel”  --->返回0

 

4:使用關鍵字參數調用 EasyGui 的函數

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

import easygui as g

choices=["願意","不願意","等你有錢了願意"]
reply=g.choicebox("你願意嫁給我嗎?",choices=choices)

 

 

5:按鈕組件

5.1:msgbox()

msgbox(msg='(Your message goes here)', title=' ', ok_button='OK', image=None, root=None)  #返回值:"OK"

 

msgbox() 顯示一個消息和提供一個"OK"按鈕,你可以指定任意的消息和標題,你甚至可以重寫"OK"按鈕的內容

修改按鈕內容的最簡單方法是使用關鍵字參數 

 

import easygui as g

g.msgbox("我要當第一!",ok_button='加油',)

 

 

5.2:ccbox()

ccbox(msg='Shall I continue?', title=' ', choices=('Continue', 'Cancel'), image=None)  #返回值 Continue:1  Cancel:0  choices中可以有兩個以上按鈕,但只有第一個按鈕返回1,其他都返回0

 

ccbox() 提供一個選擇:Continue 或者 Cancel,並相應的返回 1(選中Continue)或者 0(選中Cancel)

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

import easygui as g
import sys

if g.ccbox("要再來一次嗎?", choices=("要啊要啊^_^","算了吧T_T")):
    g.msgbox("不給玩了,再玩就玩壞了")
else:
    sys.exit(0)

 

 

 

5.3ynbox()   #和CCbox類似

ynbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None)   #返回值 Yes:1  No:0  choices中可以有兩個以上按鈕,但只有第一個按鈕返回1,其他都返回0

 

 

 

 5.4 buttonbox()

buttonbox(msg='', title=' ', choices=('Button1', 'Button2', 'Button3'), image=None, root=None) #返回值 返回按鈕的文本內容

 

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

當用戶點擊任意一個按鈕的時候,buttonbox() 返回按鈕的文本內容。如果用戶取消取消或者關閉窗口,那么會返回默認選項(第一個選項)。 

 

import easygui as g

g.buttonbox("你喜歡哪種水果?",choices=("蘋果","香蕉","橘子","西瓜"))

 

 5.5 indexbox()

indexbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None) #返回值 返回每個按鈕的序號,從0開始 Yes:0,No:1....

 

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

 

 

5.6 boolbox()

boolbox(msg='Shall I continue?', title=' ', choices=('Yes', 'No'), image=None) #返回值 第一個按鈕被選中返回 1,第二個按鈕被選中則返回 0

 

 

 

6:如何在 buttonbox 里邊顯示圖片

當你調用一個 buttonbox 函數(例如 msgbox(), ynbox(), indexbox() 等等)的時候,你還可以為關鍵字參數 image 賦值,這是設置一個 .gif 格式的圖像(注意僅支持 GIF 格式)

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

 

 

 7:選項組件

 7.1 choicebox()

choicebox(msg='Pick something.', title=' ', choices=()) # 雙擊列表中的選項或者通過“OK”按鈕選擇  返回選項的內容  只能返回一個

按鈕組件方便提供用戶一個簡單的按鈕選項,但如果有很多選項,或者選項的內容特別長的話,更好的策略是為它們提供一個可選擇的列表。

choicebox() 為用戶提供了一個可選擇的列表,使用序列(元祖或列表)作為選項,這些選項顯示前會按照不區分大小寫的方法排好序。

除了用鼠標選擇列表中的選項外,還可以通過鍵盤選擇,根據鍵盤的字符去選擇。

 

import easygui as g

choices=["願意","不願意","等你有錢了願意"]
reply=g.choicebox("你願意嫁給我嗎?",choices=choices)

 

 

 

 7.2 multchoicebox ()

multchoicebox(msg='Pick as many items as you like.', title=' ', choices=(), **kwargs) # 返回值 一個列表。雙擊列表中的選項返回空列表,必須通過“OK”按鈕選擇

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

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

 

import easygui as g
choices=["北京","天津","上海"]
g.multchoicebox("你喜歡哪個城市?",choices=choices)

 

 

  8:用戶輸入組件

 8.1 enterbox()

enterbox(msg='Enter something.', title=' ', default='', strip=True, image=None, root=None) #返回值為用戶輸入的字符串

enterbox() 為用戶提供一個最簡單的輸入框,返回值為用戶輸入的字符串。默認返回的值會自動去除首尾的空格,如果需要保留首尾空格的話請設置參數 strip=False

 

8.2 integerbox()

integerbox(msg='', title=' ', default='', lowerbound=0, upperbound=99, image=None, root=None, **invalidKeywordArguments) #返回值為用戶輸入的數字

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

 

 8.3 multenterbox()

multenterbox(msg='Fill in values for the fields.', title=' ', fields=(), values=()) #返回一個列表,列表內容是每個輸入欄中輸入的內容
import easygui as g
g.multenterbox("請輸入以下個人信息","個人信息",["姓名","性別","年齡"])

 

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

   如果用戶輸入的值比選項少的話,則返回列表中的值用空字符串填充用戶為輸入的選項。

    如果用戶輸入的值比選項多的話,則返回的列表中的值將截斷為選項的數量。

    如果用戶取消操作,則返回域中的列表的值或者None值。

 

9:密碼組件

9.1 passwordbox()

passwordbox(msg='Enter your password.', title=' ', default='', image=None, root=None) #返回值 輸入的密碼內容

 

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

 9.2 multpasswordbox()

multpasswordbox(msg='Fill in values for the fields.', title=' ', fields=(), values=()) #返回值 一個列表,各個輸入框的內容

 

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

import easygui as g
g.multpasswordbox(fields=["用戶名","密碼"])

 

 

10:顯示文本組件

 10.1 textbox

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

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

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

import easygui as g

str1="""1:人之初,性本善。性相近,習相遠
2:苟不教,性乃遷。教之道,貴以專
3:昔孟母,擇鄰處。子不學,斷機杼
4:竇燕山,有義方。教五子,名俱揚"""
g.textbox(text=str1)

 

 10.2 codebox()

 

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

 

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

 

11:目錄與文件

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

11.1 diropenbox()

diropenbox(msg=None, title=None, default=None) #返回用戶選擇的目錄名(帶完整路徑哦),如果用戶選擇“Cancel”則返回 None。 
default 參數用於設置默認的打開目錄(請確保設置的目錄已存在)
g.diropenbox("我是目錄框","目錄選擇","C:\\Python33\\Tools")

 

 

11.2 fileopenbox()

fileopenbox(msg=None, title=None, default='*', filetypes=None)  #返回用戶選擇的文件名(帶完整路徑哦),如果用戶選擇Cancel;則返回 None。
g.fileopenbox("我是文件選擇框","文件選擇","*.xls")

 

關於 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"]])

 

11.3 filesavebox()

filesavebox(msg=None, title=None, default='', filetypes=None) #選擇文件需要保存的路徑(帶完整路徑哦),如果用戶選擇Cancel則返回 None

 

 

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

filetypes 參數的設置方法請參考上邊

 

12:記住用戶的設置

 

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

 

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

為了記住某些設置,你的應用程序必須定義一個類(暫時稱之為設置類,盡管你隨意地使用你想要的名稱設置它)繼承自 EgStore 類。

 

然后你的應用程序必須創建一個該類的對象(暫時稱之為設置對象)。

 

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

 

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

下面是創建一個"設置"類的例子:

#-----------------------------------------------------------------------
# create "settings", a persistent Settings object
# Note that the "filename" argument is required.
# The directory for the persistent file must already exist.
#-----------------------------------------------------------------------
settingsFilename = os.path.join("C:", "FishCApp", "settings.txt")  # Windows example
settings = Settings(settingsFilename)
# we initialize the "user" and "server" variables
# In a real application, we'd probably have the user enter them via enterbox
user    = "奧巴馬"
server  = "白宮"

# we save the variables as attributes of the "settings" object
settings.userId = user
settings.targetServer = server
settings.store()    # persist the settings

# run code that gets a new value for userId
# then persist the settings with the new value
user    = "小甲魚"
settings.userId = user
settings.store()

 

 

13:捕獲異常

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

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

import easygui as g
try:
        print('I Love FishC.com!')
        int('FISHC') # 這里會產生異常
except:
        g.exceptionbox()

 


免責聲明!

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



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