【python35.1--EasyGui界面】


一、什么是EasyGUI

EasyGUI是python中一個非常簡單的GUI編程模塊,不同於其他的GUI生成器,它不是事件驅動的,相反,所有的GUI交互都是通過簡地函數調用就可以實現(意思是:函數調用就可以實現GUI)

EasyGUI為用戶提供了簡單的GUI交互接口,不需要程序員知道任何相關tkinter,框架,部件,回調或lambda的任何細節

EasyGUI可以很好兼容python 2 和 3,並且不存在任何依賴關系

EasyGUI是運行在Tkinter上並擁有自身的時間循環,而IDLE也是Tkinter寫的一個應用程序並也擁有自身的時間循環。因此到那個兩者同時運行的時候,有可能會發生沖突,且帶來不可預測的結果。因此如果你發現你的EasyGUI程序有這樣的問題。請嘗試在idle外去運行

你的程序

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

 

import easygui as g

import sys

while 1:
    g.msgbox('嗨,歡迎進入第一個界面小游戲!')
    msg = '請問你希望在塵封的工作室學習到什么知識呢?'
    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

三、倒入EasyGUI

使用EasyGUI這個模塊之前,必須先導入

1、最簡單的導入方式:

import EasyGUI

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

easygui.msgbox()

2、選擇導入整個EasyGUI包

from easygui import *

使用這種形式導入的話,那么使用EasyGUI的函數的時候,可以直接寫

msgbox()

3、導入as命名空間

import easygui as g

使用這種形式導入的話,調用EasyGUI函數,可以這樣寫

g.msgbox()

四、EasyGUI函數的默認參數

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

按照這個規律,在某種情況下這可能不是理想的布局設計(比如當對話框在獲取目錄或文件名的時候會選擇忽略消息參數)但保持這種一致性且貫穿於所有的窗口部件是更為得體的考慮

絕大部分的EasyGUI函數都有默認參數,幾乎所有的組件都會顯示消息主體和對話框標題

標題默認是空字符串,消息主體通常有一個簡單的默認值

比如msgbox()函數標題部分的參數是可選的,因此你調用msgbox()的時候只需要指定一個消息參數即可,例如:

>>> import easygui as g
>>> g.msgbox('厲害了')

----只有消息體,沒有標題

當然也可以指定消息題和標題

>>> import easygui as g
>>> g.msgbox('厲害了','我的國')

---既有消息題,也有標題

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

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

import easygui as g
import sys
if g.ccbox():
    pass         # 用戶選擇繼續
else:
    sys.exit(0)  #用戶選擇取消

 五、使用關鍵字參數調用EasyGUI的函數

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

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

choices = ['111','222','333']
reply = g.choicebox('你想選擇那個參數',choices=choices)

六、使用按鈕組件

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

6.1、msgbox()

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

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

重寫“OK”按鈕最簡單的方法是使用關鍵字參數:

>>> import easygui as g
>>> g.msgbox('我一定要學會編程',ok_button="加油!")

6.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按鍵

>>> g.ccbox('你的選擇是','python')
True

6.3、yxbox()

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”的快捷鍵使用

>>> g.ynbox('你的選擇是','python')

6.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()返回按鈕的文本內容

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

>>> choices = ['草莓','香蕉','山竹']
>>> g.buttonbox('你喜歡哪種水果','請選擇',choices)

 

 6.5、indexbox()

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

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

>>> g.indexbox('你一定要學會編程嗎?',choices=['yes','no'])
0

6.6、boolbox()

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

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

>>> g.boolbox('你一定要學會編程嗎?',choices=['yes','no'])
True

七、如何在buttonbox()里面顯示圖片

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

g.buttonbox('我帥不帥','塵封最帥',choices=('','很帥','超級帥'),image='/Users/yixia/Desktop/111.png')

八、為用戶提供一系列選項組件

8.1、choicebox()

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

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

choicebox()為用戶提供一個可選擇的列表,使用序列(元祖或列表)作為選項,這些選項會按照字母進行排序

8.2、multchoicebox()

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

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

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

九、讓用戶輸入消息的組件

9.1、enterbox()

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

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

默認返回的字符串時去除首位的空格,如果需要收尾的空格,函數寫上strip=False

>>> g.enterbox('一天最開心的事情是什么?')
'擼代碼'

>>> g.enterbox('一天最開心的事情是什么?',strip=False)
'   敲代碼   '

 

9.2、integerbox()

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

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

如果不輸入lowerbound和upperbound,則默認范圍是0~99

g.integerbox('塵封幸運數值是那個數字呢?')

只能輸入整形數字

 

>>> g.integerbox('塵封幸運數值是那個數字呢?',lowerbound=0,upperbound=1000)
999

 

9.3、multenterbox()

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

multenterbox()為用戶提供多個簡單的輸入框,要注意以下幾點:
--如果用戶輸入的值比選項少的話,則返回列表中的值用空字符穿填充用戶為輸入的選項

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

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

十、讓用戶輸入密碼

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

10.1、passwordbox()

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

 

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

>>> g.passwordbox('請輸入密碼:')
'123456'

10.2、multpasswordbox()

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

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

十一、顯示文本

11.1、textbox()

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

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

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

>>> g.textbox('文件內容')

11.2、codebox()

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

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

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

>>> g.codebox('msg')

十二、目錄與文件

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

12.1、diropenbox()

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

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

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

>>> g.diropenbox()
'/Users/yixia/Desktop/項目/關注限制白名單/關注-php測試腳本'

12.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 則表示可以同時選擇多個文件。

12.3、filesavebox()

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

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

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

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

十三、記住用戶的設置

13.1、EgStore

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

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

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

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

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

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

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

from easygui import EgStore
import os

#定義一個Settings類繼承EgStore
class Settings(EgStore):

    def __init__(self,filename): #需要指定文件名

        #需要指定記住的屬性名稱
        self.author = ""
        self.book = ""

        #必須執行下面的語句
        self.filename = filename
        self.restore()

#創建Settings實例化對象"settings"
settingsfilename = os.path.join('/Users/yixia/PycharmProjects/python/num38/','settings.txt')
settings = Settings(settingsfilename)

author = '塵封'
book = '《機器語言的魅力》'

#將上面兩個變量的值保存到"settings"對象中
settings.author = author
settings.book = book
settings.store()
print("\n保存完畢")

十四、抓獲異常

14.1、exceptionbox()

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

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

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

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

from easygui import exceptionbox
try:
    print('I love write python')
    int('FISHC')  # 這里會產生異常
except:
    exceptionbox()

 


免責聲明!

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



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