零基礎學習python_easygui(35課),python_easygui35

來源:互聯網
上載者:User

零基礎學習python_easygui(35課),python_easygui35

  今天學習的內容我覺得還是很有意思的,當然我主要也是從這個網址學的:http://bbs.fishc.com/thread-46069-1-1.html,大家可以直接看這個網址進行學習,當然也可以看看我的總結,嘻嘻^-^

  這裡就不講解安裝的方法了吧,也比較簡單,大家可以看剛剛那個網址或者百度安裝。

1、匯入模組的方式,第一種 import easygui as eg,推薦使用這種,起一個模組的別名,調用也方便也不會導致衝突;第二種是from easygui import *,這種的話不太建議,因為全部匯入後模組的方法可能會與變數名起衝突。

 

2、msgbox(msg='(要列印的值)', title=' ', ok_button='OK', image=None, root=None)

一般的程式第一件事情就是列印hello world,我也不例外,讓我們來列印一下hello world吧!

import easygui as egeg.msgbox('hello world')

你看就彈出下面的介面出來了,第一次看挺神奇的,嘻嘻。

對於所有的easygui的所有函數,前兩個參數是訊息和標題,剛剛我們沒有設定標題,現在我們來試下。

eg.msgbox('hello my world','我是標題,哈哈哈',ok_button='加油啊!')

 

看上面一行是不是多了標題呢?

 

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

在各類按鈕組件中,預設的訊息是“Shall I continue”,所以可以不帶任何參數去調用,看下面的例子:

import easygui as egdef box():    if eg.ccbox():        pass    else:        returnbox()

如果你看了魚C的那個網址的話,它會報"return outside function",這裡要注意下, return是返回一個方法的值,如果你沒有定義一個方法卻用return去返回的話這就坑爹了。看結果如下,點擊continue就返回True,點擊Cancel就返回Flase。

當然了,你也可以在ccbox寫內容,看下面的例子:

import easygui as egimport sysif eg.ccbox("你想要玩啥呢?","選擇",('玩遊戲','玩泥巴!')):    eg.msgbox("玩毛,走吧!")else:    sys.exit(0)

結果如下,這裡說一下sys.exit(0)和sys.exit()還有sys.exit(1)、sys._exit(),sys._exit()會直接將python程式終止,之後的所有代碼都不會繼續執行;sys.exit()會引發一個異常:SystemExit,如果這個異常沒有被捕獲,那麼python解譯器將會退出。如果有捕獲此異常的代碼,那麼這些代碼還是會執行。捕獲這個異常可以做一些額外的清理工作。0為正常退出,其他數值(1-127)為不正常,可拋例外狀況事件供捕獲。

 

4、choicebox(msg='Pick something.', title=' ', choices=())  選擇的列表

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

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

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

  • 例如當按下鍵盤上的"g"鍵,將會選中的第一個以"g"開頭的選項。
  • 再次按下"g"鍵,則會選中下一個以"g"開頭的選項。
  • 在選中最後一個以"g"開頭的選項的時候,再次按下"g"鍵將重新回到在列表的開頭的第一個以"g"開頭的選項。
  • 如果選項中沒有以"g"開頭的,則會選中字元排序在"g"之前("f")的那個字元開頭的選項。
  • 如果選項中沒有字元的排序在"g"之前的,那麼在列表中第一個元素將會被選中。  
import easygui as egmsg = "你喜歡什麼呢?"title = "my love"choice_list = ["打球","看電影","玩手機","約會"]result = eg.choicebox(msg,choices=choice_list)

顯示結果如下:

 5、ynbox()

這個函數和ccbox()功能一樣,額,就不說了

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

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

當使用者點擊任意一個按鈕的時候,buttonbox() 返回按鈕的常值內容。如果使用者取消取消或者關閉視窗,那麼會返回預設選項(第一個選項)(我試了下怎麼也關不掉。。。)。請看例子:

import easygui as egeg.buttonbox(msg="你喜歡下面哪種水果?",title="水果選擇",choices=("哈密瓜","蘋果","荔枝"))

結果如下,不知道為啥關不掉,只能選擇一個:

 

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

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

你看傳回值不一樣而已,其餘一樣。

 

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

如果第一個按鈕被選中則返回 1,否則返回 0。結果看看下面的例子就可以了

 

9、圖片調用,當你調用一個 buttonbox 函數(例如 msgbox(), ynbox(), indexbox() 等等)的時候,

你還可以為關鍵字參數 image 賦值,這是設定一個 .gif 格式的映像(注意僅支援 GIF 格式哦):

import easygui as egeg.buttonbox('請問你是誰?',image='como.jpg',choices=('左','中','右'))

 

 

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

multchoicebox() 函數也是提供一個可選擇的列表,與 choicebox() 不同的是,multchoicebox() 支援使用者選擇 0 個,1 個或者同時選擇多個選項。 
multchoicebox() 函數也是使用序列(元祖或列表)作為選項,這些選項顯示前會按照不區分大小寫方法排好序。

大家可以看下這個可以全選也可以不選

 

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

enterbox() 為使用者提供一個最簡單的輸入框,傳回值為使用者輸入的字串。

預設返回的值會自動去除首尾的空格,如果需要保留首尾空格的話請設定參數 strip=False。

import easygui as egeg.enterbox("請說出你愛的人",title='大膽的說吧,放心我聽不到的!')

 

 

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

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

import easygui as egeg.integerbox("請輸入你對自己的滿意度!",lowerbound=-100,upperbound=100)

 

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

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

import easygui as egeg.passwordbox('請輸入密碼')

 

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

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

  • 如果使用者輸入的值比選項少的話,則返回列表中的值用Null 字元串填充使用者為輸入的選項。
  • 如果使用者輸入的值比選項多的話,則返回的列表中的值將截斷為選項的數量。
  • 如果使用者取消操作,則返回域中的列表的值或者None值

 下面來做一個題目,就是達到下面這張圖的效果,帶*必填,錯了提示使用者哪裡沒填寫,直到使用者取消或者填寫了必填項:

代碼如下:

import easygui as egmsg = '[*真實姓名]為必填項。\n \n [*真實姓名]為必填項。\n \n [*手機號碼]為必填項.\n \n [*E-mail]為必填項。'title = '使用者資訊填寫'field = ('*使用者名稱','*真實姓名','固定電話','*手機號碼','QQ','*E-mail')input_value = []input_value = eg.multenterbox(msg,title,field)while True:    if input_value == None:        break    errmsg = ""    for i in range(len(input_value)):        option = field[i].strip()        if option[0] == "*" and input_value[i].strip() =="":            errmsg += ("【%s】為必填項\n"%field[i])    eg.msgbox(errmsg)    if errmsg == "":        break    input_value = eg.multenterbox(msg,title,field)print("您填寫的資料如下:%s" %str(input_value))

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

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

import easygui as egmsg ="登入"eg.multpasswordbox(msg,fields=('使用者名稱','密碼'))

下面是結果圖,跟上面的multenterbox() 基本一致。

 

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

textbox() 函數預設會以比例字型(參數 codebox=1 設定為等寬字型)來顯示常值內容(會自動換行哦),這個函數適合用於顯示一般的書面文字。 
註:text 參數(第三個參數)可以是字串類型,清單類型,或者元祖類型。

 

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

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

 

18、diropenbox(msg=None, title=None, default=None

diropenbox()函數提供了一個對話方塊,返回使用者選擇的目錄名(帶完整路徑喔),如果使用者選擇“Cancel”則返回None。

default參數用於設定預設的開啟目錄(請確保目錄已存在)

 這個大家敲一下命令就知道了,再學一下開啟檔案等下做一下相關的題目就知道了。

 

19、fileopenbox(msg=None, title=None, default='*',filetypes=None

fileopenbox()函數提供一個對話方塊,返回使用者選擇的檔案名稱(帶完整路徑喔),如果使用者選擇“Cancel”則返回None。

關於default參數的設定方法:

  • default參數指定一個預設路徑,通常包含一個或多個萬用字元。
  • 如果設定了default參數,fileopenbox()顯示預設的檔案路徑和格式。
  • default預設的參數是'*',即匹配所有格式的檔案。

舉個例子:

  defalut="d:/liu/hello*.py"即顯示D盤liu檔案夾下所有名字以hello開頭的python檔案

關於filetypes參數的設定方法:

  • 可以包含檔案掩碼的字串列表,例如:filetypes = ["*.txt"]
  • 可以是字串列表,列表的最後一項字串是檔案類型的描述,例如:filetypes = ["*.css",["*.html","HTML files"]]

 

20、filesavebox(msg=None, title=None, default='',filetypes=None

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

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

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

 

看我這麼多,給大家個題目做做吧。

題目:1、提供一個檔案夾瀏覽器,讓使用者選擇需要開啟的文字檔,開啟並顯示檔案內容,且標題為當前檔案的名字。

自己動手後再看如下代碼:

import easygui as egimport osmsg = "你的選擇"defaluts = "D:\\*.txt"open_file = eg.fileopenbox(msg,default=defaluts)with open(open_file) as f:    title = os.path.basename(open_file)    msg1 = "檔案【%s】內容是:" % title    text = f.read()        eg.textbox(msg,title,text)

 2、結合上一題再深入一點,當使用者點擊“Ok”按鈕的時候,比較當前檔案是否修改過,如果修改過,則提示“覆蓋儲存”、“放棄儲存”或“另存新檔…”,並實現相應的功能。 

代碼如下:

 import easygui as egimport osmsg = "你的選擇"defaluts = "D:\\*.txt"open_file = eg.fileopenbox(msg,default=defaluts)with open(open_file) as f:    title = os.path.basename(open_file)    msg1 = "檔案【%s】內容是:" % title    old_text = f.read()        new_text = eg.textbox(msg,title,old_text)if old_text != new_text[:-1]:    msg = '檔案修改過,你想進行哪種操作?'    choice = ('覆蓋儲存','放棄儲存','另存新檔')    choice_last = eg.buttonbox(msg=msg,choices=choice)    if choice_last == '覆蓋儲存':        with open(open_file,'w') as f:            f.write(new_text[:-1])                elif choice_last == '另存新檔':        new_file = eg.filesavebox()        if os.path.splitext(new_file)[1] != '.txt':            new_file += '.txt'        with open(new_file,'w') as f:            f.write(new_text[:-1])                     else:        pass

 

3、寫一個程式統計你當前代碼總量的和,並顯示離十萬行代碼量還有多遠

  • 要求一:遞迴搜尋各個檔案
  • 要求二:顯示各個類型的源檔案和原始碼數量
  • 要求三:顯示總行數與百分比

 真心覺得這道題目不錯,大家可以仔細琢磨琢磨,嘻嘻

#coding=utf-8import osimport easygui as egdef show_result(start_dir):    lines = 0    total = 0    text = ""    for i in source_list:        lines = source_list[i]        total += lines        text += "【%s】源檔案 %d 個,源檔案 %d 行\n" %(i,file_list[i],lines)    title = '統計結果'    msg = '你目前共累計編寫了%d 行代碼,完成進度:%.2f %%\n ,離10萬行代碼還差 %d 行,請繼續努力!'%(total,total/1000,10000-total)    eg.textbox(msg,title,text)        def calc_code(file_name):    lines = 0    with open(file_name) as f:        print('正在分析檔案:%s ...'%file_name)        try:            for each_line in f:                lines += 1        except UnicodeDecodeError:            pass #可能遇到格式不相容的檔案,這裡忽略掉    return linesdef search_file(file_path):    os.chdir(file_path)        for each_file in os.listdir(os.curdir):        ext = os.path.splitext(each_file)[1]        if ext in target:            lines = calc_code(each_file)    #統計行數            #還記得異常的用法嗎?如果字典中不存在,拋出KeyError,則添加字典鍵            #統計檔案數            try:                file_list[ext] += 1            except KeyError:                file_list[ext] = 1                            #統計原始碼行數            try:                source_list[ext] += lines            except KeyError:                source_list[ext] = lines        if os.path.isdir(each_file):            search_file(each_file) #遞迴調用            os.chdir(os.pardir)   #遞迴完後返回上一級目錄    target = ['.c','.cpp','.py','.java','.pas']file_list = {}source_list = {}eg.msgbox("請開啟你存放所有代碼的檔案夾。。。統計代碼量")file_path = eg.diropenbox("請選擇你的程式碼程式庫:")search_file(file_path)show_result(file_path)

 

 21、exceptionbox 捕獲異常,這個與python代碼的捕獲異常類似 

import easygui as egtry:    int('Exception')except:    eg.exceptionbox('int類型資料轉換錯誤!請檢查您的資料類型!')

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.