溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

詳談Python圖形用戶(hù)界GUI(下篇)

發(fā)布時(shí)間:2021-06-15 16:27:26 來(lái)源:億速云 閱讀:202 作者:chen 欄目:編程語(yǔ)言

上篇文章我們主要介紹了tkinter的安裝、基本部件、下拉菜單、畫(huà)布等內(nèi)容,詳談Python圖形用戶(hù)界GUI(上篇),這篇文章緊接著上篇文章繼續(xù)圍繞tkinter知識(shí)進(jìn)行展開(kāi)。

本篇內(nèi)容介紹了“詳談Python圖形用戶(hù)界GUI(下篇)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

十、框架

又稱(chēng)窗口,它是在原先的基礎(chǔ)上又創(chuàng)建一個(gè)窗口,一般課用于多個(gè)窗戶(hù)交互,如聊天,打游戲,我們來(lái)看下:

fm = tk.Frame(root)  #在root上創(chuàng)建一個(gè)frame fm.pack() #添加進(jìn)去   #在剛剛創(chuàng)建的frame上創(chuàng)建兩個(gè)frame f1= tk.Frame(fm) f2= tk.Frame(fm)   #添加部件 f1.pack() f2.pack()  分別給兩個(gè)frame添加兩個(gè)部件并且顏色不同,以便于區(qū)分 tk.Label(f1, text='標(biāo)簽一', bg='green').pack() tk.Button(f1, text='按鈕一', bg='green').pack() tk.Label(f2, text='標(biāo)簽二', bg='red').pack() tk.Button(f2, text='按鈕二', bg='red').pack()

 詳談Python圖形用戶(hù)界GUI(下篇)

我們可以簡(jiǎn)單的理解為在主窗口中放置了一個(gè)父窗口,然后這個(gè)父窗口又增添了兩個(gè)子窗口,每個(gè)子窗口都創(chuàng)建了兩個(gè)部件。這個(gè)部件在我們進(jìn)行交互時(shí)還是挺有用的。

十一、彈窗,輸入

1.messagebox

接下來(lái)我們要說(shuō)的就是彈窗了,我們一般需要提示的地方都需要窗口,還有確認(rèn)返回什么的,下面來(lái)看看:

要想正常使用這些功能,我們需要先引入一個(gè)模塊messagebox(消息盒子),彈窗我們可以把它分為以下幾種:

注意先必須導(dǎo)入messagebox:

from tkinter  import messagebox

1.提示信息

messagebox.showinfo(title='提示',message='你需要這么做')

2.警告

messagebox.showwarning(title='警告',message='你不能這么做')

3.錯(cuò)誤

messagebox.showerror(title='錯(cuò)誤',message='你做錯(cuò)了')

前面幾個(gè)都是提示彈窗,下面介紹集中與用戶(hù)交互,可以讓用戶(hù)選擇的彈窗:

4.詢(xún)問(wèn)選擇

messagebox.askquestion(title='選擇',message='你是否這樣做')

5.確定或取消

messagebox.askokcancel(title='選擇',message='你是否這樣做')

6.是,否

messagebox.askyesno(title='選擇',message='你是否這樣做')

7.重試,取消

messagebox.askretrycancel(title='選擇',message='你是否這樣做')

若是你想把這所有的類(lèi)型集中到一個(gè)函數(shù)中設(shè)置了,也有,它就是_show()函數(shù),用法如下:

messagebox._show函數(shù)的控制參數(shù): default         消息框按鈕 icon            消息框圖標(biāo) message        消息框所顯示的消息 parent          消息框的父組件 title           標(biāo)題 type            類(lèi)型

2.simpledialog

為了提高用戶(hù)的交互,我們需要設(shè)置一些方框供用戶(hù)選擇,simpledialog是你必不可少的,來(lái)看下:

導(dǎo)入模塊:

from tkinter import simpledialog

simpledialog提供三種類(lèi)型輸入,即字符串 整數(shù) 浮點(diǎn)。我們來(lái)寫(xiě)下:

simpledialog.askinteger(title='顯示',prompt='輸入',initialvalue='12')

總體來(lái)說(shuō)相當(dāng)簡(jiǎn)單,沒(méi)什么可說(shuō)的。

十二、文件對(duì)話框

用于打開(kāi)文件對(duì)話框,選擇文件或者文件夾,下面看看它有哪些用法吧:

首先我們先導(dǎo)入選擇文件模塊:

from tkinter import filedialog

1.返回文件名

filedialog.askopenfilename()

2.返回文件流對(duì)象

filedialog.askopenfile()

3.返回多個(gè)文件流對(duì)象

filedialog.askopenfiles()

4.返回多個(gè)文件名對(duì)象

filedialog.askopenfilenames()

5.返回目錄名

filedialog.askdirectory()

6.返回文件流并創(chuàng)建文件

filedialog.asksaveasfile()

7.返回文件名保存

filedialog.asksaveasfilename()

8.打開(kāi)文件對(duì)話框顯示當(dāng)前目錄所有文件文件夾

filedialog.LoadFileDialog(root).go()

9.保存文件對(duì)話框

filedialog.SaveFileDialog(root).go()

十三、樹(shù)型列表

它就好像一棵樹(shù)一樣,將它的子元素包裹在里面,同樣它的模塊也是在ttk里面,請(qǐng)看:

from tkinter import ttk t = ttk.Treeview(root)  #加載樹(shù)型控件 t.pack() n=t.insert('',0,text="hello",values=("1")) #插入一個(gè)值到控件中 n1=t.insert(n,1,text="cq",values=("2"))  #插入一個(gè)屬于它的子元素也就是二級(jí)元素 n2=t.insert(n,1,text="sc",values=("2")) t.insert(n1,2,text='fd',values=("3"))  #插入一個(gè)屬于它的三級(jí)元素 t.insert(n1,2,text='we',values=("3")) t.insert(n2,2,text='1',values=("3")) t.insert(n2,2,text='2',values=("3"))

 詳談Python圖形用戶(hù)界GUI(下篇)

就這樣可以一直循環(huán)插入,這樣就方便咱們列出大型項(xiàng)目的目錄了,你比如說(shuō)磁盤(pán)目錄就可以用這個(gè)。

十四、顏色對(duì)話框

選擇顏色時(shí)使用,豐富的色彩可以讓你處理圖片畫(huà)圖,非常好用:

from tkinter  import colorchooser #導(dǎo)入模塊 colorchooser.askcolor() #打開(kāi)顏色選擇對(duì)話框

十五、組件排版

基本上所有的組件我們都介紹完了,相信大家通過(guò)對(duì)這章的學(xué)習(xí)應(yīng)該對(duì)tkinter有了個(gè)深入的了解。

除了組件的用法之外,最重要的莫過(guò)于組件的排版了,下面我們來(lái)說(shuō)一下,如何讓組件放對(duì)位置。

組件有三種排列方式:pack grid place.

1.pack

它是按照上下左右的方式來(lái)排列的,例如:

tk.Label(root, text='1').pack(side='top')#上 tk.Label(root, text='2').pack(side='bottom')#下 tk.Label(root, text='3').pack(side='left')#左 tk.Label(root, text='4').pack(side='right')#右

而且它還可以設(shè)置組件填充方式,如:

tk.Label(root, text='1').pack(fill='y')    #垂直填充 tk.Label(root, text='2').pack(fill='x')    #水平填充 tk.Label(root, text='3').pack(fill='both') #水平垂直填充 tk.Label(root, text='4').pack(fill='none') #不填

2.grid

它是一種網(wǎng)格布局,劃分為幾行幾列的樣子。所以它一般就是設(shè)置行,列。例如:

tk.Label(root, text='1').grid(row=3, column=3)#第三行第三列插入一個(gè)1

還可以設(shè)置組件所跨越的行列數(shù)和內(nèi)外部間隔距離:

tk.Label(root, text='1').grid(row=3, column=3,rowspan=3,ipadx=6)#跨3行單元格距離6 tk.Label(root, text='2').grid(row=4, column=4,columnspa=3,pady=8)#跨3列邊框距離

3.place

這是一種最簡(jiǎn)單靈活的布局,使用組件坐標(biāo)來(lái)放置組件的位置。

tk.Label(root,text='43').place(x=100,y=200,width=10,height=5) #距離左邊100,上邊200寬高為10X5

十六、鼠標(biāo)鍵盤(pán)事件

講完布局接著該說(shuō)說(shuō)最重要的東西了,綁定事件,沒(méi)有這個(gè)東西組件都是沒(méi)有靈魂的。我總結(jié)了以下幾點(diǎn):

bind(sequence,func,add) bind_class(className,sequence,func,add) bind_all(sequence,func,add) 事件參數(shù): sequence      所綁定的事件;如&lsquo;<Control-n>&rsquo;寓意為ctrl+N鍵 或者<Button-3> 右鍵 func             所綁定的事件處理函數(shù); add              可選參數(shù),為空字符或&lsquo;+&rsquo;; className       所綁定的類(lèi);   鼠標(biāo)鍵盤(pán)事件     <Button-1>            鼠標(biāo)左鍵按下,2表示中鍵,3表示右鍵;     <ButtonPress-1>        同上;     <ButtonRelease-1>  鼠標(biāo)左鍵釋放;     <B1-Motion>         按住鼠標(biāo)左鍵移動(dòng);     <Double-Button-1>   雙擊左鍵;     <Enter>             鼠標(biāo)指針進(jìn)入某一組件區(qū)域;     <Leave>             鼠標(biāo)指針離開(kāi)某一組件區(qū)域;     <MouseWheel>       滾動(dòng)滾輪;     <KeyPress-A>     按下A鍵,A可用其它鍵替代;     <Alt-KeyPress-A>    同時(shí)按下alt和A;alt可用ctrl和shift替代;     <Double-KeyPress-A>  快速按兩下A;     <Lock-KeyPress-A>   大寫(xiě)狀態(tài)下按A;          窗口事件     Activate         當(dāng)組件由不可用轉(zhuǎn)為可用時(shí)觸發(fā);     Configure        當(dāng)組件大小改變時(shí)觸發(fā);     Deactivate      當(dāng)組件由可用轉(zhuǎn)變?yōu)椴豢捎脮r(shí)觸發(fā);     Destroy          當(dāng)組件被銷(xiāo)毀時(shí)觸發(fā);     Expose          當(dāng)組件從被遮擋狀態(tài)中暴露出來(lái)時(shí)觸發(fā);     Unmap        當(dāng)組件由顯示狀態(tài)變?yōu)殡[藏狀態(tài)時(shí)觸發(fā);     Map              當(dāng)組件由隱藏狀態(tài)變?yōu)轱@示狀態(tài)時(shí)觸發(fā);     FocusIn            當(dāng)組件獲得焦點(diǎn)時(shí)觸發(fā);     FocusOut        當(dāng)組件失去焦點(diǎn)時(shí)觸發(fā);     Property         當(dāng)窗體的屬性被刪除或改變時(shí)觸發(fā);     Visibility       當(dāng)組件變?yōu)榭梢暊顟B(tài)時(shí)觸發(fā);  響應(yīng)事件 event對(duì)象(def function(event)):     char          按鍵字符,僅對(duì)鍵盤(pán)事件有效;     keycode      按鍵名,僅對(duì)鍵盤(pán)事件有效;     keysym       按鍵編碼,僅對(duì)鍵盤(pán)事件有效;     num          鼠標(biāo)按鍵,僅對(duì)鼠標(biāo)事件有效;     type             所觸發(fā)的事件類(lèi)型;     widget           引起事件的組件;     width,heigh  組件改變后的大小,僅Configure有效;     x,y          鼠標(biāo)當(dāng)前位置,相對(duì)于窗口;     x_root,y_root 鼠標(biāo)當(dāng)前位置,相對(duì)于整個(gè)屏

“詳談Python圖形用戶(hù)界GUI(下篇)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI