零基礎學習python_easygui(35課)

来源:http://www.cnblogs.com/leixiaobai/archive/2017/11/13/7813416.html
-Advertisement-
Play Games

今天學習的內容我覺得還是很有意思的,當然我主要也是從這個網址學的:http://bbs.fishc.com/thread-46069-1-1.html,大家可以直接看這個網址進行學習,當然也可以看看我的總結,嘻嘻^-^ 這裡就不講解安裝的方法了吧,也比較簡單,大家可以看剛剛那個網址或者百度安裝。 1 ...


  今天學習的內容我覺得還是很有意思的,當然我主要也是從這個網址學的: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 eg
eg.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 eg
def box():
    if eg.ccbox():
        pass
    else:
        return
box()

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

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

import easygui as eg
import sys

if 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 eg

msg = "你喜歡什麼呢?"
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 eg
eg.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 eg
eg.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 eg
eg.enterbox("請說出你愛的人",title='大膽的說吧,放心我聽不到的!')

 

 

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

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

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

 

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

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

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

 

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

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

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

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

代碼如下:

import easygui as eg

msg = '[*真實姓名]為必填項。\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 eg
msg ="登錄"
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 eg
import os

msg = "你的選擇"
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 eg
import os

msg = "你的選擇"
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-8
import os
import easygui as eg

def 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 lines


def 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 eg

try:
    int('Exception')
except:
    eg.exceptionbox('int類型數據轉換錯誤!請檢查您的數據類型!')

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 之前寫了一個功能性的文件上傳asp.net core的小程式,加上點七七八八的東西,勉強能夠應付了,打算學習一下微軟的官方.NET CORE微服務示例 "https://github.com/dotnet architecture/eShopOnContainers" 。這個例子很全面地展現了微服務 ...
  • 一、值參數 未用ref或out修飾符聲明的參數為值參數。 使用值參數,通過將實參的值複製到形參的方式,把數據傳遞到方法。方法被調用時,系統做如下操作。 在棧中為形參分配空間。 複製實參到形參。 值參數的實參不一定是變數。它可以是任何能計算成相應數據類型的表達式。 看一個例子: 下麵來調用方法 在把變 ...
  • 一、莊贏會員管理系統是個什麼樣的系統? 莊贏會員管理系統主是幫助莊家管理會員。 二、現在莊家運營的模式是什麼? 莊家運營網站的程式和資料庫都在上家的伺服器上,程式和資料庫都是由上家進行維護的,莊家只有一個管理後臺,說白了玩家的所有數據包括網站的所有數據都不在莊家自己手裡,莊家自然是不放心了。 三、目 ...
  • 最近的項目在做socket通信報文解析的時候,用到了結構體與位元組數組的轉換;由於客戶端採用C++開發,服務端採用C#開發,所以雙方必須保證各自定義結構體成員類型和長度一致才能保證報文解析的正確性,這一點非常重要。 首先是結構體定義,一些基本的數據類型,C#與C++都是可以匹配的: 一、首先是 [St ...
  • 1 package kk; public class circle { private double radius; // 構造方法,有參構造 public circle(double radius) { this.radius = radius; } //方法的重載,參數不同 ... ...
  • 這裡有dao、service和Servlet三個地方 通過配過文件xml生成對象,並註入對象類型的屬性,降低耦合 dao文件代碼: service文件代碼:(提供setter方法,xml文件可通過這種方法配置) xml文件代碼: Servlet類文件可以繞開dao的文件,直接使用service即可 ...
  • 有時候,打開別人的開發環境中導過來的項目的JSP文件,會出現“Failed to create the part's controls”的錯誤! 解決的方法有: 方法1:關閉myeclipse的jsp設計視圖,window -> perferences -> General -> editors - ...
  • ecs_account_log:賬戶變動日誌(註冊用戶充值、支付等記錄信息) ecs_ad:廣告表 ecs_admin_action:管理員許可權表(定義了128項功能操作) ecs_admin_log:管理員操作日誌表 ecs_admin_message:管理員留言表 ecs_admin_user: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...