2019-11-07

Python GUI之tkinter窗口視窗教程大集合--轉(zhuǎn)載收藏(https://blog.csdn.net/ahilll/article/details/81531587)

二掰派、Tkinter 是什么

  三、Tkinter 控件詳細(xì)介紹

    1. Tkinter 模塊元素簡要說明

    2. 常用窗口部件及簡要說明:

  四雇逞、動手實(shí)踐學(xué)習(xí)

    1. 創(chuàng)建主窗口及Label部件(標(biāo)簽)創(chuàng)建使用

    2. Button窗口部件

    3. Entry窗口部件

    4. Text窗口部件

    5. Listbox窗口部件

    6.?Radiobutton窗口部件

    7.?Checkbutton窗口部件?

    8.?Scale窗口部件

    9.?Canvas窗口部件

    10.?Menu窗口部件

    11.?Frame?窗口部件

    12.?messageBox窗口部件

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

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

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

二哟旗、Tkinter是什么

  Tkinter 是使用 python 進(jìn)行窗口視窗設(shè)計的模塊奏属。Tkinter模塊("Tk 接口")是Python的標(biāo)準(zhǔn)Tk

GUI工具包的接口。作為?python 特定的GUI界面缰雇,是一個圖像的窗口皆串,tkinter是python

自帶的淹办,可以編輯的GUI界面,我們可以用GUI

實(shí)現(xiàn)很多直觀的功能恶复,比如想開發(fā)一個計算器怜森,如果只是一個程序輸入齐遵,輸出窗口的話,是沒用用戶體驗的塔插。所有開發(fā)一個圖像化的小窗口,就是必要的拓哟。

  對于稍有GUI編程經(jīng)驗的人來說想许,Python的Tkinter界面庫是非常簡單的。python的GUI庫非常多断序,選擇Tkinter流纹,一是最為簡單,二是自帶庫违诗,不需下載安裝漱凝,隨時使用,三則是從需求出發(fā)诸迟,Python作為一種腳本語言茸炒,一種膠水語言,一般不會用它來開發(fā)復(fù)雜的桌面應(yīng)用阵苇,它并不具備這方面的優(yōu)勢壁公,使用Python,可以把它作為一個靈活的工具绅项,而不是作為主要開發(fā)語言紊册,那么在工作中,需要制作一個小工具快耿,肯定是需要有界面的囊陡,不僅自己用,也能分享別人使用掀亥,在這種需求下撞反,Tkinter是足夠勝任的!

  這篇文章主要做一個簡單概述和實(shí)踐編程铺浇,對于從沒有接觸過GUI的新手痢畜,在腦中樹立一個基本的界面編程概念,同時自己也能學(xué)會如何簡單的實(shí)現(xiàn)一些小的圖形窗口功能鳍侣。

  對于Tkinter編程丁稀,可以用兩個比喻來理解:

第一個,作畫倚聚。我們都見過美術(shù)生寫生的情景线衫,先支一個畫架,放上畫板惑折,蒙上畫布授账,構(gòu)思內(nèi)容枯跑,用鉛筆畫草圖,組織結(jié)構(gòu)和比例白热,調(diào)色板調(diào)色敛助,最后畫筆勾勒。相應(yīng)的屋确,對應(yīng)到tkinter編程纳击,那么我們的顯示屏就是支起來的畫架,根窗體就是畫板攻臀,在tkinter中則是Toplevel焕数,畫布就是tkinter中的容器(Frame),畫板上可以放很多張畫布(Convas)刨啸,tkinter中的容器中也可以放很多個容器堡赔,繪畫中的構(gòu)圖布局則是tkinter中的布局管理器(幾何管理器),繪畫的內(nèi)容就是tkinter中的一個個小組件设联,一幅畫由許多元素構(gòu)成善已,而我們的GUI界面,就是有一個個組件拼裝起來的离例,它們就是widget雕拼。

第二個,我們小時候都玩過積木粘招,只要發(fā)揮創(chuàng)意啥寇,相同的積木可以堆出各種造型。tkinter的組件也可以看做一個個積木洒扎,形狀或許不同辑甜,其本質(zhì)都是一樣的,就是一個積木袍冷,不管它長什么樣子磷醋,它始終就是積木!所以這些小組件都有許多共性胡诗,另外邓线,個人認(rèn)為,學(xué)習(xí)界面編程煌恢,最重要的不是一開始學(xué)習(xí)每個積木的樣子骇陈,不是學(xué)習(xí)每個組件怎么用,而是這些組件該怎么放瑰抵。初始學(xué)習(xí)中你雌,怎么放遠(yuǎn)遠(yuǎn)比怎么用重要的多。網(wǎng)上有大量的文章資料二汛,基本全是介紹組件怎么用的婿崭,對于怎么放拨拓,也就是tkinter中的布局管理器,都是一筆帶過氓栈,這對初學(xué)者有點(diǎn)本末倒置渣磷,或許絕大部分是轉(zhuǎn)載的原因吧,極少是自己真正寫的授瘦。組件怎么用不是最迫切的幸海,用到的時候再去了解也不遲,邊用邊學(xué)反而更好奥务。因此我將專門寫一章,詳細(xì)介紹布局管理器的使用袜硫。

三氯葬、Tkinter 控件詳細(xì)介紹

1. Tkinter 模塊元素簡要說明


2. 常用窗口部件及簡要說明:

  Tkinter支持16個核心的窗口部件,這個16個核心窗口部件類簡要描述如下:

Button:一個簡單的按鈕婉陷,用來執(zhí)行一個命令或別的操作帚称。

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

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

Entry:文本輸入域妄讯。

Frame:一個容器窗口部件孩锡。幀可以有邊框和背景,當(dāng)創(chuàng)建一個應(yīng)用程序或dialog(對話)版面時亥贸,幀被用來組織其它的窗口部件躬窜。

Label:顯示一個文本或圖象。

Listbox:顯示供選方案的一個列表炕置。listbox能夠被配置來得到radiobutton或checklist的行為荣挨。

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

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

Message:顯示一文本甚纲。類似label窗口部件厕倍,但是能夠自動地調(diào)整文本到給定的寬度或比率。

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

Scale:允許你通過滑塊來設(shè)置一數(shù)字值组民。

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

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

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

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

注意在Tkinter中窗口部件類沒有分級憨颠;所有的窗口部件類在樹中都是兄弟關(guān)系。

所有這些窗口部件提供了Misc和幾何管理方法积锅、配置管理方法和部件自己定義的另外的方法爽彤。此外,Toplevel類也提供窗口管理接口缚陷。這意味一個典型的窗口部件類提供了大約150種方法适篙。

四、動手實(shí)踐學(xué)習(xí)

1. 創(chuàng)建主窗口及Label部件(標(biāo)簽)創(chuàng)建使用

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

 示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步翁都,實(shí)例化object碍论,建立窗口window

window = tk.Tk()

# 第2步,給窗口的可視化起名字

window.title('My Window')

# 第3步柄慰,設(shè)定窗口的大小(長 * 寬)

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)

# 說明: bg為背景坐搔,font為字體藏研,width為長,height為高概行,這里的長和高是字符的長和高唇辨,比如height=2,就是標(biāo)簽有2個字符這么高

# 第5步安拟,放置標(biāo)簽

l.pack()# Label內(nèi)容content區(qū)域放置位置薄嫡,自動調(diào)節(jié)尺寸

# 放置lable的方法有:1)l.pack(); 2)l.place();

# 第6步秕脓,主窗口循環(huán)顯示

window.mainloop()

# 注意透乾,loop因為是循環(huán)的意思,window.mainloop就會讓window不斷的刷新,如果沒有mainloop,就是一個靜態(tài)的window,傳入進(jìn)去的值就不會有循環(huán),mainloop就相當(dāng)于一個很大的while循環(huán)腹尖,有個while,每點(diǎn)擊一次就會更新一次伐脖,所以我們必須要有循環(huán)

# 所有的窗口文件都必須有類似的mainloop函數(shù)热幔,mainloop是窗口文件的關(guān)鍵的關(guān)鍵。

  測試效果:

2. Button窗口部件

  簡單說明:

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

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

  什么時候用按鈕部件

  簡言之,按鈕部件用來讓用戶說“馬上給我執(zhí)行這個任務(wù)”坪它,通常我們用顯示在按鈕上的文本或圖象來提示骤竹。按鈕通常用在工具條中或應(yīng)用程序窗口中,并且用來接收或忽略輸入在對話框中的數(shù)據(jù)往毡。關(guān)于按鈕和輸入的數(shù)據(jù)的配合蒙揣,可以參看Checkbutton和Radiobutton部件。

  如何創(chuàng)建:

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

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

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

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

?  示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步葱色,實(shí)例化object递宅,建立窗口window

window = tk.Tk()

# 第2步,給窗口的可視化起名字

window.title('My Window')

# 第3步,設(shè)定窗口的大小(長 * 寬)

window.geometry('500x300')# 這里的乘是小x

# 第4步办龄,在圖形界面上設(shè)定標(biāo)簽

var = tk.StringVar()# 將label標(biāo)簽的內(nèi)容設(shè)置為字符類型烘绽,用var來接收hit_me函數(shù)的傳出內(nèi)容用以顯示在標(biāo)簽上

l = tk.Label(window, textvariable=var, bg='green', fg='white', font=('Arial',12), width=30, height=2)

# 說明: bg為背景,fg為字體顏色土榴,font為字體诀姚,width為長,height為高玷禽,這里的長和高是字符的長和高赫段,比如height=2,就是標(biāo)簽有2個字符這么高

l.pack()

# 定義一個函數(shù)功能(內(nèi)容自己自由編寫),供點(diǎn)擊Button按鍵時調(diào)用矢赁,調(diào)用命令參數(shù)command=函數(shù)名

on_hit =False

defhit_me():

globalon_hit

ifon_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()

測試效果:

3. Entry窗口部件

  簡單說明:

  Entry是tkinter類中提供的的一個單行文本輸入域撩银,用來輸入顯示一行文本给涕,收集鍵盤輸入(類似 HTML 中的 text)。

  什么時候用:

  需要用戶輸入用戶信息時额获,比如我們平時使用軟件够庙、登錄網(wǎng)頁時,用戶交互界面讓我們登錄賬戶信息等時候可以用到抄邀。

 示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步耘眨,實(shí)例化object,建立窗口window

window = tk.Tk()

# 第2步境肾,給窗口的可視化起名字

window.title('My Window')

# 第3步剔难,設(shè)定窗口的大小(長 * 寬)

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()

測試效果:

4. Text窗口部件

  簡單說明:

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

  什么時候用:

  在需要顯示編輯用戶结闸、產(chǎn)品多行信息時,比如顯示用戶詳細(xì)描述文字酒朵,產(chǎn)品簡介等等桦锄,支持隨時編輯。

 示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步蔫耽,實(shí)例化object结耀,建立窗口window

window = tk.Tk()

# 第2步留夜,給窗口的可視化起名字

window.title('My Window')

# 第3步,設(shè)定窗口的大小(長 * 寬)

window.geometry('500x300')# 這里的乘是小x

# 第4步图甜,在圖形界面上設(shè)定輸入框控件entry框并放置

e = tk.Entry(window, show =None)#顯示成明文形式

e.pack()

# 第5步碍粥,定義兩個觸發(fā)事件時的函數(shù)insert_point和insert_end(注意:因為Python的執(zhí)行順序是從上往下,所以函數(shù)一定要放在按鈕的上面)

definsert_point():# 在鼠標(biāo)焦點(diǎn)處插入輸入內(nèi)容

? ? var = e.get()

t.insert('insert', var)

definsert_end():# 在文本框內(nèi)容最后接著插入輸入內(nèi)容

? ? var = e.get()

t.insert('end', var)

# 第6步黑毅,創(chuàng)建并放置兩個按鈕分別觸發(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)建并放置一個多行文本框text用以顯示,指定height=3為文本框是三個字符高度

t = tk.Text(window, height=3)

t.pack()

# 第8步矿瘦,主窗口循環(huán)顯示

window.mainloop()

  測試效果:

5. Listbox窗口部件

  簡單說明:

  Text是tkinter類中提供的的列表框部件枕面,顯示供選方案的一個列表。listbox能夠被配置來得到radiobutton或checklist的行為缚去。

  什么時候用:

  在有一個很多內(nèi)容選項組成的列表提供用戶選擇時會用到潮秘。

 示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步,實(shí)例化object易结,建立窗口window

window = tk.Tk()

# 第2步枕荞,給窗口的可視化起名字

window.title('My Window')

# 第3步,設(shè)定窗口的大小(長 * 寬)

window.geometry('500x300')# 這里的乘是小x

# 第4步搞动,在圖形界面上創(chuàng)建一個標(biāo)簽label用以顯示并放置

var1 = tk.StringVar()# 創(chuàng)建變量躏精,用var1用來接收鼠標(biāo)點(diǎn)擊具體選項的內(nèi)容

l = tk.Label(window, bg='green', fg='yellow',font=('Arial',12), width=10, textvariable=var1)

l.pack()

# 第6步,創(chuàng)建一個方法用于按鈕的點(diǎn)擊事件

defprint_selection():

value = lb.get(lb.curselection())# 獲取當(dāng)前選中的文本

var1.set(value)# 為label設(shè)置值

# 第5步鹦肿,創(chuàng)建一個按鈕并放置矗烛,點(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)建Listbox

lb = tk.Listbox(window, listvariable=var2)#將var2的值賦給Listbox

# 創(chuàng)建一個list并將值循環(huán)添加到Listbox控件中

list_items = [11,22,33,44]

foriteminlist_items:

lb.insert('end', item)# 從最后一個位置開始加入值

lb.insert(1,'first')# 在第一個位置加入'first'字符

lb.insert(2,'second')# 在第二個位置加入'second'字符

lb.delete(2)# 刪除第二個位置的字符

lb.pack()

# 第8步狮惜,主窗口循環(huán)顯示

window.mainloop()

  測試效果:

6. Radiobutton窗口部件

  簡單說明:

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

  什么時候用:

  在有一個很多內(nèi)容選項組成的選項列表提供用戶選擇時會用到筏餐,用戶一次只能選擇其中一個开泽,不能多選。

 示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步魁瞪,實(shí)例化object穆律,建立窗口window

window = tk.Tk()

# 第2步,給窗口的可視化起名字

window.title('My Window')

# 第3步导俘,設(shè)定窗口的大小(長 * 寬)

window.geometry('500x300')# 這里的乘是小x

# 第4步峦耘,在圖形界面上創(chuàng)建一個標(biāo)簽label用以顯示并放置

var = tk.StringVar()# 定義一個var用來將radiobutton的值和Label的值聯(lián)系在一起.

l = tk.Label(window, bg='yellow', width=20, text='empty')

l.pack()

# 第6步,定義選項觸發(fā)函數(shù)功能

defprint_selection():

l.config(text='you have selected '+ var.get())

# 第5步旅薄,創(chuàng)建三個radiobutton選項辅髓,其中variable=var, value='A'的意思就是,當(dāng)我們鼠標(biāo)選中了其中一個選項,把value的值A(chǔ)放到變量var中洛口,然后賦值給variable

r1 = 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()

  測試效果:

7.?Checkbutton窗口部件

  簡單說明:

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

  什么時候用:

  在有一個很多內(nèi)容選項組成的選項列表提供用戶選擇時會用到挺举,用戶一次可以選擇多個杀赢。

 示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步,實(shí)例化object豹悬,建立窗口window

window = tk.Tk()

# 第2步葵陵,給窗口的可視化起名字

window.title('My Window')

# 第3步,設(shè)定窗口的大小(長 * 寬)

window.geometry('500x300')# 這里的乘是小x

# 第4步瞻佛,在圖形界面上創(chuàng)建一個標(biāo)簽label用以顯示并放置

l = tk.Label(window, bg='yellow', width=20, text='empty')

l.pack()

# 第6步脱篙,定義觸發(fā)函數(shù)功能

defprint_selection():

if(var1.get() ==1) & (var2.get() ==0):# 如果選中第一個選項,未選中第二個選項

l.config(text='I love only Python ')

elif(var1.get() ==0) & (var2.get() ==1):# 如果選中第二個選項伤柄,未選中第一個選項

l.config(text='I love only C++')

elif(var1.get() ==0) & (var2.get() ==0):# 如果兩個選項都未選中

l.config(text='I do not love either')

else:

l.config(text='I love both')# 如果兩個選項都選中

# 第5步绊困,定義兩個Checkbutton選項并放置

var1 = tk.IntVar()# 定義var1和var2整型變量用來存放選擇行為返回值

var2 = tk.IntVar()

c1 = tk.Checkbutton(window, text='Python',variable=var1, onvalue=1, offvalue=0, command=print_selection)# 傳值原理類似于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()

  測試效果:

8.?Scale窗口部件

  簡單說明:

Scale:?尺度(拉動條)适刀,允許你通過滑塊來設(shè)置一數(shù)字值秤朗。

  什么時候用:

  在需要用戶給出評價等級,或者給出一個評價分?jǐn)?shù)笔喉,或者拉動滑動條提供一個具體的數(shù)值等等取视。

 示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步,實(shí)例化object常挚,建立窗口window

window = tk.Tk()

# 第2步作谭,給窗口的可視化起名字

window.title('My Window')

# 第3步,設(shè)定窗口的大小(長 * 寬)

window.geometry('500x300')# 這里的乘是小x

# 第4步奄毡,在圖形界面上創(chuàng)建一個標(biāo)簽label用以顯示并放置

l = tk.Label(window, bg='green', fg='white', width=20, text='empty')

l.pack()

# 第6步折欠,定義一個觸發(fā)函數(shù)功能

defprint_selection(v):

l.config(text='you have selected '+ v)

# 第5步,創(chuàng)建一個尺度滑條吼过,長度200字符锐秦,從0開始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()

  測試效果:

9.?Canvas窗口部件

  簡單說明:

Canvas:畫布趟佃,提供繪圖功能(直線扇谣、橢圓慷垮、多邊形、矩形) 可以包含圖形或位圖揍堕,用來繪制圖表和圖料身,創(chuàng)建圖形編輯器,實(shí)現(xiàn)定制窗口部件衩茸。

  什么時候用:

  在比如像用戶交互界面等芹血,需要提供設(shè)計的圖標(biāo)、圖形楞慈、logo等信息是可以用到畫布幔烛。

 示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步,實(shí)例化object囊蓝,建立窗口window

window = tk.Tk()

# 第2步饿悬,給窗口的可視化起名字

window.title('My Window')

# 第3步,設(shè)定窗口的大小(長 * 寬)

window.geometry('500x300')# 這里的乘是小x

# 第4步聚霜,在圖形界面上創(chuàng)建 500 * 200 大小的畫布并放置各種元素

canvas = tk.Canvas(window, bg='green', height=200, width=500)

# 說明圖片位置狡恬,并導(dǎo)入圖片到畫布上

image_file = tk.PhotoImage(file='pic.gif')# 圖片位置(相對路徑,與.py文件同一文件夾下蝎宇,也可以用絕對路徑弟劲,需要給定圖片具體絕對路徑)

image = canvas.create_image(250,0, anchor='n',image=image_file)# 圖片錨定點(diǎn)(n圖片頂端的中間點(diǎn)位置)放在畫布(250,0)坐標(biāo)處

# 定義多邊形參數(shù),然后在畫布上畫出指定圖形

x0, y0, x1, y1 =100,100,150,150

line = canvas.create_line(x0-50, y0-50, x1-50, y1-50)# 畫直線

oval = canvas.create_oval(x0+120, y0+50, x1+120, y1+50, fill='yellow')# 畫圓 用黃色填充

arc = canvas.create_arc(x0, y0+50, x1, y1+50, start=0, extent=180)# 畫扇形 從0度打開收到180度結(jié)束

rect = canvas.create_rectangle(330,30,330+20,30+20)# 畫矩形正方形

canvas.pack()

# 第6步姥芥,觸發(fā)函數(shù)兔乞,用來一定指定圖形

defmoveit():

canvas.move(rect,2,2)# 移動正方形rect(也可以改成其他圖形名字用以移動一起圖形、元素)凉唐,按每次(x=2, y=2)步長進(jìn)行移動

# 第5步庸追,定義一個按鈕用來移動指定圖形的在畫布上的位置

b = tk.Button(window, text='move item',command=moveit).pack()

# 第7步,主窗口循環(huán)顯示

window.mainloop()

  所用圖片:

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

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

  測試效果:

10.?Menu窗口部件

  簡單說明:

Menu:菜單條绘沉,用來實(shí)現(xiàn)下拉和彈出式菜單煎楣,點(diǎn)下菜單后彈出的一個選項列表,用戶可以從中選擇

  什么時候用:

  在比如像軟件或網(wǎng)頁交互界面等,需要提供菜單選項功能提供用戶選擇菜單選項功能時用到车伞。

 示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步择懂,實(shí)例化object,建立窗口window

window = tk.Tk()

# 第2步另玖,給窗口的可視化起名字

window.title('My Window')

# 第3步困曙,設(shè)定窗口的大小(長 * 寬)

window.geometry('500x300')# 這里的乘是小x

# 第4步表伦,在圖形界面上創(chuàng)建一個標(biāo)簽用以顯示內(nèi)容并放置

l = tk.Label(window, text='? ? ? ', bg='green')

l.pack()

# 第10步,定義一個函數(shù)功能慷丽,用來代表菜單選項的功能蹦哼,這里為了操作簡單,定義的功能比較簡單

counter =0

defdo_job():

globalcounter

l.config(text='do '+ str(counter))

counter +=1

# 第5步要糊,創(chuàng)建一個菜單欄纲熏,這里我們可以把他理解成一個容器,在窗口的上方

menubar = tk.Menu(window)

# 第6步锄俄,創(chuàng)建一個File菜單項(默認(rèn)不下拉局劲,下拉內(nèi)容包括New,Open奶赠,Save鱼填,Exit功能項)

filemenu = tk.Menu(menubar, tearoff=0)

# 將上面定義的空菜單命名為File,放在菜單欄中毅戈,就是裝入那個容器中

menubar.add_cascade(label='File', menu=filemenu)

# 在File中加入New苹丸、Open、Save等小菜單苇经,即我們平時看到的下拉菜單谈跛,每一個小菜單對應(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()# 添加一條分隔線

filemenu.add_command(label='Exit', command=window.quit)# 用tkinter里面自帶的quit()函數(shù)

# 第7步塑陵,創(chuàng)建一個Edit菜單項(默認(rèn)不下拉感憾,下拉內(nèi)容包括Cut,Copy令花,Paste功能項)

editmenu = tk.Menu(menubar, tearoff=0)

# 將上面定義的空菜單命名為 Edit阻桅,放在菜單欄中,就是裝入那個容器中

menubar.add_cascade(label='Edit', menu=editmenu)

# 同樣的在 Edit 中加入Cut兼都、Copy嫂沉、Paste等小命令功能單元,如果點(diǎn)擊這些單元, 就會觸發(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)建第二級菜單趟章,即菜單項里面的菜單

submenu = tk.Menu(filemenu)# 和上面定義菜單一樣,不過此處實(shí)在File上創(chuàng)建一個空的菜單

filemenu.add_cascade(label='Import', menu=submenu, underline=0)# 給放入的菜單submenu命名為Import

# 第9步慎王,創(chuàng)建第三級菜單命令蚓土,即菜單項里面的菜單項里面的菜單命令(有點(diǎn)拗口,笑~~~)

submenu.add_command(label='Submenu_1', command=do_job)# 這里和上面創(chuàng)建原理也一樣赖淤,在Import菜單項中加入一個小菜單命令Submenu_1

# 第11步蜀漆,創(chuàng)建菜單欄完成后,配置讓菜單欄menubar顯示出來

window.config(menu=menubar)

# 第12步咱旱,主窗口循環(huán)顯示

window.mainloop()

  測試效果:

11.?Frame?窗口部件

  簡單說明:

  Frame:框架确丢,用來承載放置其他GUI元素绷耍,就是一個容器,是一個在 Windows 上分離小區(qū)域的部件, 它能將 Windows

分成不同的區(qū),然后存放不同的其他部件. 同時一個 Frame 上也能再分成兩個 Frame, Frame 可以認(rèn)為是一種容器.

  什么時候用:

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

 示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步描函,實(shí)例化object病袄,建立窗口window

window = tk.Tk()

# 第2步,給窗口的可視化起名字

window.title('My Window')

# 第3步赘阀,設(shè)定窗口的大小(長 * 寬)

window.geometry('500x300')# 這里的乘是小x

# 第4步益缠,在圖形界面上創(chuàng)建一個標(biāo)簽用以顯示內(nèi)容并放置

tk.Label(window, text='on the window', bg='red', font=('Arial',16)).pack()# 和前面部件分開創(chuàng)建和放置不同,其實(shí)可以創(chuàng)建和放置一步完成

# 第5步基公,創(chuàng)建一個主frame幅慌,長在主window窗口上

frame = tk.Frame(window)

frame.pack()

# 第6步,創(chuàng)建第二層框架frame轰豆,長在主框架frame上面

frame_l = tk.Frame(frame)# 第二層frame胰伍,左frame,長在主frame上

frame_r = tk.Frame(frame)# 第二層frame酸休,右frame骂租,長在主frame上

frame_l.pack(side='left')

frame_r.pack(side='right')

# 第7步,創(chuàng)建三組標(biāo)簽斑司,為第二層frame上面的內(nèi)容渗饮,分為左區(qū)域和右區(qū)域,用不同顏色標(biāo)識

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()

  測試效果:

12.?messageBox窗口部件

  簡單說明:

messageBox:消息框互站,用于顯示你應(yīng)用程序的消息框。(Python2中為tkMessagebox)僵缺,其實(shí)這里的messageBox就是我們平時看到的彈窗胡桃。 我們首先需要定義一個觸發(fā)功能,來觸發(fā)這個彈窗磕潮,這里我們就放上以前學(xué)過的button按鈕翠胰,通過觸發(fā)功能,調(diào)用messagebox吧自脯,點(diǎn)擊button按鈕就會彈出提示對話框之景。下面給出messagebox提示信息的幾種形式:

tkinter.messagebox.showinfo(title='Hi', message='你好!')# 提示信息對話窗

tkinter.messagebox.showwarning(title='Hi', message='有警告冤今!')# 提出警告對話窗

tkinter.messagebox.showerror(title='Hi', message='出錯了闺兢!')# 提出錯誤對話窗

print(tkinter.messagebox.askquestion(title='Hi', message='你好茂缚!'))# 詢問選擇對話窗return 'yes', 'no'

print(tkinter.messagebox.askyesno(title='Hi', message='你好戏罢!'))# return 'True', 'False'

print(tkinter.messagebox.askokcancel(title='Hi', message='你好屋谭!'))# return 'True', 'False'

  什么時候用:

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

 示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

importtkinter.messagebox# 要使用messagebox先要導(dǎo)入模塊

# 第1步,實(shí)例化object讲岁,建立窗口window

window = tk.Tk()

# 第2步我擂,給窗口的可視化起名字

window.title('My Window')

# 第3步,設(shè)定窗口的大小(長 * 寬)

window.geometry('500x300')# 這里的乘是小x

# 第5步缓艳,定義觸發(fā)函數(shù)功能

defhit_me():

tkinter.messagebox.showinfo(title='Hi', message='你好校摩!')# 提示信息對話窗

# tkinter.messagebox.showwarning(title='Hi', message='有警告!')? ? ? # 提出警告對話窗

# tkinter.messagebox.showerror(title='Hi', message='出錯了阶淘!')? ? ? ? # 提出錯誤對話窗

# print(tkinter.messagebox.askquestion(title='Hi', message='你好衙吩!'))? # 詢問選擇對話窗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)建一個標(biāo)簽用以顯示內(nèi)容并放置

tk.Button(window, text='hit me', bg='green', font=('Arial',14), command=hit_me).pack()

# 第6步,主窗口循環(huán)顯示

window.mainloop()

  測試效果:

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

  參考來源:

The Grid Geometry Manager

The Pack Geometry Manager

The Place Geometry Manager

  1. Grid:The Grid Geometry Manager

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

foriinrange(3):

forjinrange(3):

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

  以上的代碼就是創(chuàng)建一個三行三列的表格摹芙,其實(shí) grid 就是用表格的形式定位的。這里的參數(shù) row 為行宛瞄,colum 為列浮禾,padx

就是單元格左右間距,pady 就是單元格上下間距份汗,ipadx是單元格內(nèi)部元素與單元格的左右間距伐厌,ipady是單元格內(nèi)部元素與單元格的上下間距。

  示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步裸影,實(shí)例化object挣轨,建立窗口window

window = tk.Tk()

# 第2步,給窗口的可視化起名字

window.title('My Window')

# 第3步轩猩,設(shè)定窗口的大小(長 * 寬)

window.geometry('500x300')# 這里的乘是小x

# 第4步卷扮,grid 放置方法

foriinrange(3):

forjinrange(3):

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

# 第5步,主窗口循環(huán)顯示

window.mainloop()

  測試效果:

  2. Pack:The Pack Geometry Manager

?  我們常用的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')# 右

   示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步均践,實(shí)例化object晤锹,建立窗口window

window = tk.Tk()

# 第2步,給窗口的可視化起名字

window.title('My Window')

# 第3步彤委,設(shè)定窗口的大小(長 * 寬)

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()

  測試效果:

  3. Place:The Place Geometry Manager

?  再接下來我們來看place(), 這個比較容易理解,就是給精確的坐標(biāo)來定位车遂,如此處給的(50, 100)封断,就是將這個部件放在坐標(biāo)為(x=50, y=100)的這個位置, 后面的參數(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)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

# 第1步坡疼,實(shí)例化object,建立窗口window

window = tk.Tk()

# 第2步衣陶,給窗口的可視化起名字

window.title('My Window')

# 第3步柄瑰,設(shè)定窗口的大小(長 * 寬)

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()

  測試效果:

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

  編寫一個用戶登錄界面,用戶可以登錄賬戶信息译断,如果賬戶已經(jīng)存在详囤,可以直接登錄,登錄名或者登錄密碼輸入錯誤會提示镐作,如果賬戶不存在藏姐,提示用戶注冊,點(diǎn)擊注冊進(jìn)去注冊頁面该贾,輸入注冊信息羔杨,確定后便可以返回登錄界面進(jìn)行登錄。

  示例代碼:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# author:洪衛(wèi)

importtkinterastk# 使用Tkinter前需要先導(dǎo)入

importtkinter.messagebox

importpickle

# 第1步杨蛋,實(shí)例化object兜材,建立窗口window

window = tk.Tk()

# 第2步,給窗口的可視化起名字

window.title('Wellcome to Hongwei Website')

# 第3步逞力,設(shè)定窗口的大小(長 * 寬)

window.geometry('400x300')# 這里的乘是小x

# 第4步曙寡,加載 wellcome image

canvas = 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步,用戶信息

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步寇荧,用戶登錄輸入框entry

# 用戶名

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)

# 用戶密碼

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步举庶,定義用戶登錄功能

defusr_login():

# 這兩行代碼就是獲取用戶輸入的usr_name和usr_pwd

? ? usr_name = var_usr_name.get()

? ? usr_pwd = var_usr_pwd.get()

# 這里設(shè)置異常捕獲,當(dāng)我們第一次訪問用戶信息文件時是不存在的揩抡,所以這里設(shè)置異常捕獲户侥。

# 中間的兩行就是我們的匹配,即程序?qū)⑤斎氲男畔⒑臀募械男畔⑵ヅ洹?/p>

try:

withopen('usrs_info.pickle','rb')asusr_file:

? ? ? ? ? ? usrs_info = pickle.load(usr_file)

exceptFileNotFoundError:

# 這里就是我們在沒有讀取到`usr_file`的時候峦嗤,程序會創(chuàng)建一個`usr_file`這個文件蕊唐,并將管理員

# 的用戶和密碼寫入,即用戶名為`admin`密碼為`admin`烁设。

withopen('usrs_info.pickle','wb')asusr_file:

usrs_info = {'admin':'admin'}

? ? ? ? ? ? pickle.dump(usrs_info, usr_file)

usr_file.close()# 必須先關(guān)閉替梨,否則pickle.load()會出現(xiàn)EOFError: Ran out of input

# 如果用戶名和密碼與文件中的匹配成功,則會登錄成功,并跳出彈窗how are you? 加上你的用戶名副瀑。

ifusr_nameinusrs_info:

ifusr_pwd == usrs_info[usr_name]:

tkinter.messagebox.showinfo(title='Welcome', message='How are you? '+ usr_name)

# 如果用戶名匹配成功弓熏,而密碼輸入錯誤,則會彈出'Error, your password is wrong, try again.'

else:

tkinter.messagebox.showerror(message='Error, your password is wrong, try again.')

else:# 如果發(fā)現(xiàn)用戶名不存在

is_sign_up = tkinter.messagebox.askyesno('Welcome俗扇! ','You have not sign up yet. Sign up now?')

# 提示需不需要注冊新用戶

ifis_sign_up:

? ? ? ? ? ? usr_sign_up()

# 第9步硝烂,定義用戶注冊功能

defusr_sign_up():

defsign_to_Hongwei_Website():

# 以下三行就是獲取我們注冊時所輸入的信息

? ? ? ? np = new_pwd.get()

? ? ? ? npf = new_pwd_confirm.get()

? ? ? ? nn = new_name.get()

# 這里是打開我們記錄數(shù)據(jù)的文件箕别,將注冊信息讀出

withopen('usrs_info.pickle','rb')asusr_file:

? ? ? ? ? ? exist_usr_info = pickle.load(usr_file)

# 這里就是判斷铜幽,如果兩次密碼輸入不一致,則提示Error, Password and confirm password must be the same!

ifnp != npf:

tkinter.messagebox.showerror('Error','Password and confirm password must be the same!')

# 如果用戶名已經(jīng)在我們的數(shù)據(jù)文件中串稀,則提示Error, The user has already signed up!

elifnninexist_usr_info:

tkinter.messagebox.showerror('Error','The user has already signed up!')

# 最后如果輸入無以上錯誤除抛,則將注冊輸入的信息記錄到文件當(dāng)中,并提示注冊成功Welcome母截!,You have successfully signed up!到忽,然后銷毀窗口。

else:

? ? ? ? ? ? exist_usr_info[nn] = np

withopen('usrs_info.pickle','wb')asusr_file:

? ? ? ? ? ? ? ? pickle.dump(exist_usr_info, usr_file)

tkinter.messagebox.showinfo('Welcome','You have successfully signed up!')

# 然后銷毀窗口清寇。

? ? ? ? ? ? window_sign_up.destroy()

# 定義長在窗口上的窗口

? ? window_sign_up = tk.Toplevel(window)

window_sign_up.geometry('300x200')

window_sign_up.title('Sign up window')

new_name = tk.StringVar()# 將輸入的注冊名賦值給變量

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)建一個注冊名的`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()

  測試效果:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市盔夜,隨后出現(xiàn)的幾起案子负饲,更是在濱河造成了極大的恐慌,老刑警劉巖喂链,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件返十,死亡現(xiàn)場離奇詭異,居然都是意外死亡椭微,警方通過查閱死者的電腦和手機(jī)洞坑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝇率,“玉大人检诗,你說我怎么就攤上這事∑敖耍” “怎么了逢慌?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長间狂。 經(jīng)常有香客問我攻泼,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任忙菠,我火速辦了婚禮何鸡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牛欢。我一直安慰自己骡男,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布傍睹。 她就那樣靜靜地躺著娜亿,像睡著了一般禁炒。 火紅的嫁衣襯著肌膚如雪查坪。 梳的紋絲不亂的頭發(fā)上参淹,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機(jī)與錄音访得,去河邊找鬼龙亲。 笑死,一個胖子當(dāng)著我的面吹牛悍抑,可吹牛的內(nèi)容都是我干的鳄炉。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼搜骡,長吁一口氣:“原來是場噩夢啊……” “哼拂盯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起浆兰,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤磕仅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后簸呈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榕订,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年蜕便,在試婚紗的時候發(fā)現(xiàn)自己被綠了劫恒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡轿腺,死狀恐怖两嘴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情族壳,我是刑警寧澤憔辫,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站仿荆,受9級特大地震影響贰您,放射性物質(zhì)發(fā)生泄漏坏平。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一锦亦、第九天 我趴在偏房一處隱蔽的房頂上張望舶替。 院中可真熱鬧,春花似錦杠园、人聲如沸顾瞪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽陈醒。三九已至,卻和暖如春篮绿,著一層夾襖步出監(jiān)牢的瞬間孵延,已是汗流浹背吕漂。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工亲配, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惶凝。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓吼虎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苍鲜。 傳聞我的和親對象是個殘疾皇子思灰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評論 2 361