久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python GUI之tkinter窗口視窗教程大集合(推薦)

瀏覽:4日期:2022-07-07 17:00:10
一、前言

由于本篇文章較長(zhǎng),所以下面給出內(nèi)容目錄方便跳轉(zhuǎn)閱讀,當(dāng)然也可以用博客頁(yè)面最右側(cè)的文章目錄導(dǎo)航欄進(jìn)行跳轉(zhuǎn)查閱。

二、Tkinter是什么

Tkinter 是使用 python 進(jìn)行窗口視窗設(shè)計(jì)的模塊。Tkinter模塊('Tk 接口')是Python的標(biāo)準(zhǔn)Tk GUI工具包的接口。作為 python 特定的GUI界面,是一個(gè)圖像的窗口,tkinter是python 自帶的,可以編輯的GUI界面,我們可以用GUI 實(shí)現(xiàn)很多直觀(guān)的功能,比如想開(kāi)發(fā)一個(gè)計(jì)算器,如果只是一個(gè)程序輸入,輸出窗口的話(huà),是沒(méi)用用戶(hù)體驗(yàn)的。所有開(kāi)發(fā)一個(gè)圖像化的小窗口,就是必要的。

對(duì)于稍有GUI編程經(jīng)驗(yàn)的人來(lái)說(shuō),Python的Tkinter界面庫(kù)是非常簡(jiǎn)單的。python的GUI庫(kù)非常多,選擇Tkinter,一是最為簡(jiǎn)單,二是自帶庫(kù),不需下載安裝,隨時(shí)使用,三則是從需求出發(fā),Python作為一種腳本語(yǔ)言,一種膠水語(yǔ)言,一般不會(huì)用它來(lái)開(kāi)發(fā)復(fù)雜的桌面應(yīng)用,它并不具備這方面的優(yōu)勢(shì),使用Python,可以把它作為一個(gè)靈活的工具,而不是作為主要開(kāi)發(fā)語(yǔ)言,那么在工作中,需要制作一個(gè)小工具,肯定是需要有界面的,不僅自己用,也能分享別人使用,在這種需求下,Tkinter是足夠勝任的!

這篇文章主要做一個(gè)簡(jiǎn)單概述和實(shí)踐編程,對(duì)于從沒(méi)有接觸過(guò)GUI的新手,在腦中樹(shù)立一個(gè)基本的界面編程概念,同時(shí)自己也能學(xué)會(huì)如何簡(jiǎn)單的實(shí)現(xiàn)一些小的圖形窗口功能。

對(duì)于Tkinter編程,可以用兩個(gè)比喻來(lái)理解:

第一個(gè),作畫(huà)。我們都見(jiàn)過(guò)美術(shù)生寫(xiě)生的情景,先支一個(gè)畫(huà)架,放上畫(huà)板,蒙上畫(huà)布,構(gòu)思內(nèi)容,用鉛筆畫(huà)草圖,組織結(jié)構(gòu)和比例,調(diào)色板調(diào)色,最后畫(huà)筆勾勒。相應(yīng)的,對(duì)應(yīng)到tkinter編程,那么我們的顯示屏就是支起來(lái)的畫(huà)架,根窗體就是畫(huà)板,在tkinter中則是Toplevel,畫(huà)布就是tkinter中的容器(Frame),畫(huà)板上可以放很多張畫(huà)布(Convas),tkinter中的容器中也可以放很多個(gè)容器,繪畫(huà)中的構(gòu)圖布局則是tkinter中的布局管理器(幾何管理器),繪畫(huà)的內(nèi)容就是tkinter中的一個(gè)個(gè)小組件,一幅畫(huà)由許多元素構(gòu)成,而我們的GUI界面,就是有一個(gè)個(gè)組件拼裝起來(lái)的,它們就是widget。第二個(gè),我們小時(shí)候都玩過(guò)積木,只要發(fā)揮創(chuàng)意,相同的積木可以堆出各種造型。tkinter的組件也可以看做一個(gè)個(gè)積木,形狀或許不同,其本質(zhì)都是一樣的,就是一個(gè)積木,不管它長(zhǎng)什么樣子,它始終就是積木!所以這些小組件都有許多共性,另外,個(gè)人認(rèn)為,學(xué)習(xí)界面編程,最重要的不是一開(kāi)始學(xué)習(xí)每個(gè)積木的樣子,不是學(xué)習(xí)每個(gè)組件怎么用,而是這些組件該怎么放。初始學(xué)習(xí)中,怎么放遠(yuǎn)遠(yuǎn)比怎么用重要的多。網(wǎng)上有大量的文章資料,基本全是介紹組件怎么用的,對(duì)于怎么放,也就是tkinter中的布局管理器,都是一筆帶過(guò),這對(duì)初學(xué)者有點(diǎn)本末倒置,或許絕大部分是轉(zhuǎn)載的原因吧,極少是自己真正寫(xiě)的。組件怎么用不是最迫切的,用到的時(shí)候再去了解也不遲,邊用邊學(xué)反而更好。因此我將專(zhuān)門(mén)寫(xiě)一章,詳細(xì)介紹布局管理器的使用。

三、Tkinter 控件詳細(xì)介紹1. Tkinter 模塊元素簡(jiǎn)要說(shuō)明

Python GUI之tkinter窗口視窗教程大集合(推薦)

The Button WidgetThe Canvas WidgetThe Checkbutton WidgetThe Entry WidgetThe Frame WidgetThe Label WidgetThe LabelFrame WidgetThe Listbox WidgetThe Menu WidgetThe Menubutton WidgetThe Message WidgetThe OptionMenu WidgetThe PanedWindow WidgetThe Radiobutton WidgetThe Scale WidgetThe Scrollbar WidgetThe Spinbox WidgetThe Text WidgetThe Toplevel WidgetBasic Widget MethodsToplevel Window Methods

2. 常用窗口部件及簡(jiǎn)要說(shuō)明:

Tkinter支持16個(gè)核心的窗口部件,這個(gè)16個(gè)核心窗口部件類(lèi)簡(jiǎn)要描述如下:

Button:一個(gè)簡(jiǎn)單的按鈕,用來(lái)執(zhí)行一個(gè)命令或別的操作。

Canvas:組織圖形。這個(gè)部件可以用來(lái)繪制圖表和圖,創(chuàng)建圖形編輯器,實(shí)現(xiàn)定制窗口部件。

Checkbutton:代表一個(gè)變量,它有兩個(gè)不同的值。點(diǎn)擊這個(gè)按鈕將會(huì)在這兩個(gè)值間切換。

Entry:文本輸入域。

Frame:一個(gè)容器窗口部件。幀可以有邊框和背景,當(dāng)創(chuàng)建一個(gè)應(yīng)用程序或dialog(對(duì)話(huà))版面時(shí),幀被用來(lái)組織其它的窗口部件。

Label:顯示一個(gè)文本或圖象。

Listbox:顯示供選方案的一個(gè)列表。listbox能夠被配置來(lái)得到radiobutton或checklist的行為。

Menu:菜單條。用來(lái)實(shí)現(xiàn)下拉和彈出式菜單。

Menubutton:菜單按鈕。用來(lái)實(shí)現(xiàn)下拉式菜單。

Message:顯示一文本。類(lèi)似label窗口部件,但是能夠自動(dòng)地調(diào)整文本到給定的寬度或比率。

Radiobutton:代表一個(gè)變量,它可以有多個(gè)值中的一個(gè)。點(diǎn)擊它將為這個(gè)變量設(shè)置值,并且清除與這同一變量相關(guān)的其它radiobutton。

Scale:允許你通過(guò)滑塊來(lái)設(shè)置一數(shù)字值。

Scrollbar:為配合使用canvas, entry, listbox, and text窗口部件的標(biāo)準(zhǔn)滾動(dòng)條。

Text:格式化文本顯示。允許你用不同的樣式和屬性來(lái)顯示和編輯文本。同時(shí)支持內(nèi)嵌圖象和窗口。

Toplevel:一個(gè)容器窗口部件,作為一個(gè)單獨(dú)的、最上面的窗口顯示。

messageBox:消息框,用于顯示你應(yīng)用程序的消息框。(Python2中為tkMessagebox)

注意在Tkinter中窗口部件類(lèi)沒(méi)有分級(jí);所有的窗口部件類(lèi)在樹(shù)中都是兄弟關(guān)系。

所有這些窗口部件提供了Misc和幾何管理方法、配置管理方法和部件自己定義的另外的方法。此外,Toplevel類(lèi)也提供窗口管理接口。這意味一個(gè)典型的窗口部件類(lèi)提供了大約150種方法。

四、動(dòng)手實(shí)踐學(xué)習(xí) 1. 創(chuàng)建主窗口及Label部件(標(biāo)簽)創(chuàng)建使用

我們要學(xué)習(xí)使用上面提到的這些控件首先要?jiǎng)?chuàng)建一個(gè)主窗口,就像作畫(huà)一樣,先要架好架子和畫(huà)板,然后才能在上面放畫(huà)紙和各種繪畫(huà)元素,創(chuàng)建好主窗口才能在上面放置各種控件元素。而創(chuàng)建過(guò)程是很簡(jiǎn)單的,如下:

  示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,在圖形界面上設(shè)定標(biāo)簽l = tk.Label(window, text=’你好!this is Tkinter’, bg=’green’, font=(’Arial’, 12), width=30, height=2)# 說(shuō)明: bg為背景,font為字體,width為長(zhǎng),height為高,這里的長(zhǎng)和高是字符的長(zhǎng)和高,比如height=2,就是標(biāo)簽有2個(gè)字符這么高 # 第5步,放置標(biāo)簽l.pack() # Label內(nèi)容content區(qū)域放置位置,自動(dòng)調(diào)節(jié)尺寸# 放置lable的方法有:1)l.pack(); 2)l.place(); # 第6步,主窗口循環(huán)顯示window.mainloop()# 注意,loop因?yàn)槭茄h(huán)的意思,window.mainloop就會(huì)讓window不斷的刷新,如果沒(méi)有mainloop,就是一個(gè)靜態(tài)的window,傳入進(jìn)去的值就不會(huì)有循環(huán),mainloop就相當(dāng)于一個(gè)很大的while循環(huán),有個(gè)while,每點(diǎn)擊一次就會(huì)更新一次,所以我們必須要有循環(huán)# 所有的窗口文件都必須有類(lèi)似的mainloop函數(shù),mainloop是窗口文件的關(guān)鍵的關(guān)鍵。

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)

2. Button窗口部件

簡(jiǎn)單說(shuō)明:

Button(按鈕)部件是一個(gè)標(biāo)準(zhǔn)的Tkinter窗口部件,用來(lái)實(shí)現(xiàn)各種按鈕。按鈕能夠包含文本或圖象,并且你能夠?qū)粹o與一個(gè)Python函數(shù)或方法相關(guān)聯(lián)。當(dāng)這個(gè)按鈕被按下時(shí),Tkinter自動(dòng)調(diào)用相關(guān)聯(lián)的函數(shù)或方法。

按鈕僅能顯示一種字體,但是這個(gè)文本可以跨行。另外,這個(gè)文本中的一個(gè)字母可以有下劃線(xiàn),例如標(biāo)明一個(gè)快捷鍵。默認(rèn)情況,Tab鍵用于將焦點(diǎn)移動(dòng)到一個(gè)按鈕部件。

什么時(shí)候用按鈕部件

簡(jiǎn)言之,按鈕部件用來(lái)讓用戶(hù)說(shuō)“馬上給我執(zhí)行這個(gè)任務(wù)”,通常我們用顯示在按鈕上的文本或圖象來(lái)提示。按鈕通常用在工具條中或應(yīng)用程序窗口中,并且用來(lái)接收或忽略輸入在對(duì)話(huà)框中的數(shù)據(jù)。關(guān)于按鈕和輸入的數(shù)據(jù)的配合,可以參看Checkbutton和Radiobutton部件。

如何創(chuàng)建:

普通的按鈕很容易被創(chuàng)建,僅僅指定按鈕的內(nèi)容(文本、位圖、圖象)和一個(gè)當(dāng)按鈕被按下時(shí)的回調(diào)函數(shù)即可:

b = tk.Button(window, text='hit me', command=hit_me)

沒(méi)有回調(diào)函數(shù)的按鈕是沒(méi)有用的,當(dāng)你按下這個(gè)按鈕時(shí)它什么也不做。你可能在開(kāi)發(fā)一個(gè)應(yīng)用程序的時(shí)候想實(shí)現(xiàn)這種按鈕,比如為了不干擾你的beta版的測(cè)試者:

b = tk.Button(window, text='Help', command=DISABLED)

示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,在圖形界面上設(shè)定標(biāo)簽var = tk.StringVar() # 將label標(biāo)簽的內(nèi)容設(shè)置為字符類(lèi)型,用var來(lái)接收hit_me函數(shù)的傳出內(nèi)容用以顯示在標(biāo)簽上l = tk.Label(window, textvariable=var, bg=’green’, fg=’white’, font=(’Arial’, 12), width=30, height=2)# 說(shuō)明: bg為背景,fg為字體顏色,font為字體,width為長(zhǎng),height為高,這里的長(zhǎng)和高是字符的長(zhǎng)和高,比如height=2,就是標(biāo)簽有2個(gè)字符這么高l.pack() # 定義一個(gè)函數(shù)功能(內(nèi)容自己自由編寫(xiě)),供點(diǎn)擊Button按鍵時(shí)調(diào)用,調(diào)用命令參數(shù)command=函數(shù)名on_hit = Falsedef hit_me(): global on_hit if on_hit == False: on_hit = True var.set(’you hit me’) else: on_hit = False var.set(’’) # 第5步,在窗口界面設(shè)置放置Button按鍵b = tk.Button(window, text=’hit me’, font=(’Arial’, 12), width=10, height=1, command=hit_me)b.pack() # 第6步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)Python GUI之tkinter窗口視窗教程大集合(推薦)

3. Entry窗口部件

簡(jiǎn)單說(shuō)明:

Entry是tkinter類(lèi)中提供的的一個(gè)單行文本輸入域,用來(lái)輸入顯示一行文本,收集鍵盤(pán)輸入(類(lèi)似 HTML 中的 text)。

什么時(shí)候用:

需要用戶(hù)輸入用戶(hù)信息時(shí),比如我們平時(shí)使用軟件、登錄網(wǎng)頁(yè)時(shí),用戶(hù)交互界面讓我們登錄賬戶(hù)信息等時(shí)候可以用到。

  示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,在圖形界面上設(shè)定輸入框控件entry并放置控件e1 = tk.Entry(window, show=’*’, font=(’Arial’, 14)) # 顯示成密文形式e2 = tk.Entry(window, show=None, font=(’Arial’, 14)) # 顯示成明文形式e1.pack()e2.pack() # 第5步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)

4. Text窗口部件

簡(jiǎn)單說(shuō)明:

Text是tkinter類(lèi)中提供的的一個(gè)多行文本區(qū)域,顯示多行文本,可用來(lái)收集(或顯示)用戶(hù)輸入的文字(類(lèi)似 HTML 中的 textarea),格式化文本顯示,允許你用不同的樣式和屬性來(lái)顯示和編輯文本,同時(shí)支持內(nèi)嵌圖象和窗口。

什么時(shí)候用:

在需要顯示編輯用戶(hù)、產(chǎn)品多行信息時(shí),比如顯示用戶(hù)詳細(xì)描述文字,產(chǎn)品簡(jiǎn)介等等,支持隨時(shí)編輯。

  示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,在圖形界面上設(shè)定輸入框控件entry框并放置e = tk.Entry(window, show = None)#顯示成明文形式e.pack() # 第5步,定義兩個(gè)觸發(fā)事件時(shí)的函數(shù)insert_point和insert_end(注意:因?yàn)镻ython的執(zhí)行順序是從上往下,所以函數(shù)一定要放在按鈕的上面)def insert_point(): # 在鼠標(biāo)焦點(diǎn)處插入輸入內(nèi)容 var = e.get() t.insert(’insert’, var)def insert_end(): # 在文本框內(nèi)容最后接著插入輸入內(nèi)容 var = e.get() t.insert(’end’, var) # 第6步,創(chuàng)建并放置兩個(gè)按鈕分別觸發(fā)兩種情況b1 = tk.Button(window, text=’insert point’, width=10,height=2, command=insert_point)b1.pack()b2 = tk.Button(window, text=’insert end’, width=10,height=2, command=insert_end)b2.pack() # 第7步,創(chuàng)建并放置一個(gè)多行文本框text用以顯示,指定height=3為文本框是三個(gè)字符高度t = tk.Text(window, height=3)t.pack() # 第8步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)

5. Listbox窗口部件

簡(jiǎn)單說(shuō)明:

Text是tkinter類(lèi)中提供的的列表框部件,顯示供選方案的一個(gè)列表。listbox能夠被配置來(lái)得到radiobutton或checklist的行為。

什么時(shí)候用:

在有一個(gè)很多內(nèi)容選項(xiàng)組成的列表提供用戶(hù)選擇時(shí)會(huì)用到。

  示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,在圖形界面上創(chuàng)建一個(gè)標(biāo)簽label用以顯示并放置var1 = tk.StringVar() # 創(chuàng)建變量,用var1用來(lái)接收鼠標(biāo)點(diǎn)擊具體選項(xiàng)的內(nèi)容l = tk.Label(window, bg=’green’, fg=’yellow’,font=(’Arial’, 12), width=10, textvariable=var1)l.pack() # 第6步,創(chuàng)建一個(gè)方法用于按鈕的點(diǎn)擊事件def print_selection(): value = lb.get(lb.curselection()) # 獲取當(dāng)前選中的文本 var1.set(value) # 為label設(shè)置值 # 第5步,創(chuàng)建一個(gè)按鈕并放置,點(diǎn)擊按鈕調(diào)用print_selection函數(shù)b1 = tk.Button(window, text=’print selection’, width=15, height=2, command=print_selection)b1.pack() # 第7步,創(chuàng)建Listbox并為其添加內(nèi)容var2 = tk.StringVar()var2.set((1,2,3,4)) # 為變量var2設(shè)置值# 創(chuàng)建Listboxlb = tk.Listbox(window, listvariable=var2) #將var2的值賦給Listbox# 創(chuàng)建一個(gè)list并將值循環(huán)添加到Listbox控件中l(wèi)ist_items = [11,22,33,44]for item in list_items: lb.insert(’end’, item) # 從最后一個(gè)位置開(kāi)始加入值lb.insert(1, ’first’) # 在第一個(gè)位置加入’first’字符lb.insert(2, ’second’) # 在第二個(gè)位置加入’second’字符lb.delete(2)# 刪除第二個(gè)位置的字符lb.pack() # 第8步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)

6. Radiobutton窗口部件

簡(jiǎn)單說(shuō)明:

Radiobutton:代表一個(gè)變量,它可以有多個(gè)值中的一個(gè)。點(diǎn)擊它將為這個(gè)變量設(shè)置值,并且清除與這同一變量相關(guān)的其它radiobutton。

什么時(shí)候用:

在有一個(gè)很多內(nèi)容選項(xiàng)組成的選項(xiàng)列表提供用戶(hù)選擇時(shí)會(huì)用到,用戶(hù)一次只能選擇其中一個(gè),不能多選。

  示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,在圖形界面上創(chuàng)建一個(gè)標(biāo)簽label用以顯示并放置var = tk.StringVar() # 定義一個(gè)var用來(lái)將radiobutton的值和Label的值聯(lián)系在一起.l = tk.Label(window, bg=’yellow’, width=20, text=’empty’)l.pack() # 第6步,定義選項(xiàng)觸發(fā)函數(shù)功能def print_selection(): l.config(text=’you have selected ’ + var.get()) # 第5步,創(chuàng)建三個(gè)radiobutton選項(xiàng),其中variable=var, value=’A’的意思就是,當(dāng)我們鼠標(biāo)選中了其中一個(gè)選項(xiàng),把value的值A(chǔ)放到變量var中,然后賦值給variabler1 = tk.Radiobutton(window, text=’Option A’, variable=var, value=’A’, command=print_selection)r1.pack()r2 = tk.Radiobutton(window, text=’Option B’, variable=var, value=’B’, command=print_selection)r2.pack()r3 = tk.Radiobutton(window, text=’Option C’, variable=var, value=’C’, command=print_selection)r3.pack() # 第7步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)Python GUI之tkinter窗口視窗教程大集合(推薦)

7. Checkbutton窗口部件

簡(jiǎn)單說(shuō)明:

Checkbutton:代表一個(gè)變量,它有兩個(gè)不同的值。點(diǎn)擊這個(gè)按鈕將會(huì)在這兩個(gè)值間切換,選擇和取消選擇。

什么時(shí)候用:

在有一個(gè)很多內(nèi)容選項(xiàng)組成的選項(xiàng)列表提供用戶(hù)選擇時(shí)會(huì)用到,用戶(hù)一次可以選擇多個(gè)。

  示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,在圖形界面上創(chuàng)建一個(gè)標(biāo)簽label用以顯示并放置l = tk.Label(window, bg=’yellow’, width=20, text=’empty’)l.pack() # 第6步,定義觸發(fā)函數(shù)功能def print_selection(): if (var1.get() == 1) & (var2.get() == 0): # 如果選中第一個(gè)選項(xiàng),未選中第二個(gè)選項(xiàng) l.config(text=’I love only Python ’) elif (var1.get() == 0) & (var2.get() == 1): # 如果選中第二個(gè)選項(xiàng),未選中第一個(gè)選項(xiàng) l.config(text=’I love only C++’) elif (var1.get() == 0) & (var2.get() == 0): # 如果兩個(gè)選項(xiàng)都未選中 l.config(text=’I do not love either’) else: l.config(text=’I love both’) # 如果兩個(gè)選項(xiàng)都選中 # 第5步,定義兩個(gè)Checkbutton選項(xiàng)并放置var1 = tk.IntVar() # 定義var1和var2整型變量用來(lái)存放選擇行為返回值var2 = tk.IntVar()c1 = tk.Checkbutton(window, text=’Python’,variable=var1, onvalue=1, offvalue=0, command=print_selection) # 傳值原理類(lèi)似于radiobutton部件c1.pack()c2 = tk.Checkbutton(window, text=’C++’,variable=var2, onvalue=1, offvalue=0, command=print_selection)c2.pack() # 第7步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)Python GUI之tkinter窗口視窗教程大集合(推薦)Python GUI之tkinter窗口視窗教程大集合(推薦)

8. Scale窗口部件

簡(jiǎn)單說(shuō)明:

Scale: 尺度(拉動(dòng)條),允許你通過(guò)滑塊來(lái)設(shè)置一數(shù)字值。

什么時(shí)候用:

在需要用戶(hù)給出評(píng)價(jià)等級(jí),或者給出一個(gè)評(píng)價(jià)分?jǐn)?shù),或者拉動(dòng)滑動(dòng)條提供一個(gè)具體的數(shù)值等等。

  示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,在圖形界面上創(chuàng)建一個(gè)標(biāo)簽label用以顯示并放置l = tk.Label(window, bg=’green’, fg=’white’, width=20, text=’empty’)l.pack() # 第6步,定義一個(gè)觸發(fā)函數(shù)功能def print_selection(v): l.config(text=’you have selected ’ + v)# 第5步,創(chuàng)建一個(gè)尺度滑條,長(zhǎng)度200字符,從0開(kāi)始10結(jié)束,以2為刻度,精度為0.01,觸發(fā)調(diào)用print_selection函數(shù)s = tk.Scale(window, label=’try me’, from_=0, to=10, orient=tk.HORIZONTAL, length=200, showvalue=0,tickinterval=2, resolution=0.01, command=print_selection)s.pack() # 第7步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)Python GUI之tkinter窗口視窗教程大集合(推薦)

9. Canvas窗口部件

簡(jiǎn)單說(shuō)明:

Canvas:畫(huà)布,提供繪圖功能(直線(xiàn)、橢圓、多邊形、矩形) 可以包含圖形或位圖,用來(lái)繪制圖表和圖,創(chuàng)建圖形編輯器,實(shí)現(xiàn)定制窗口部件。

什么時(shí)候用:

在比如像用戶(hù)交互界面等,需要提供設(shè)計(jì)的圖標(biāo)、圖形、logo等信息是可以用到畫(huà)布。

  示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,在圖形界面上創(chuàng)建 500 * 200 大小的畫(huà)布并放置各種元素canvas = tk.Canvas(window, bg=’green’, height=200, width=500)# 說(shuō)明圖片位置,并導(dǎo)入圖片到畫(huà)布上image_file = tk.PhotoImage(file=’pic.gif’) # 圖片位置(相對(duì)路徑,與.py文件同一文件夾下,也可以用絕對(duì)路徑,需要給定圖片具體絕對(duì)路徑)image = canvas.create_image(250, 0, anchor=’n’,image=image_file) # 圖片錨定點(diǎn)(n圖片頂端的中間點(diǎn)位置)放在畫(huà)布(250,0)坐標(biāo)處# 定義多邊形參數(shù),然后在畫(huà)布上畫(huà)出指定圖形x0, y0, x1, y1 = 100, 100, 150, 150line = canvas.create_line(x0-50, y0-50, x1-50, y1-50) # 畫(huà)直線(xiàn)oval = canvas.create_oval(x0+120, y0+50, x1+120, y1+50, fill=’yellow’) # 畫(huà)圓 用黃色填充arc = canvas.create_arc(x0, y0+50, x1, y1+50, start=0, extent=180) # 畫(huà)扇形 從0度打開(kāi)收到180度結(jié)束rect = canvas.create_rectangle(330, 30, 330+20, 30+20) # 畫(huà)矩形正方形canvas.pack() # 第6步,觸發(fā)函數(shù),用來(lái)一定指定圖形def moveit(): canvas.move(rect, 2, 2) # 移動(dòng)正方形rect(也可以改成其他圖形名字用以移動(dòng)一起圖形、元素),按每次(x=2, y=2)步長(zhǎng)進(jìn)行移動(dòng) # 第5步,定義一個(gè)按鈕用來(lái)移動(dòng)指定圖形的在畫(huà)布上的位置b = tk.Button(window, text=’move item’,command=moveit).pack() # 第7步,主窗口循環(huán)顯示window.mainloop()

所用圖片:

當(dāng)然你可以隨意用你的一張圖片導(dǎo)入畫(huà)布試一試效果,圖片可以用畫(huà)圖工具改一下像素大小,以免圖片太大,導(dǎo)入畫(huà)布顯示不全,當(dāng)然你也可以用我提供的素材,下面是鏈接:https://files.cnblogs.com/files/shwee/pic.gif

Python GUI之tkinter窗口視窗教程大集合(推薦)

  圖片錨定點(diǎn)位置參數(shù)圖:

Python GUI之tkinter窗口視窗教程大集合(推薦)

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)Python GUI之tkinter窗口視窗教程大集合(推薦)

10. Menu窗口部件

簡(jiǎn)單說(shuō)明:

Menu:菜單條,用來(lái)實(shí)現(xiàn)下拉和彈出式菜單,點(diǎn)下菜單后彈出的一個(gè)選項(xiàng)列表,用戶(hù)可以從中選擇

什么時(shí)候用:

在比如像軟件或網(wǎng)頁(yè)交互界面等,需要提供菜單選項(xiàng)功能提供用戶(hù)選擇菜單選項(xiàng)功能時(shí)用到。

  示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,在圖形界面上創(chuàng)建一個(gè)標(biāo)簽用以顯示內(nèi)容并放置l = tk.Label(window, text=’ ’, bg=’green’)l.pack() # 第10步,定義一個(gè)函數(shù)功能,用來(lái)代表菜單選項(xiàng)的功能,這里為了操作簡(jiǎn)單,定義的功能比較簡(jiǎn)單counter = 0def do_job(): global counter l.config(text=’do ’+ str(counter)) counter += 1 # 第5步,創(chuàng)建一個(gè)菜單欄,這里我們可以把他理解成一個(gè)容器,在窗口的上方menubar = tk.Menu(window) # 第6步,創(chuàng)建一個(gè)File菜單項(xiàng)(默認(rèn)不下拉,下拉內(nèi)容包括New,Open,Save,Exit功能項(xiàng))filemenu = tk.Menu(menubar, tearoff=0)# 將上面定義的空菜單命名為File,放在菜單欄中,就是裝入那個(gè)容器中menubar.add_cascade(label=’File’, menu=filemenu) # 在File中加入New、Open、Save等小菜單,即我們平時(shí)看到的下拉菜單,每一個(gè)小菜單對(duì)應(yīng)命令操作。filemenu.add_command(label=’New’, command=do_job)filemenu.add_command(label=’Open’, command=do_job)filemenu.add_command(label=’Save’, command=do_job)filemenu.add_separator() # 添加一條分隔線(xiàn)filemenu.add_command(label=’Exit’, command=window.quit) # 用tkinter里面自帶的quit()函數(shù) # 第7步,創(chuàng)建一個(gè)Edit菜單項(xiàng)(默認(rèn)不下拉,下拉內(nèi)容包括Cut,Copy,Paste功能項(xiàng))editmenu = tk.Menu(menubar, tearoff=0)# 將上面定義的空菜單命名為 Edit,放在菜單欄中,就是裝入那個(gè)容器中menubar.add_cascade(label=’Edit’, menu=editmenu) # 同樣的在 Edit 中加入Cut、Copy、Paste等小命令功能單元,如果點(diǎn)擊這些單元, 就會(huì)觸發(fā)do_job的功能editmenu.add_command(label=’Cut’, command=do_job)editmenu.add_command(label=’Copy’, command=do_job)editmenu.add_command(label=’Paste’, command=do_job) # 第8步,創(chuàng)建第二級(jí)菜單,即菜單項(xiàng)里面的菜單submenu = tk.Menu(filemenu) # 和上面定義菜單一樣,不過(guò)此處實(shí)在File上創(chuàng)建一個(gè)空的菜單filemenu.add_cascade(label=’Import’, menu=submenu, underline=0) # 給放入的菜單submenu命名為Import # 第9步,創(chuàng)建第三級(jí)菜單命令,即菜單項(xiàng)里面的菜單項(xiàng)里面的菜單命令(有點(diǎn)拗口,笑~~~)submenu.add_command(label=’Submenu_1’, command=do_job) # 這里和上面創(chuàng)建原理也一樣,在Import菜單項(xiàng)中加入一個(gè)小菜單命令Submenu_1 # 第11步,創(chuàng)建菜單欄完成后,配置讓菜單欄menubar顯示出來(lái)window.config(menu=menubar) # 第12步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)

11. Frame 窗口部件

簡(jiǎn)單說(shuō)明:

Frame:框架,用來(lái)承載放置其他GUI元素,就是一個(gè)容器,是一個(gè)在 Windows 上分離小區(qū)域的部件, 它能將 Windows 分成不同的區(qū),然后存放不同的其他部件. 同時(shí)一個(gè) Frame 上也能再分成兩個(gè) Frame, Frame 可以認(rèn)為是一種容器.

什么時(shí)候用:

在比如像軟件或網(wǎng)頁(yè)交互界面等,有不同的界面邏輯層級(jí)和功能區(qū)域劃分時(shí)可以用到,讓交互界面邏輯更加清晰。

  示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,在圖形界面上創(chuàng)建一個(gè)標(biāo)簽用以顯示內(nèi)容并放置tk.Label(window, text=’on the window’, bg=’red’, font=(’Arial’, 16)).pack() # 和前面部件分開(kāi)創(chuàng)建和放置不同,其實(shí)可以創(chuàng)建和放置一步完成 # 第5步,創(chuàng)建一個(gè)主frame,長(zhǎng)在主window窗口上frame = tk.Frame(window)frame.pack() # 第6步,創(chuàng)建第二層框架frame,長(zhǎng)在主框架frame上面frame_l = tk.Frame(frame)# 第二層frame,左frame,長(zhǎng)在主frame上frame_r = tk.Frame(frame)# 第二層frame,右frame,長(zhǎng)在主frame上frame_l.pack(side=’left’)frame_r.pack(side=’right’) # 第7步,創(chuàng)建三組標(biāo)簽,為第二層frame上面的內(nèi)容,分為左區(qū)域和右區(qū)域,用不同顏色標(biāo)識(shí)tk.Label(frame_l, text=’on the frame_l1’, bg=’green’).pack()tk.Label(frame_l, text=’on the frame_l2’, bg=’green’).pack()tk.Label(frame_l, text=’on the frame_l3’, bg=’green’).pack()tk.Label(frame_r, text=’on the frame_r1’, bg=’yellow’).pack()tk.Label(frame_r, text=’on the frame_r2’, bg=’yellow’).pack()tk.Label(frame_r, text=’on the frame_r3’, bg=’yellow’).pack() # 第8步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)

12. messageBox窗口部件

簡(jiǎn)單說(shuō)明:

messageBox:消息框,用于顯示你應(yīng)用程序的消息框。(Python2中為tkMessagebox),其實(shí)這里的messageBox就是我們平時(shí)看到的彈窗。 我們首先需要定義一個(gè)觸發(fā)功能,來(lái)觸發(fā)這個(gè)彈窗,這里我們就放上以前學(xué)過(guò)的button按鈕,通過(guò)觸發(fā)功能,調(diào)用messagebox吧,點(diǎn)擊button按鈕就會(huì)彈出提示對(duì)話(huà)框。下面給出messagebox提示信息的幾種形式:

tkinter.messagebox.showinfo(title=’Hi’, message=’你好!’) # 提示信息對(duì)話(huà)窗tkinter.messagebox.showwarning(title=’Hi’, message=’有警告!’) # 提出警告對(duì)話(huà)窗tkinter.messagebox.showerror(title=’Hi’, message=’出錯(cuò)了!’) # 提出錯(cuò)誤對(duì)話(huà)窗print(tkinter.messagebox.askquestion(title=’Hi’, message=’你好!’)) # 詢(xún)問(wèn)選擇對(duì)話(huà)窗return ’yes’, ’no’print(tkinter.messagebox.askyesno(title=’Hi’, message=’你好!’)) # return ’True’, ’False’print(tkinter.messagebox.askokcancel(title=’Hi’, message=’你好!’)) # return ’True’, ’False’

什么時(shí)候用:

在比如像軟件或網(wǎng)頁(yè)交互界面等,有不同的界面邏輯層級(jí)和功能區(qū)域劃分時(shí)可以用到,讓交互界面邏輯更加清晰。

  示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入import tkinter.messagebox # 要使用messagebox先要導(dǎo)入模塊 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第5步,定義觸發(fā)函數(shù)功能def hit_me(): tkinter.messagebox.showinfo(title=’Hi’, message=’你好!’) # 提示信息對(duì)話(huà)窗 # tkinter.messagebox.showwarning(title=’Hi’, message=’有警告!’) # 提出警告對(duì)話(huà)窗 # tkinter.messagebox.showerror(title=’Hi’, message=’出錯(cuò)了!’) # 提出錯(cuò)誤對(duì)話(huà)窗 # print(tkinter.messagebox.askquestion(title=’Hi’, message=’你好!’)) # 詢(xún)問(wèn)選擇對(duì)話(huà)窗return ’yes’, ’no’ # print(tkinter.messagebox.askyesno(title=’Hi’, message=’你好!’)) # return ’True’, ’False’ # print(tkinter.messagebox.askokcancel(title=’Hi’, message=’你好!’)) # return ’True’, ’False’ # 第4步,在圖形界面上創(chuàng)建一個(gè)標(biāo)簽用以顯示內(nèi)容并放置tk.Button(window, text=’hit me’, bg=’green’, font=(’Arial’, 14), command=hit_me).pack() # 第6步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)Python GUI之tkinter窗口視窗教程大集合(推薦)

Python GUI之tkinter窗口視窗教程大集合(推薦)Python GUI之tkinter窗口視窗教程大集合(推薦)

13. 窗口部件三種放置方式pack/grid/place

參考來(lái)源:

The Grid Geometry ManagerThe Pack Geometry ManagerThe Place Geometry Manager

1. Grid:The Grid Geometry Manager

grid 是方格, 所以所有的內(nèi)容會(huì)被放在這些規(guī)律的方格中。例如:

for i in range(3): for j in range(3): tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10, ipadx=10, ipady=10)

以上的代碼就是創(chuàng)建一個(gè)三行三列的表格,其實(shí) grid 就是用表格的形式定位的。這里的參數(shù) row 為行,colum 為列,padx 就是單元格左右間距,pady 就是單元格上下間距,ipadx是單元格內(nèi)部元素與單元格的左右間距,ipady是單元格內(nèi)部元素與單元格的上下間距。

示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,grid 放置方法for i in range(3): for j in range(3): tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10, ipadx=10, ipady=10) # 第5步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)

2. Pack:The Pack Geometry Manager

我們常用的pack(), 他會(huì)按照上下左右的方式排列.例如:

tk.Label(window, text=’P’, fg=’red’).pack(side=’top’) # 上tk.Label(window, text=’P’, fg=’red’).pack(side=’bottom’) # 下tk.Label(window, text=’P’, fg=’red’).pack(side=’left’) # 左tk.Label(window, text=’P’, fg=’red’).pack(side=’right’) # 右

 示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,pack 放置方法tk.Label(window, text=’P’, fg=’red’).pack(side=’top’) # 上tk.Label(window, text=’P’, fg=’red’).pack(side=’bottom’) # 下tk.Label(window, text=’P’, fg=’red’).pack(side=’left’) # 左tk.Label(window, text=’P’, fg=’red’).pack(side=’right’) # 右 # 第5步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)

3. Place:The Place Geometry Manager

再接下來(lái)我們來(lái)看place(), 這個(gè)比較容易理解,就是給精確的坐標(biāo)來(lái)定位,如此處給的(50, 100),就是將這個(gè)部件放在坐標(biāo)為(x=50, y=100)的這個(gè)位置, 后面的參數(shù) anchor=’nw’,就是前面所講的錨定點(diǎn)是西北角。例如:

tk.Label(window, text=’Pl’, font=(’Arial’, 20), ).place(x=50, y=100, anchor=’nw’)

示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入 # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’My Window’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’500x300’) # 這里的乘是小x # 第4步,place 放置方法(精準(zhǔn)的放置到指定坐標(biāo)點(diǎn)的位置上)tk.Label(window, text=’Pl’, font=(’Arial’, 20), ).place(x=50, y=100, anchor=’nw’) # 第5步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)

14. 綜合練習(xí),用戶(hù)登錄窗口例子

編寫(xiě)一個(gè)用戶(hù)登錄界面,用戶(hù)可以登錄賬戶(hù)信息,如果賬戶(hù)已經(jīng)存在,可以直接登錄,登錄名或者登錄密碼輸入錯(cuò)誤會(huì)提示,如果賬戶(hù)不存在,提示用戶(hù)注冊(cè),點(diǎn)擊注冊(cè)進(jìn)去注冊(cè)頁(yè)面,輸入注冊(cè)信息,確定后便可以返回登錄界面進(jìn)行登錄。

示例代碼:

#!/usr/bin/env python# -*- coding: utf-8 -*-# author:洪衛(wèi) import tkinter as tk # 使用Tkinter前需要先導(dǎo)入import tkinter.messageboximport pickle # 第1步,實(shí)例化object,建立窗口windowwindow = tk.Tk() # 第2步,給窗口的可視化起名字window.title(’Wellcome to Hongwei Website’) # 第3步,設(shè)定窗口的大小(長(zhǎng) * 寬)window.geometry(’400x300’) # 這里的乘是小x # 第4步,加載 wellcome imagecanvas = tk.Canvas(window, width=400, height=135, bg=’green’)image_file = tk.PhotoImage(file=’pic.gif’)image = canvas.create_image(200, 0, anchor=’n’, image=image_file)canvas.pack(side=’top’)tk.Label(window, text=’Wellcome’,font=(’Arial’, 16)).pack() # 第5步,用戶(hù)信息tk.Label(window, text=’User name:’, font=(’Arial’, 14)).place(x=10, y=170)tk.Label(window, text=’Password:’, font=(’Arial’, 14)).place(x=10, y=210) # 第6步,用戶(hù)登錄輸入框entry# 用戶(hù)名var_usr_name = tk.StringVar()var_usr_name.set(’example@python.com’)entry_usr_name = tk.Entry(window, textvariable=var_usr_name, font=(’Arial’, 14))entry_usr_name.place(x=120,y=175)# 用戶(hù)密碼var_usr_pwd = tk.StringVar()entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, font=(’Arial’, 14), show=’*’)entry_usr_pwd.place(x=120,y=215) # 第8步,定義用戶(hù)登錄功能def usr_login(): # 這兩行代碼就是獲取用戶(hù)輸入的usr_name和usr_pwd usr_name = var_usr_name.get() usr_pwd = var_usr_pwd.get() # 這里設(shè)置異常捕獲,當(dāng)我們第一次訪(fǎng)問(wèn)用戶(hù)信息文件時(shí)是不存在的,所以這里設(shè)置異常捕獲。 # 中間的兩行就是我們的匹配,即程序?qū)⑤斎氲男畔⒑臀募械男畔⑵ヅ洹? try: with open(’usrs_info.pickle’, ’rb’) as usr_file: usrs_info = pickle.load(usr_file) except FileNotFoundError: # 這里就是我們?cè)跊](méi)有讀取到`usr_file`的時(shí)候,程序會(huì)創(chuàng)建一個(gè)`usr_file`這個(gè)文件,并將管理員 # 的用戶(hù)和密碼寫(xiě)入,即用戶(hù)名為`admin`密碼為`admin`。 with open(’usrs_info.pickle’, ’wb’) as usr_file: usrs_info = {’admin’: ’admin’} pickle.dump(usrs_info, usr_file) usr_file.close() # 必須先關(guān)閉,否則pickle.load()會(huì)出現(xiàn)EOFError: Ran out of input # 如果用戶(hù)名和密碼與文件中的匹配成功,則會(huì)登錄成功,并跳出彈窗how are you? 加上你的用戶(hù)名。 if usr_name in usrs_info: if usr_pwd == usrs_info[usr_name]: tkinter.messagebox.showinfo(title=’Welcome’, message=’How are you? ’ + usr_name) # 如果用戶(hù)名匹配成功,而密碼輸入錯(cuò)誤,則會(huì)彈出’Error, your password is wrong, try again.’ else: tkinter.messagebox.showerror(message=’Error, your password is wrong, try again.’) else: # 如果發(fā)現(xiàn)用戶(hù)名不存在 is_sign_up = tkinter.messagebox.askyesno(’Welcome! ’, ’You have not sign up yet. Sign up now?’) # 提示需不需要注冊(cè)新用戶(hù) if is_sign_up: usr_sign_up() # 第9步,定義用戶(hù)注冊(cè)功能def usr_sign_up(): def sign_to_Hongwei_Website(): # 以下三行就是獲取我們注冊(cè)時(shí)所輸入的信息 np = new_pwd.get() npf = new_pwd_confirm.get() nn = new_name.get() # 這里是打開(kāi)我們記錄數(shù)據(jù)的文件,將注冊(cè)信息讀出 with open(’usrs_info.pickle’, ’rb’) as usr_file: exist_usr_info = pickle.load(usr_file) # 這里就是判斷,如果兩次密碼輸入不一致,則提示Error, Password and confirm password must be the same! if np != npf: tkinter.messagebox.showerror(’Error’, ’Password and confirm password must be the same!’) # 如果用戶(hù)名已經(jīng)在我們的數(shù)據(jù)文件中,則提示Error, The user has already signed up! elif nn in exist_usr_info: tkinter.messagebox.showerror(’Error’, ’The user has already signed up!’) # 最后如果輸入無(wú)以上錯(cuò)誤,則將注冊(cè)輸入的信息記錄到文件當(dāng)中,并提示注冊(cè)成功Welcome!,You have successfully signed up!,然后銷(xiāo)毀窗口。 else: exist_usr_info[nn] = np with open(’usrs_info.pickle’, ’wb’) as usr_file:pickle.dump(exist_usr_info, usr_file) tkinter.messagebox.showinfo(’Welcome’, ’You have successfully signed up!’) # 然后銷(xiāo)毀窗口。 window_sign_up.destroy() # 定義長(zhǎng)在窗口上的窗口 window_sign_up = tk.Toplevel(window) window_sign_up.geometry(’300x200’) window_sign_up.title(’Sign up window’) new_name = tk.StringVar() # 將輸入的注冊(cè)名賦值給變量 new_name.set(’example@python.com’) # 將最初顯示定為’example@python.com’ tk.Label(window_sign_up, text=’User name: ’).place(x=10, y=10) # 將`User name:`放置在坐標(biāo)(10,10)。 entry_new_name = tk.Entry(window_sign_up, textvariable=new_name) # 創(chuàng)建一個(gè)注冊(cè)名的`entry`,變量為`new_name` entry_new_name.place(x=130, y=10) # `entry`放置在坐標(biāo)(150,10). new_pwd = tk.StringVar() tk.Label(window_sign_up, text=’Password: ’).place(x=10, y=50) entry_usr_pwd = tk.Entry(window_sign_up, textvariable=new_pwd, show=’*’) entry_usr_pwd.place(x=130, y=50) new_pwd_confirm = tk.StringVar() tk.Label(window_sign_up, text=’Confirm password: ’).place(x=10, y=90) entry_usr_pwd_confirm = tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show=’*’) entry_usr_pwd_confirm.place(x=130, y=90) # 下面的 sign_to_Hongwei_Website btn_comfirm_sign_up = tk.Button(window_sign_up, text=’Sign up’, command=sign_to_Hongwei_Website) btn_comfirm_sign_up.place(x=180, y=120) # 第7步,login and sign up 按鈕btn_login = tk.Button(window, text=’Login’, command=usr_login)btn_login.place(x=120, y=240)btn_sign_up = tk.Button(window, text=’Sign up’, command=usr_sign_up)btn_sign_up.place(x=200, y=240) # 第10步,主窗口循環(huán)顯示window.mainloop()

測(cè)試效果:

Python GUI之tkinter窗口視窗教程大集合(推薦)Python GUI之tkinter窗口視窗教程大集合(推薦)

15. 其他部件后續(xù)再補(bǔ)充...

注:不同電腦可能配置環(huán)境略有不同,如有小錯(cuò)誤可以自己調(diào)試一下。

到此這篇關(guān)于Python GUI之tkinter窗口視窗教程大集合的文章就介紹到這了,更多相關(guān)Python tkinter窗口視窗內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 久草一区 | 欧美一级艳情片免费观看 | 国产精品美女 | a视频在线观看 | 欧美成人一级 | 久久网国产 | 精品成人免费一区二区在线播放 | 国产 亚洲 网红 主播 | 亚洲一区在线日韩在线深爱 | 黄色大片网站在线观看 | 国产综合区 | 亚洲欧美日韩另类一区二区 | 波多野结衣一区二区三区高清 | 日韩av免费 | 麻豆一区 | 99久久婷婷国产精品综合 | 中文字幕在线观看 | 极品一区 | 欧美一区二区三区电影 | 亚洲精品一二三区 | 三区视频 | 成人亚洲黄色 | www.久久伊人| 久久99国产精品久久99果冻传媒 | 欧美成人精品一区二区三区 | 欧美日韩一区二区在线 | 欧美激情免费 | 九九热欧美 | 日本欧美久久久久免费播放网 | 亚州精品国产 | 国产精品久久久久久久久久 | 欧美日韩福利视频 | 午夜影院在线 | 欧美与黑人午夜性猛交久久久 | 不卡在线 | www.亚洲成人网 | 91高清在线观看 | 中文字幕一区二区不卡 | 99久久99久久精品国产片果冻 | 中文精品在线 | 国产一区国产二区在线观看 | 国产精品国产精品国产专区不片 | 国产精品18久久久久久久久久久久 | 久久久亚洲精品中文字幕 | 九九av| 亚洲国产精品自拍 | 在线国产一区二区 | 欧美日韩福利 | 狠狠操av | 久久www免费人成看片高清 | 香蕉久久网 | 日韩精品一区二区三区中文在线 | 成人免费在线观看 | 99国产精品久久久 | 久久成人一区二区 | 午夜影院免费 | 九九精品久久久 | 欧美日韩黄色一级片 | 97爱爱视频 | 激情久久av一区av二区av三区 | 看一级黄色大片 | 爱啪导航一精品导航站 | 亚州国产 | av大片网| 日韩一区二区三区在线观看 | 婷婷91| 狠狠干美女 | 亚洲综合区| 日本成人片网站 | 欧美中文字幕在线 | 亚洲欧美日韩国产 | 精品久久久久久国产 | 国产成人精品久久二区二区91 | 国产精品成av人在线视午夜片 | 亚洲欧美日韩精品久久奇米色影视 | 天天干天天干天天干天天射 | 草久久av| 日韩中文字幕av在线 | 国产乱码精品一区二区三区中文 | 成人精品一区二区三区电影黑人 | 亚洲国产91 | 一区二区三区 在线 | 欧美日在线 | 日韩精品小视频 | 久久久精品国产 | 日韩视频一区在线观看 | 亚洲国产成人在线观看 | 97久久精品人人做人人爽50路 | 国产激情毛片 | 538在线精品 | 男女免费视频 | 国产高清视频在线观看 | 日本精品免费在线观看 | 欧美日本高清视频 | 日韩视频在线一区二区 | 综合网激情五月 | 狠狠色丁香婷婷综合 | 九九亚洲精品 | 国内久久精品视频 | 一级亚洲| 国产高清精品在线 | 蜜桃官网| 中文字幕久久精品 | 亚洲永久免费 | 日本高清中文字幕 | 一区二区三区免费看 | 日韩精品一区二区三区视频播放 | 亚洲tv久久爽久久爽 | 日韩精品免费看 | 99国产精品久久久久久久 | 日韩三区视频 | 国产激情亚洲 | 亚洲一区二区三区日韩 | 亚洲精品福利在线 | 综合色九九 | 国产高清自拍 | 免费操片| 伊人一区| 国产精品一区二区三区在线 | 亚洲一区视频 | 草草视频在线免费观看 | 欧美日韩一级在线观看 | 电影91久久久 | 国产精品成人国产乱一区 | 亚洲高清视频在线 | 国产精品对白一区二区三区 | 久久久999成人| 亚洲欧美一区二区三区在线 | 97影院在线午夜 | av免费在线观看网站 | 青青久久| 欧美在线国产 | 性一交一乱一透一a级 | 日本成人小视频 | 国产日韩精品一区二区 | 国产精品国产a级 | 欧美在线综合视频 | 久久成人精品一区二区三区 | 黄色av网站在线免费观看 | 国产羞羞视频在线观看 | a级黄色毛片免费观看 | 91视频综合 | 国产成人亚洲综合 | 91精品国产综合久久久久久蜜月 | 日韩激情二区 | 在线永久免费观看日韩a | 亚洲精品久久久久国产 | 亚洲精品字幕 | 日韩有码在线观看 | 男人久久天堂 | av动漫一区二区 | 欧美精品一区二区三区手机在线 | 黄色一级大片视频 | 99热精品免费 | 中文字幕在线观看1 | 精品成人av| 午夜视频在线免费观看 | 国产精国产精品 | 国产在线视频网 | 在线观看国产精品一区 | 夜添久久精品亚洲国产精品 | www.国产.com | 国产综合亚洲精品一区二 | 999在线观看精品免费不卡网站 | www.在线播放 | 亚洲欧美精选 | 偷拍呻吟高潮91 | 亚洲 欧美日韩 国产 中文 | 中文字幕在线资源 | 欧美猛交ⅹxxx乱大交视频 | 91精品国产91久久久久久吃药 | 一级片免费在线 | 一区二区三区视频在线免费观看 | 国产激情在线观看视频 | 亚洲永久免费观看 | 日韩在线播放一区 | 精品欧美一区二区精品久久久 | 色婷婷激情| 国产黄视频在线 | 99爱在线观看 | 欧美精品导航 | 午夜视频在线观看网站 | 五月香婷婷| 久久成人久久爱 | 国产精品久久久久久久久久免费 | 中文精品在线 | 国产最好的精华液网站 | 四虎影院最新网址 | 精品无人乱码区1区2区3区 | 日韩国产在线观看 | 欧美一区二区视频 | 2018啪一啪| 久久草在线视频 | 国产农村妇女精品一二区 | 亚洲成人第一区 | 黄色日批视频 | 国产精品一二三 | 亚洲国产精品久久 | 国产激情精品 | av大片| 99久久久成人国产精品 | 91精品国产欧美一区二区 | 国产成人一区 | 国产成人精品午夜视频' | 午夜免费福利电影 | 国产一级在线观看 | 国产麻豆乱码精品一区二区三区 | 精品久久久一区 | 日本一区二区三区在线视频 | 亚洲高清电影 | 福利精品在线观看 | 日韩中出| 久久久91精品国产一区二区三区 | 日韩在线观看中文字幕 | 免费视频久久久久 | 在线观看免费毛片视频 | 超碰官网 | 91在线一区二区 | 超碰av人人 | 亚洲综合二区 | 欧美一区二区三区视频在线观看 | 国产日韩精品视频 | 国产福利精品一区 | 亚洲伦理影院 | 91天堂| 欧美a在线 | 成人精品一区二区三区中文字幕 | 亚洲欧洲一区二区三区 | 国产精品美女久久久久aⅴ国产馆 | 国产精品亚洲一区二区三区 | 日韩视频精品在线 | 在线日韩视频 | 久久影院一区 | 成人亚洲精品久久久久软件 | 欧美精品一区二区三区四区在线 | 久久久国产一区二区三区 | 中字一区 | 欧美一区亚洲二区 | 亚洲成人三区 | 在线观看成人小视频 | 国产一区二区三区欧美 | 亚洲精品一区二区三区蜜桃久 | 欧美一级免费播放 | 一区二区三区国产 | 亚洲狠狠爱 | 国产二区免费 | 亚洲国产成人久久综合一区,久久久国产99 | 日韩 国产 在线 | 国产成人在线视频 | 日韩看片 | 99热精品久久| 在线免费观看色视频 | 在线91| 91精品视频在线播放 | 亚洲欧洲一区 | 亚洲视频观看 | 国产精品自拍视频 | 三级在线视频 | 国产免费一区二区三区最新不卡 | 色综合一区二区三区 | 精品无码三级在线观看视频 | 99精品国产在热久久 | 久久久久久亚洲国产 | 中文二区 | 久久爱综合网 | 一级毛片在线播放 | 日本视频在线 | 久久成人在线 | aⅴ色国产 欧美 | 欧美性福| 99精品免费 | k8久久久一区二区三区 | 久在线视频播放免费视频 | 国产精品视频免费 | 欧美日韩一区二区三区在线观看 | 亚洲欧美日韩国产综合精品二区 | 欧美日韩一区二区在线观看 | 亚洲成人高清在线 | av小说在线观看 | 国产日韩欧美视频 | 国产v日产∨综合v精品视频 | 亚洲国产视频一区 | 亚洲精品四区 | 91看片网站| 久久黄视频 | 天天天天干 | 亚洲欧美一区二区三区不卡 | 亚洲精品一| 日韩欧美中文在线 | 成人毛片在线观看视频 | 欧美喷潮久久久xxxxx | 国产噜噜噜噜噜久久久久久久久 | 国产1区2区3区 | 视频一区二区中文字幕日韩 | 亚洲第一福利视频 | 久久久久久久一区 | 亚洲av毛片一区二二区三三区 | 日本一本在线 | 日韩一区在线视频 | 国产精品网址 | 国产日韩欧美视频 | 一区二区三区四区视频 | 免费成人在线网站 | 在线观看免费视频黄 | 欧美中文字幕在线观看 | 青草视频网站 | 亚洲一区二区三区免费 | 日韩精品久久久 | 欧美日韩国产精品一区 | 免费看黄视频网站 | 一区二区国产精品 | 久久国内精品 | 亚洲免费在线看 | 免费av在线网站 | 欧美一区二区三区成人 | 国产精品中文字幕在线播放 | 一区二区中文 | 欧美激情在线狂野欧美精品 | 亚洲乱码国产乱码精品精98午夜 | 一区二区在线视频 | 成人在线视频免费观看 | 亚洲精品日韩激情在线电影 | 国产999精品久久久久 | 男人天堂视频在线观看 | 欧美日韩在线观看中文字幕 | 中文字幕成人 | 久久精品电影网 | 久久免费精品视频 | 九九在线精品 | 日本精品视频在线观看 | 日本精品一区 | 精品久久久久久久 | 成人精品视频在线观看 | 国内精品久久久久 | 日韩精品一区二区三区 | 一本一道久久精品综合 | 国产在线观看一区二区三区 | 九九热免费看 | 久久亚洲一区二区 | 日韩污视频在线观看 | 欧美亚洲视频 | 成人性大片免费观看网站 | 欧美一区二区三区 | 国产做a爱片久久毛片 | 成人在线高清 | 在线观看理论电影 | 日韩一区二区免费视频 | www.xxx免费 | 一级免费黄色免费片 | 国产毛片在线看 | 北条麻妃99精品青青久久 | 亚洲免费精品网站 | 五月激情站 | 国产成人精品一区二区视频免费 | 中文一区二区 | 日韩av免费在线观看 | 欧美中文字幕在线观看 | 欧美78videosex性欧美 | 在线看片成人 | 国产1区在线观看 | 在线观看v片 | 中文字幕在线导航 | 国产中文一区 | 看亚洲a级一级毛片 | 五月激情综合网 | 在线看亚洲 | 亚洲一区二区在线免费观看 | 天天干,夜夜操 | 欧美a级成人淫片免费看 | 蜜桃视频在线观看www社区 | 99精品久久久久久久免费看蜜月 | 久久久久久亚洲一区二区三区蜜臀 | 日韩一区二区在线观看 | 在线观看av不卡 | 91.xxx.高清在线 | 精品视频在线观看 | 天天拍天天操 | 欧美极品一区二区 | 精品久| 婷婷免费视频 | 在线播放一区二区三区 | 亚洲福利在线观看 | 欧美色视频在线观看 | 亚洲国产一区二区三区, | 91精品福利 | 99久久电影 | 久久国产一区 | 91黄色免费看 | 999久久久国产精品 免费视频一区 | 亚洲综合国产 | 99热精品在线 | 精品国产成人 | 51ⅴ精品国产91久久久久久 | 亚洲风情在线观看 | 久热精品国产 | 亚洲视频中文字幕 | 四色成人av永久网址 | 手机在线观看av | 二区欧美| 亚洲视频精品一区 | 婷婷久久综合 | 精品人成 | 久久这里只有精品首页 | 国产精品三级久久久久久电影 | 国产97免费视频 | 日韩精品一区二区在线观看 | 午夜视频在线 | 国产成人久久精品一区二区三区 | 欧美激情一区二区三区 | 久久综合九色综合欧美狠狠 | 99成人 | 成人av免费 | 国产精品久久久久久久久久免费 | 91亚洲一区 | 91在线精品一区二区三区 | 精品一区视频 | 国产欧美精品一区 | 91亚洲国产 | 香蕉久久夜色精品国产使用方法 | 免费国产一区 | www.久草.com| 欧美一区在线观看视频 | 97国产一区二区精品久久呦 | 日韩专区在线播放 | 成人在线视频播放 | 国偷自产av一区二区三区 | 一级欧美一级日韩 | 国产精品午夜电影 | 久久久精品免费观看 | 亚洲精品国产setv | 欧美a在线看 | 亚洲精品久久久狠狠狠爱 | 欧美高清成人 | 欧美久久久 | 国产一区久久 | 国产区视频在线观看 | 91视频观看| av在线入口| 成人国产精品色哟哟 | 久久久综合亚洲91久久98 | 久久女同互慰一区二区三区 | 久久久久久中文字幕 | www.久久99| 日韩污视频在线观看 | 综合网日韩 | 中文字幕一区二区三区四区不卡 | 亚洲精品九九 | 欧美精品99 | 亚洲欧美中文字幕 | 国产一区二区三区免费视频 | 日本久久网站 | 99国内精品久久久久久久 | 成人精品| 日韩三级网 | 国产第一页在线播放 | 91成人免费视频 | www.avtt天堂网 | 亚洲成人一区 | 国产一区www | 天天精品在线 | 成人欧美一区二区三区 | 四季久久免费一区二区三区四区 | 午夜影院男女 | 欧美激情第二页 | 91在线观看视频 | 日韩一区二区免费视频 | 免费av片| 亚洲一区二区中文字幕在线观看 | 亚洲中国精品精华液 | 国产亚洲欧美在线 | 国产高清在线 | 青青草99 | 久久久精彩视频 | 成人国产精品一级毛片视频 | 九九热精品视频在线观看 | 欧美成视频 | 在线中文字幕av | 日韩在线免费观看av | 国产真实精品久久二三区 | 免费在线日韩 | 精品欧美一区二区三区久久久 | 一区二区三区视频在线免费观看 | 青青草久久久 | 亚洲精品国产第一综合99久久 | 日韩一及片 | 国产精品永久在线观看 | 亚洲国产高清高潮精品美女 | 欧美日韩国产精品 | 日韩一二三区 | 成人一区二区三区久久精品嫩草 | 91精品国产乱码久久久久久久久 | av免费网站在线观看 | 久久av综合 | 久久成人国产视频 | 国产日韩在线视频 | 国产色在线 | 美日韩精品视频 | 一区二区三区日本 | 蜜桃一区二区三区 | 在线免费观看色视频 | 最近免费中文字幕在线视频2 | 久久三区| 亚洲精品成人a8198a | 久久国产传媒 | 91久久精品日日躁夜夜躁欧美 | 男女视频在线观看 | 正在播放国产一区 | 久久久a| 福利久久久 | 伊人久久精品久久亚洲一区 | 日本高清中文字幕 | 亚洲一区 | 久久综合九色综合欧美狠狠 | 在线观看黄 | 国产欧美精品一区二区 | 91午夜在线 | 97成人在线 | 欧美a区 | 亚洲欧洲精品成人久久奇米网 | 中文字幕亚洲欧美 | 日韩中文字幕一区 | 国产精品视频在线观看 | 福利视频网站 | 久久国产电影 | 日韩精品2区 | 九九热精| 国产精品美女久久久久久久久久久 | 国产精品免费av | 精品国产一区二区三区久久 | 国产精品久久久久久久久久 | 国产午夜精品久久 | 欧美日韩中文在线观看 | 国产在线视频a | 欧美福利视频 | 国产亚洲一区二区三区 | 国产视频99 | 国产在线观看91一区二区三区 | 色综合免费视频 | 日韩久久午夜一级啪啪 | 欧美精产国品一二三区 | 欧洲一级毛片 | 国产精品久久久久久久久久久久 | 日本黄色一级片免费看 | 久综合网 | 国产成人免费视频网站高清观看视频 | 国产精品视频免费 | 91福利电影在线观看 | 青青草一区 | 欧美日韩在线免费观看 | 欧美八区| 91在线视频在线观看 | 中文字幕在线观看www | 成人网av | 黄色国产视频 | 日本中文字幕一区 | 欧美成人激情视频 | 蜜臀网 | 日韩av免费在线观看 | 国产在线观看一区二区三区 | 欧美一级淫片007 | 国产精品欧美一区二区三区 | 国产最新视频 | 一区二区日本 | 亚洲一区在线免费观看 | 龙珠z普通话国语版在线观看 | 精品国产91 | 国产精品久久久久久久久久免费看 | 免费成人在线网站 | 日韩视频在线一区二区 | 一区二区三区免费视频网站 | 午夜久久久| 精品视频在线观看一区二区三区 | 久久久精品一区二区 | 黄片毛片一级 | 久久久精品综合 | 在线观看中文 | 国产精品一区二区不卡 | 国产视频一区二区三区四区 | 久久久精品欧美一区二区免费 | 久久久99久久久国产自输拍 | 欧美激情在线狂野欧美精品 | 国产一区二区在线播放 | 亚洲毛片网站 | 国产激情性色视频在线观看 | 91看片网 | 波多野结衣先锋影音 | 91精品久久久久久久久久入口 | 国产一区在线视频 | 岛国一区 | 国产午夜精品一区二区三区视频 | 亚洲社区在线观看 | 日本一区二区三区在线视频 | 国产激情精品 | 欧美一级小视频 | 亚洲91| 超碰国产在线 | 国产成人99久久亚洲综合精品 | 国产精品日日夜夜 | 成人av在线网 | 在线观看免费av网站 | 一级片网 | 色999精品 | 亚洲视频观看 | 久久久精品网站 | 亚洲一区二区在线 | 国产精品久久国产精品 | 国产在线一区二区三区 | 宅男lu666噜噜噜在线观看 | 久久视频在线 | 日韩在线观看视频一区 | 国产单男| 欧美日韩一区二区视频在线观看 | 久久网页 | 99精品久久久久久久免费看蜜月 | 日韩精品在线观看视频 |