《Python程序設(shè)計(jì)》課件第7章 tkinter GUI編程_第1頁(yè)
《Python程序設(shè)計(jì)》課件第7章 tkinter GUI編程_第2頁(yè)
《Python程序設(shè)計(jì)》課件第7章 tkinter GUI編程_第3頁(yè)
《Python程序設(shè)計(jì)》課件第7章 tkinter GUI編程_第4頁(yè)
《Python程序設(shè)計(jì)》課件第7章 tkinter GUI編程_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Python程序設(shè)計(jì)第7章tkinterGUI編程【教學(xué)目標(biāo)】

學(xué)習(xí)內(nèi)容tkinter編程基礎(chǔ)tkinter控件對(duì)話框技能目標(biāo)能使用tkinter創(chuàng)建GUI窗口程序能使用tkinter的常用控件編寫(xiě)GUI程序會(huì)運(yùn)用控件幾何位置的設(shè)置方法控制組件位置能使用對(duì)話框?qū)崿F(xiàn)交互界面的功能能為組件添加事件處理函數(shù)并實(shí)現(xiàn)程序運(yùn)行任務(wù)一理財(cái)有風(fēng)險(xiǎn),投資需謹(jǐn)慎

隨著人們理財(cái)意識(shí)不斷提高,一些大學(xué)生也有各種各樣的理財(cái)途徑,比如:銀行存款、基金、投資股票、銀行理財(cái)、國(guó)債等等,理財(cái)有風(fēng)險(xiǎn),投資需謹(jǐn)慎。本次的任務(wù)是使用Python編寫(xiě)GUI存款利息計(jì)算器,實(shí)現(xiàn)輸入本金、年利率和存儲(chǔ)年數(shù)后,計(jì)算利息并輸出?!咎崾尽?/p>

對(duì)于文本用戶界面來(lái)說(shuō),一個(gè)程序需要有輸入、處理及輸出。在一般程序中,通常使用input()函數(shù)、print()函數(shù)來(lái)進(jìn)行數(shù)據(jù)或文件的讀入和寫(xiě)出,而在GUI界面中,常通過(guò)標(biāo)簽控件與輸入控件來(lái)完成輸入輸出。在處理部分,文本用戶界面與圖形用戶界面基本相同,只是圖形用戶界面通常需要按鈕控件等來(lái)觸發(fā)。下面利用文本用戶界面的程序,計(jì)算存款利息,并輸出結(jié)果。7.1tkinter編程基礎(chǔ)

tkinter是Python默認(rèn)的圖形用戶界面(GraphicalUserInterface,GUI)庫(kù),tkinter是Tkinterface的縮寫(xiě)。7.1.1Tkinter庫(kù)基礎(chǔ)1.Tcl、Tk和Tkinter

tkinter庫(kù)是Tck/Tk的Python接口2.使用Tkinter庫(kù)

importtkinter或者fromtkinterimport*3.tkinter程序基本結(jié)構(gòu)

importtkinter #導(dǎo)入tkinter模塊win=tkinter.Tk() #創(chuàng)建主窗口label=tkinter.Label(root,text="你好Tkinter")

#創(chuàng)建標(biāo)簽控件label.pack() #打包標(biāo)簽控件win.mainloop() #開(kāi)始事件循環(huán)4.文件擴(kuò)展名

GUI程序文件擴(kuò)展名可以是.py或.pyw7.1tkinter編程基礎(chǔ)7.1.2Tkinter窗口

tkinter.Tk()方法創(chuàng)建一個(gè)主窗口,也稱根窗口,主窗口只有一個(gè),它是一個(gè)容器,用于包含標(biāo)簽、按鈕、列表框等控件或其他容器,構(gòu)成應(yīng)用程序的主界面。1.使用默認(rèn)主窗口

fromtkinterimport* #導(dǎo)入tkinter模塊label=Label(text="你好Tkinter") #創(chuàng)建標(biāo)簽,此時(shí)會(huì)創(chuàng)建并顯示主窗口label.pack() #打包標(biāo)簽,此時(shí)在主窗口中顯示標(biāo)簽mainloop() #開(kāi)始事件循環(huán)2.窗口主要方法

fromtkinterimport* win=Tk()win.title('窗口1')win.geometry('400×300')7.1tkinter編程基礎(chǔ)7.1.3窗口布局窗口布局指控件在窗口中的排列方式,Tk提供3種布局:Packer、Placer和Grid。

1.Packer布局Packer布局是Tk的一種幾何管理器,它通過(guò)相對(duì)位置控制控件在容器中的位置。因?yàn)榭丶奈恢檬窍鄬?duì)的,因此當(dāng)容器大小發(fā)生變化時(shí),控件會(huì)自動(dòng)調(diào)整位置。在調(diào)用pack()方法打包控件時(shí),控件所在的容器使用Packer布局。pack()方法常用的參數(shù)。7.1tkinter編程基礎(chǔ)7.1.3窗口布局Packer布局示例如下:importtkinterroot=tkinter.Tk()label1=tkinter.Label(root,text="標(biāo)簽1",bg="green",fg="white")label2=tkinter.Label(root,text="標(biāo)簽2",bg="green",fg="white")label3=tkinter.Label(root,text="標(biāo)簽3",bg="black",fg="white")label4=tkinter.Label(root,text="標(biāo)簽4",bg="blue",fg="white")label5=tkinter.Label(root,text="標(biāo)簽5",bg="red",fg="white")label1.pack(side=tkinter.LEFT,fill=tkinter.Y)label2.pack(side=tkinter.RIGHT,fill=tkinter.Y)label3.pack(side=tkinter.TOP,expand=tkinter.YES,fill=tkinter.Y)label4.pack(expand=tkinter.YES,fill=tkinter.BOTH)label5.pack(anchor=tkinter.E)root.mainloop()7.1tkinter編程基礎(chǔ)7.1.3窗口布局

2.Grid布局Grid布局又稱為網(wǎng)格布局,它按照二維表格的形式,將容器劃分為若干行和若干列,行列所在位置為一個(gè)單元格,類(lèi)似于Excel表格。采用grid()方法打包控件時(shí),控件所在的容器使用Grid布局。7.1tkinter編程基礎(chǔ)7.1.3窗口布局Grid布局示例如下:importtkinterroot=tkinter.Tk()labell=tkinter.Label(root,text="標(biāo)簽1",fg='white',bg='black')label2=tkinter.Label(root,text="標(biāo)簽2",fg='red',bg='yellow')label3=tkinter.Label(root,text="標(biāo)簽3",fg='white',bg='green')labell.grid(row=0,column=3) #標(biāo)簽1放在0行3列l(wèi)abel2.grid(row=1,column=2) #標(biāo)簽2放在1行2列l(wèi)abel3.grid(row=1,column=1) #標(biāo)簽3放在1行1列root.mainloop()7.1tkinter編程基礎(chǔ)7.1.3窗口布局

3.Place布局Place布局可以比Grid和Packer布局更精確地控制控件在容器中的位置。在調(diào)用控件的place()方法時(shí),控件所在的容器使用Place布局。Place布局可以與Grid或Packer布局同時(shí)使用。7.1tkinter編程基礎(chǔ)7.1.3窗口布局Place布局示例如下:importtkinterlabel1=tkinter.Label(text="標(biāo)簽1",fg="white",bg="black")label2=tkinter.Label(text="標(biāo)簽2",fg="red",bg="yellow")label3=tkinter.Label(text="標(biāo)簽3",fg="white",bg="green")label1.place(x=0,y=0)label2.place(x=50,y=50)label3.place(relx=0.5,rely=0.2)tkinter.mainloop()7.1tkinter編程基礎(chǔ)7.1.4框架使用框架(Frame)是一個(gè)容器,通常用于對(duì)組件進(jìn)行分組。框架常用選項(xiàng)如下。bd:指定邊框?qū)挾?。relief:指邊框樣式,可用RAISED(凸起)、SUNKEN(凹陷)、FLAT(扁平,默認(rèn)值)、RIDGE(脊?fàn)?、GROOVE(凹槽)和SOLID(實(shí)線)。width、height:設(shè)置寬度和高度,通常被忽略。容器通常根據(jù)內(nèi)容組件的大小自動(dòng)調(diào)整自身大小。7.1tkinter編程基礎(chǔ)7.1.3窗口布局框架使用示例如下:importtkinterroot=tkinter.Tk()frame1=tkinter.Frame(bd=2,relief=tkinter.SUNKEN)frame2=tkinter.Frame(bd=2,relief=tkinter.SUNKEN)labell=tkinter.Label(frame1,text='標(biāo)簽1',fg='white',bg='black')label2=tkinter.Label(frame1,text='標(biāo)簽2',fg='red',bg='yellow')label3=tkinter.Label(frame1,text='標(biāo)簽3',fg='white',bg='green')label4=tkinter.Label(frame2,text='標(biāo)簽4',fg='white',bg='black')label5=tkinter.Label(frame2,text='標(biāo)簽5',fg='red',bg='yellow')label6=tkinter.Label(frame2,text='標(biāo)簽6',fg='white',bg='green')frame1.pack()

#框架1和框架2在默認(rèn)主窗口中使用Packer布局frame2.pack()labell.pack()#標(biāo)簽1、2、3在框架1中使用Packer布局label2.pack(side=tkinter.LEFT)label3.pack(side=tkinter.RIGHT)label4.grid(row=1,column=1)#標(biāo)簽4、5、6在框架2中使用Grid布局label5.grid(row=3,column=4)label6.grid(row=2,column=2)root.mainloop()7.1tkinter編程基礎(chǔ)7.1.5事件處理

事件通常指用戶在窗口中的動(dòng)作,如單擊鼠標(biāo)、按下鍵盤(pán)某個(gè)鍵等。

可用command參數(shù)為控件指定鼠標(biāo)單擊時(shí)執(zhí)行的函數(shù),在發(fā)生事件時(shí)執(zhí)行的函數(shù)稱為事件處理函數(shù),或者叫回調(diào)函數(shù)。部分控件,如單選按鈕、復(fù)選框、標(biāo)尺、滾動(dòng)條等,都支持command參數(shù)。7.1tkinter編程基礎(chǔ)7.1.3窗口布局事件處理示例如下:。importtkinterlabel1=tkinter.Label(text="事件處理")label1.pack()defshowmsg1():label1.config(text="單擊了按鈕1")defshowmsg2():label1.config(text="單擊了按鈕2")bt1=tkinter.Button(text="按鈕1",command=showmsg1)bt2=tkinter.Button(text="按鈕2",command=showmsg2)bt1.pack()bt2.pack()tkinter.mainloop()7.1tkinter編程基礎(chǔ)7.1.5事件處理

command參數(shù)綁定的事件處理函數(shù)不能獲得事件對(duì)象。要獲得事件對(duì)象,需要使用bind()方法為控件綁定事件處理函數(shù),bind()方法接收事件名稱和事件處理函數(shù)名稱作為參數(shù),其基本格式如下。

控件.bind(事件名稱,函數(shù)名稱)7.1tkinter編程基礎(chǔ)7.1.3窗口布局bind()方法使用示例如下:importtkinterlabel1=tkinter.Label(text="事件處理")label1.pack()defshowmsg(event):obj=event.widgetmsg="事件名稱:%s\n控件:%s\n鼠標(biāo)位置:%s,%s"\%(event.type,event.widget['text'],event.x,event.y)label1.config(text=msg)bt1=tkinter.Button(text="按鈕1")bt2=tkinter.Button(text="按鈕2")bt1.bind('<Button-1>',showmsg)bt2.bind('<Button-3>',showmsg)bt1.pack()bt2.pack()tkinter.mainloop()7.2tkinter控件7.2.1tkinter控件簡(jiǎn)介

7.2tkinter控件7.2.1tkinter控件簡(jiǎn)介

tkinter提供了一組通用的屬性來(lái)控制控件的外觀和行為,可在創(chuàng)建控件時(shí)通過(guò)參數(shù)設(shè)置屬性,也可以調(diào)用控件的config()方法來(lái)設(shè)置屬性。1.尺寸設(shè)置

在設(shè)置控件與尺寸相關(guān)的屬性(如邊框?qū)挾萣d、容器的寬度width或高度height等)且直接使用整數(shù)時(shí),其默認(rèn)單位為像素。例如。label1.config(bd=2) #設(shè)置邊框?qū)挾攘?個(gè)像素label2.config(bd='0.2c')#沒(méi)置邊框?qū)挾葹?.2厘米2.顏色設(shè)置

顏色屬性(如背景色、前景色等)可設(shè)置為顏色字符串,字符串中可使用標(biāo)準(zhǔn)顏色名稱或以符號(hào)“#”開(kāi)頭的RGB顏色值。例如。label1.config(bg="000fff")label2.config(bg='blue')7.2tkinter控件7.2.1tkinter控件簡(jiǎn)介3.字體設(shè)置

控件的font屬性用于設(shè)置字體名稱、字體大小和字體特征。font屬性通常為一個(gè)三元組,其基本格式為“(family,size,special)”,其中,family為字體名稱,size為字體大小,special為字體特征。例如。label1.config(font=("仿宋",20,"bolditalicunderlineoverstrike"))4.顯示圖片

在Windows系統(tǒng)中,可調(diào)用tkinter.PhotoImage類(lèi)來(lái)引用文件中的圖片,然后通過(guò)控件的image屬性使用圖片,例如。importtkintertkinter.Tk() #必值先創(chuàng)建主窗體,然后才能調(diào)用PhotoImage()函數(shù)輸出圖片pic=tkinter.PhotoImage(file='D:\python\ch07\birdnest.png')tkinter.Label(image=pic).pack() #在控件中顯示圖片7.2tkinter控件7.2.1tkinter控件簡(jiǎn)介5.使用綁定變量綁定變量比較特殊,它與控件的特定屬性關(guān)聯(lián)在一起,兩者始終保持相同。修改綁定變量的值,其關(guān)聯(lián)的控件屬性也立即變化;修改關(guān)聯(lián)的控件屬性的值,其綁定的變量的值也立即變化。tkinter模塊提供了4種綁定變量:BooleanVar(布爾型)、StringVar(字符串)、IntVar(整數(shù))和DoubleVar(雙精度)。綁定變量的創(chuàng)建方法如下。var=BooleanVar() #布爾型控制變量,默認(rèn)值為0var=StringVar() #字符串控制變量,默認(rèn)值為空字符串var=IntVar() #整數(shù)控制變量,默認(rèn)值為0var=DoubleVar() #雙精度控制變量,默認(rèn)值為0.0為控件綁定變量后,可調(diào)用變量的set()方法設(shè)置變量的值,變量值同步反映到控件。調(diào)用get()方法可通過(guò)綁定變量返回控件的值。7.2tkinter控件7.2.1tkinter控件簡(jiǎn)介綁定變量使用示例如下:importtkintertkinter.Tk()bvar=tkinter.BooleanVar()slabel=tkinter.StringVar()slabel.set("這是一個(gè)標(biāo)簽")tkinter.Label(text='標(biāo)簽',textvariable=slabel).pack()tkinter.Checkbutton(text='復(fù)選框',variable=bvar).pack()defbt1click():bvar.set(True)slabel.set('復(fù)選框被選中,其值為:%s'%bvar.get())defbt2click():bvar.set(False)slabel.set('復(fù)選框被取消,其值為:%s'%bvar.get())bt1=tkinter.Button(text='選中復(fù)選框',command=bt1click)bt2=tkinter.Button(text='取消復(fù)選框',command=bt2click)bt1.pack()bt2.pack()tkinter.mainloop()7.2tkinter控件7.2.2畫(huà)布控件Canvas(1)create_arc(coord,start,extent,fill):創(chuàng)建一個(gè)弧形。參數(shù)coord定義畫(huà)弧形區(qū)塊的左上角與右下角坐標(biāo);參數(shù)start定義畫(huà)弧形區(qū)塊的起始角度(逆時(shí)針?lè)较?;參數(shù)extent定義畫(huà)弧形區(qū)塊的結(jié)束角度(逆時(shí)針?lè)较?:參數(shù)fill定義填滿弧形區(qū)塊的顏色。實(shí)例一繪制一個(gè)弧形,在窗口區(qū)域的(10,50)與(240,210)坐標(biāo)間畫(huà)一個(gè)弧形,起始角度是0度,結(jié)束角度是270度,使用紅色來(lái)填滿弧形區(qū)塊。fromtkinterimport*win=Tk()coord=10,50,240,210canvas=Canvas(win)canvas.create_arc(coord,start=0,extent=270,fill="red")canvas.pack()win.mainloop()實(shí)例二繪制一個(gè)位圖,在窗口區(qū)域的(40,40)坐標(biāo)處,畫(huà)上一個(gè)warning位圖。fromtkinterimport*win=Tk()coord=10,50,240,210canvas=Canvas(win)canvas.create_bitmap(40,40,bitmap="warning")canvas.pack()win.mainloop()(2)create_bitmap(x,y,bitmap):創(chuàng)建一個(gè)位圖。參數(shù)x與y定義位圖的左上角坐標(biāo),參數(shù)bitmap定義位圖的來(lái)源,可為grayl2、gray25、gray50、gray75、hourglass、error、questhead、info、warning與question。也可以直接使用XBM(XBitmap)文件,在XBM文件名稱之前加上一個(gè)@符號(hào),例如bitmap=@hello.xbm。實(shí)例三創(chuàng)建一個(gè)圖片,在窗口區(qū)域的(40,140)坐標(biāo)處,加載一個(gè)相同目錄內(nèi)的圖片文件。fromtkinterimport*win=Tk()img=PhotoImage(file="xin1.gif")canvas=Canvas(win)canvas.create_image(40,140,image=img)canvas.pack()win.mainloop()(3)create_image(x,y,image):創(chuàng)建一個(gè)圖片。參數(shù)x與y定義圖片的左上角坐標(biāo);參數(shù)image定義圖片的來(lái)源,必須是tkinter模塊的BitmapImage或者PhotoImage類(lèi)的實(shí)例變量。實(shí)例四繪制一個(gè)線條,從窗口區(qū)域的(10,10)坐標(biāo)處,畫(huà)一條線到(40,120)坐標(biāo)處,再?gòu)?40,120)坐標(biāo)處,畫(huà)一條線到(230,270)坐標(biāo)處,線條的寬度是3個(gè)像素,線條的顏色是綠色。fromtkinterimport*win=Tk()canvas=Canvas(win)canvas.create_line(10,10,40,120,230,270,width=3,fill="green")canvas.pack()win.mainloop()(4)create_line(x0,yo,x1,y1,...,xn,yn,options):創(chuàng)建一個(gè)線條。參數(shù)x0,y0,x1,y1,...,xn,yn定義線條的坐標(biāo);參數(shù)options可以是width或者fill。width定義線條的寬度,默認(rèn)值是1個(gè)像素。fill定義線條的顏色,默認(rèn)值是black。實(shí)例五繪制一個(gè)圓,在窗口區(qū)域的(10,10)到(240,240)坐標(biāo)處,畫(huà)一個(gè)圓形,圓形的填滿顏色是綠色,外圍顏色是藍(lán)色。fromtkinterimport*win=Tk()canvas=Canvas(win)canvas.create_oval(10,10,240,240,fill="green",outline="blue")canvas.pack()win.mainloop()(5)create_oval(x0,y0,x1,y1,options):創(chuàng)建一個(gè)圓形或者橢圓形。參數(shù)x0與y0定義繪圖區(qū)域的左上角坐標(biāo);參數(shù)x1與y1定義繪圖區(qū)域的右下角坐標(biāo);參數(shù)options可以是fill或者outline。fill定義填滿圓形或者橢圓形的顏色,默認(rèn)值是empty(透明)。outline定義圓形或者橢圓形的外圍顏色。實(shí)例六繪制一個(gè)三角形,在窗口區(qū)域的(10,10)、(320,80)、(210,230)坐標(biāo)處,畫(huà)一個(gè)三角形,多邊形的填滿顏色是綠色,多邊形的外圍顏色是藍(lán)色,多邊形的曲線平滑度是1。fromtkinterimport*win=Tk()canvas=Canvas(win)canvas.create_polygon(10,10,320,80,210,230,outline="blue",splinesteps=1,fill="green")canvas.pack()win.mainloop()(6)create_polygon(x0,y0,x1,y1,...,xn,yn,options):創(chuàng)建一個(gè)至少3個(gè)點(diǎn)的多邊形。參數(shù)x0,y0,x1,y1,..,xn,yn定義多邊形的坐標(biāo);參數(shù)options可以是fill、outline或者splinesteps。fill定義填滿多邊形的顏色,默認(rèn)值是black。outline定義多邊形的外圍顏色,默認(rèn)值是black。splinesteps是一個(gè)整數(shù),定義曲線的平滑度。實(shí)例七繪制一個(gè)矩形,在窗口區(qū)域的(10,10)到(220,20)坐標(biāo)處,畫(huà)一個(gè)矩形,矩形的填滿顏色是紅色,矩形的外圍顏色是空字符串,表示不畫(huà)矩形的外圍。fromtkinterimport*win=Tk()canvas=Canvas(win)canvas.create_rectangle(10,10,220,220,fill="red",outline="")canvas.pack()win.mainloop()(7)create_rectangle(x0,y0,x1,y1,options):創(chuàng)建一個(gè)矩形。參數(shù)x0與y0定義矩形的左上角坐標(biāo);參數(shù)x1與y1定義矩形的右下角坐標(biāo);參數(shù)options可以是fill或是outline。fill定義填滿矩形的顏色,默認(rèn)值是empty(透明)。outline定義矩形的外圍顏色,默認(rèn)值是black。實(shí)例八創(chuàng)建一個(gè)文字字符串,在窗口區(qū)域的(40,40)坐標(biāo)處,畫(huà)一個(gè)文字字符串,文字字符串的顏色是紅色,(40,40)坐標(biāo)是在文字字符串的左邊。fromtkinterimport*win=Tk()canvas=Canvas(win)canvas.create_text(40,40,text="秋風(fēng)起兮白云飛,草木黃落兮雁南歸。",fill="red",anchor=W)canvas.pack()win.mainloop()(8)create_text(x0,y0,text,options):創(chuàng)建一個(gè)文字字符串。參數(shù)x0與y0定義文字字符串的左上角坐標(biāo);參數(shù)text定義文字字符串的文字;參數(shù)options可以是anchor或者fill。anchor定義(x0,y0)在文字字符串內(nèi)的位置,默認(rèn)值是CENTER,可以是N、NE、E、SE、S、SW、W、NW或者CENTER。fill定義文字字符串的顏色,默認(rèn)值是empty(透明)。7.2tkinter控件7.2.3按鈕控件ButtonButton控件用來(lái)創(chuàng)建按鈕,按鈕內(nèi)可以顯示文字或者圖片。Button控件的方法如下。(1)flash():將前景與背景顏色互換來(lái)產(chǎn)生閃爍的效果。(2)invoke():執(zhí)行command屬性所定義的函數(shù)。Button的屬性如下。(1)activebackground:當(dāng)按鈕在作用中時(shí)的背景顏色。(2)activeforeground:當(dāng)按鈕在作用中時(shí)的前景顏色。實(shí)例九文字上添加底線,在按鈕上的第一個(gè)文字上添加底線。fromtkinterimport*win=Tk()bt1=Button(win,text="公司主頁(yè)面",underline=0,command=win.quit)bt1.pack()win.mainloop()7.2tkinter控件7.2.4復(fù)選框控件CheckbuttonCheckbutton控件用來(lái)創(chuàng)建復(fù)選框。Checkbutton控件的屬性如下。(1)onvalue,offvalue:設(shè)置Checkbutton控件的variable屬性所指定的變量所要存儲(chǔ)的數(shù)值。如果復(fù)選框沒(méi)有被勾選,此變量的值為offvalue。如果復(fù)選框被勾選,此變量的值為onvalue。(2)indicatoron:將此屬性設(shè)置成0,可以將整個(gè)控件變成復(fù)選框。Checkbutton控件的方法如下。(1)select():選擇復(fù)選框,并且設(shè)置變量的值為onvalue。實(shí)例十創(chuàng)建3個(gè)復(fù)選框,在窗口區(qū)域內(nèi)創(chuàng)建3個(gè)復(fù)選框,并且將此3個(gè)復(fù)選框靠左對(duì)齊,然后勾選第個(gè)復(fù)選框。fromtkinterimport*win=Tk()check1=Checkbutton(win,text="蘋(píng)果")check2=Checkbutton(win,text="香蕉")check3=Checkbutton(win,text="橘子")check1.select()check1.pack(side=LEFT)check2.pack(side=LEFT)check3.pack(side=LEFT)7.2tkinter控件7.2.5輸入框控件EntryEntry控件用來(lái)在窗體或者窗口內(nèi)創(chuàng)建一個(gè)單行的文本框。Entry控件的屬性如下。textvariable:屬性為用戶輸入的文字或者要顯示在Entry控件內(nèi)的文字。Entry控件的方法如下。get():此方法可以讀取Entry內(nèi)的文字。實(shí)例十一創(chuàng)建一個(gè)簡(jiǎn)單計(jì)算器,在窗口內(nèi)創(chuàng)建一個(gè)窗體,在窗體內(nèi)創(chuàng)建一個(gè)文本框,讓用戶輸入一個(gè)表達(dá)式。在窗體內(nèi)創(chuàng)建一個(gè)按鈕,按下此按鈕后即計(jì)算文本框內(nèi)所輸入的表達(dá)式。在窗體內(nèi)創(chuàng)建一個(gè)文字標(biāo)簽,將表達(dá)式的計(jì)算結(jié)果顯示在此文字標(biāo)簽上。fromtkinterimport*win=Tk()frame=Frame(win) #創(chuàng)建窗體#創(chuàng)建一個(gè)計(jì)算式defcalc():#將用戶輸入的表達(dá)式,計(jì)算結(jié)果后轉(zhuǎn)換成字符串result="="+str(eval(expression.get()))label.config(text=result) #將計(jì)算的結(jié)果顯示在Labe1控件上label=Label(frame) #創(chuàng)建一個(gè)Labelentry=Entry(frame) #創(chuàng)建一個(gè)Entryexpression=StringVar() #讀取用戶輸入的表達(dá)式entry["textvariable"]=expression#將用戶輸入的表達(dá)式顯示在Entry控件上#創(chuàng)建一個(gè)Button控件.當(dāng)用戶輸入完畢后,單擊此按鈕即計(jì)算表達(dá)式的結(jié)果button1=Button(frame,text="等于",command=calc)entry.focus() #設(shè)置Entry控件為焦點(diǎn)所在frame.pack()entry.pack() #Entry控件位于窗體的上方label.pack(side=LEFT) #Label控件位于窗體的左方button1.pack(side=RIGHT) #Button控件位于窗體的右方frame.mainloop() #開(kāi)始程序循環(huán)7.2tkinter控件7.2.6標(biāo)簽控件LabelLabel控件用來(lái)創(chuàng)建一個(gè)顯示方塊,可以在這個(gè)顯示方塊內(nèi)放置文字或者圖片。實(shí)例十二創(chuàng)建一個(gè)優(yōu)化計(jì)算器,在例7-11中將新增一個(gè)按鈕,單擊此新增按鈕后,會(huì)清除表達(dá)式與文字標(biāo)簽的內(nèi)容。fromtkinterimport*win=Tk()frame=Frame(win) #創(chuàng)建窗體#創(chuàng)建一個(gè)計(jì)算式defcalc():#將用戶輸入的表達(dá)式,計(jì)算結(jié)果后轉(zhuǎn)換成字符串result="="+str(eval(expression.get()))label.config(text=result) #將計(jì)算的結(jié)果顯示在Labe1控件上defclear():expression.set("")label.config(text="")label=Label(frame) #創(chuàng)建一個(gè)Labelentry=Entry(frame) #創(chuàng)建一個(gè)Entryexpression=StringVar() #讀取用戶輸入的表達(dá)式entry["textvariable"]=expression#將用戶輸入的表達(dá)式顯示在Entry控件上#創(chuàng)建一個(gè)Button控件,當(dāng)用戶輸入完畢后,單擊此按鈕即計(jì)算表達(dá)式的結(jié)果button1=Button(frame,text="等于",command=calc)button2=Button(frame,text="清除",command=clear)entry.focus()#設(shè)置Entry控件為焦點(diǎn)所在frame.pack()entry.pack() #Entry控件位于窗體的上方label.pack(side=LEFT) #Label控件位于窗體的左方button1.pack(side=RIGHT) #Button控件位于窗體的右方button2.pack(side=RIGHT) #Button控件位于窗體的右方frame.mainloop() #開(kāi)始程序循環(huán)7.2tkinter控件7.2.7列表框控件ListboxListbox控件用來(lái)創(chuàng)建一個(gè)列表框。列表框內(nèi)可以包含許多選項(xiàng),用戶可以只選擇一項(xiàng)或者選擇多項(xiàng)。實(shí)例十三創(chuàng)建一個(gè)列表框,并且插入8個(gè)選項(xiàng)。fromtkinterimport*win=Tk()frame=Frame(win) #創(chuàng)建窗體#創(chuàng)建列表框選項(xiàng)列表name=["香蕉","蘋(píng)果","橘子","西瓜","桃子","菠蘿","柚子","橙子"]listbox=Listbox(frame) #創(chuàng)建Listbox控件listbox.delete(0,END) #清除Listbox控件的內(nèi)容#在Listbox控件內(nèi)插入選項(xiàng)foriinrange(8):listbox.insert(END,name[i])listbox.pack()frame.pack()frame.mainloop() #開(kāi)始程序循環(huán)7.2tkinter控件7.2.8菜單控件MenuMenu控件用來(lái)創(chuàng)建3種類(lèi)型的菜單:pop-up((快捷式菜單)、toplevel(主目錄)和pull-down(下拉式菜單)。實(shí)例十四創(chuàng)建一個(gè)主目錄((toplevel))菜單,并且新增5個(gè)菜單項(xiàng)。fromtkinterimport*importtkinter.messageboxwin=Tk() #創(chuàng)建主窗口#執(zhí)行菜單命令,顯示一個(gè)對(duì)話框defdoSomething():tkinter.messagebox.askokcancel("菜單","你正在選擇菜單命令")mainmenu=Menu(win) #創(chuàng)建一個(gè)主目錄(toplevel)#新增菜單項(xiàng)mainmenu.add_command(label="文件",command=doSomething)mainmenu.add_command(label="編輯",command=doSomething)mainmenu.add_command(label="視圖",command=doSomething)mainmenu.add_command(label="窗口",command=doSomething)mainmenu.add_command(label="幫助",command=doSomething)win.config(menu=mainmenu) #設(shè)置主窗口的菜單win.mainloop() #開(kāi)始程序循環(huán)實(shí)例十五

實(shí)例十六創(chuàng)建一個(gè)快捷式菜單(pop-up)。fromtkinterimport*importtkinter.messageboxwin=Tk() #創(chuàng)建主窗口#執(zhí)行菜單命令,顯示一個(gè)對(duì)話框defdoSomething():tkinter.messagebox.askokcancel("菜單""你正在選擇快捷式菜單命令")#創(chuàng)建一個(gè)快捷式菜單(pop-up)popupmenu=Menu(win,tearoff=0)#新增快捷式菜單的項(xiàng)目popupmenu.add_command(label="復(fù)制",command=doSomething)popupmenu.add_command(label="粘貼",command=doSomething)popupmenu.add_command(label="剪切",command=doSomething)popupmenu.add_command(label="刪除",command=doSomething)#在右擊的窗口(x,y)坐標(biāo)處,顯示此快捷式菜單defshowPopUpMenu(event):popupmenu.post(event.x_root,event.y_root)#設(shè)置右擊后,顯示此快捷式菜單win.bind("<Button-3>",showPopUpMenu)win.mainloop()#開(kāi)始程序循環(huán)7.2tkinter控件7.2.9單選框控件RadiobuttonRadiobutton控件用來(lái)創(chuàng)建一個(gè)單選按鈕。為了讓一群?jiǎn)芜x按鈕可以執(zhí)行相同的功能,必須設(shè)置這群?jiǎn)芜x按鈕的variable屬性為相同值,value屬性值則是各單選按鈕的數(shù)值。實(shí)例十七創(chuàng)建單選按鈕,創(chuàng)建5個(gè)運(yùn)動(dòng)項(xiàng)目的單選按鈕以及一個(gè)文字標(biāo)簽,將用戶的選擇顯示在文字標(biāo)簽上。fromtkinterimport*win=Tk() #創(chuàng)建主窗口sports=["棒球","籃球","足球","網(wǎng)球","排球"]#運(yùn)動(dòng)項(xiàng)目列表#將用戶的選擇,顯示在Label控件上defshowSelection():choice="您的選擇是:"+sports[var.get()]label.config(text=choice)var=IntVar() #讀取用戶的選擇值,是一個(gè)整數(shù)#創(chuàng)建單選按鈕,靠西邊對(duì)齊Radiobutton(win,text=sports[0],variable=var,value=0,command=showSelection).pack(anchor=W)Radiobutton(win,text=sports[1],variable=var,value=1,command=showSelection).pack(anchor=W)Radiobutton(win,text=sports[2],variable=var,value=2,command=showSelection).pack(anchor=W)Radiobutton(win,text=sports[3],variable=var,value=3,command=showSelection).pack(anchor=W)Radiobutton(win,text=sports[4],variable=var,value=4,command=showSelection).pack(anchor=W)label=Label(win) #創(chuàng)建文字標(biāo)簽,用來(lái)顯示用戶的選擇label.pack()win.mainloop() #開(kāi)始程序循環(huán)實(shí)例十八創(chuàng)建命令型單選按鈕。fromtkinterimport*win=Tk() #創(chuàng)建主窗口sports=["棒球","籃球","足球","網(wǎng)球","排球"] #運(yùn)動(dòng)項(xiàng)目列表#將用戶的選擇,顯示在Label控件上defshowSelection():choice="您的選擇是:"+sports[var.get()]label.config(text=choice)var=IntVar() #讀取用戶的選擇值,是一個(gè)整數(shù)#創(chuàng)建單選按鈕radio1=Radiobutton(win,text=sports[0],variable=var,value=0,command=showSelection)radio2=Radiobutton(win,text=sports[1],variable=var,value=1,command=showSelection)radio3=Radiobutton(win,text=sports[2],variable=var,value=2,command=showSelection)radio4=Radiobutton(win,text=sports[3],variable=var,value=3,command=showSelection)radio5=Radiobutton(win,text=sports[4],variable=var,value=4,command=showSelection)#將單選按鈕的外型,設(shè)置成命令型按鈕radio1.config(indicatoron=0)radio2.config(indicatoron=0)radio3.config(indicatoron=0)radio4.config(indicatoron=0)radio5.config(indicatoron=0)#將單選按鈕靠左邊對(duì)齊radio1.pack(anchor=W)radio2.pack(anchor=W)radio3.pack(anchor=W)radio4.pack(anchor=W)radio5.pack(anchor=W)label=Label(win) #創(chuàng)建文字標(biāo)簽,用來(lái)顯示用戶的選擇label.pack()win.mainloop() #開(kāi)始程序循環(huán)7.2tkinter控件7.2.10滑塊控件ScaleScale控件用來(lái)創(chuàng)建一個(gè)標(biāo)尺式的滑動(dòng)條對(duì)象,可以移動(dòng)標(biāo)尺上的光標(biāo)來(lái)設(shè)置數(shù)值。滑塊對(duì)象也可綁定鼠標(biāo)左鍵釋放事件<ButtoonRelease-1>,并在執(zhí)行函數(shù)中添加參數(shù)event來(lái)實(shí)現(xiàn)事件響應(yīng)。實(shí)例十九創(chuàng)建一個(gè)200像素寬的水平滑塊控件,取值范圍為1.0~5.0,分辨精度為0.05,刻度間隔為1,用鼠標(biāo)拖動(dòng)滑塊后釋放鼠標(biāo)可讀取滑塊值并顯示在標(biāo)簽上。fromtkinterimport*defshow(event):s='滑塊的取值為'+str(var.get())lb.config(text=s)win=Tk()win.title('滑塊實(shí)驗(yàn)')win.geometry('320x180')var=DoubleVar()scl=Scale(win,orient=HORIZONTAL,length=200,from_=1.0,to=5.0,label='請(qǐng)拖動(dòng)滑塊',tickinterval=1,resolution=0.05,variable=var)scl.bind('<ButtonRelease-1>',show)scl.pack()lb=Label(win,text='')lb.pack()win.mainloop()7.2tkinter控件7.2.11滾動(dòng)條控件ScrollbarScrollbar控件用來(lái)創(chuàng)建一個(gè)水平或者垂直滾動(dòng)條,可與Listbox、Text、Canvas等控件共同使用來(lái)移動(dòng)顯示的范圍。Scrollbar控件的方法如下。(1)set(first,last):設(shè)置目前的顯示范圍,其值在0與1之間。(2)get():返回目前的滾動(dòng)條設(shè)置值。實(shí)例二十創(chuàng)建滾動(dòng)條控件。創(chuàng)建一個(gè)60個(gè)選項(xiàng)的列表框、一個(gè)水滾動(dòng)條以及一個(gè)垂直滾動(dòng)條。當(dāng)移動(dòng)水平或者垂直滾動(dòng)條時(shí),改變列表框的水平或垂直方向可見(jiàn)范圍。fromtkinterimport*win=Tk() #創(chuàng)建主窗口#創(chuàng)建一個(gè)水平滾動(dòng)條scrollbar1=Scrollbar(win,orient=HORIZONTAL)#水平滾動(dòng)條位在窗口底端,當(dāng)窗口改變大小時(shí)會(huì)在X方向填滿窗口scrollbar1.pack(side=BOTTOM,fill=X)scrollbar2=Scrollbar(win) #創(chuàng)建一個(gè)垂直滾動(dòng)條#垂直滾動(dòng)條位在窗口右端,當(dāng)窗口改變大小時(shí)會(huì)在Y方向填滿窗口scrollbar2.pack(side=RIGHT,fill=Y)#創(chuàng)建一個(gè)列表框,X方向的滾動(dòng)條指令是scrollbar1對(duì)象的set()方法,#Y方向的滾動(dòng)條指令是scrollbar2對(duì)象的set()方法mylist=Listbox(win,xscrollcommand=scrollbar1.set,yscrollcommand=scrollbar2.set)#在列表框內(nèi)插入60個(gè)選項(xiàng)foriinrange(60):mylist.insert(END,"火樹(shù)銀花合,星橋鐵鎖開(kāi)。暗塵隨馬去,明月逐人來(lái)。"+str(i))#列表框位于窗口左端,當(dāng)窗口改變大小時(shí)會(huì)在X與Y方向填滿窗口mylist.pack(side=LEFT,fill=BOTH)#移動(dòng)水平滾動(dòng)條時(shí),改變列表框的X方向可見(jiàn)范圍scrollbar1.config(command=mylist.xview)#移動(dòng)垂直滾動(dòng)條時(shí),改變列表框的Y方向可見(jiàn)范圍scrollbar2.config(command=mylist.yview)win.mainloop() #開(kāi)始程序循環(huán)7.2tkinter控件7.2.12文本框控件TextText控件用來(lái)創(chuàng)建一個(gè)多行、格式化的文本框。用戶可以改變文本框內(nèi)的字體、文字。實(shí)例二十一創(chuàng)建一個(gè)Text控件,在Text控件分別插入一段文字,以及一個(gè)按鈕。fromtkinterimport*win=Tk() #創(chuàng)建主窗口win.title(string="文本控件")text=Text(win) #創(chuàng)建一個(gè)Text控件#在Text控件內(nèi)插入一段文字text.insert(INSERT,"晴明落地猶惆悵,何況飄零泥土中。:\n\n")text.insert(INSERT,"\n\n") #跳下一行#在Text控件內(nèi)插入一個(gè)按鈕button=Button(text,text="關(guān)閉",command=win.quit)text.window_create(END,window=button)text.pack(fill=BOTH)#在第一行文字的第10個(gè)字符到第14個(gè)字符處插入標(biāo)簽,標(biāo)簽名稱為"print"text.tag_add("print","1.10","1.15")#將插入的按鈕,設(shè)置其標(biāo)簽名稱為"button"text.tag_add("button",button)#改變標(biāo)簽"print"的前景與背景顏色,并且加底線text.tag_config("print",background="yellow",foreground="blue",underline=1)text.tag_config("button",justify="center") #設(shè)置標(biāo)簽"button"的居中排列win.mainloop() #開(kāi)始程序循環(huán)7.2tkinter控件7.2.13頂層窗口控件Toplevel默認(rèn)情況下,一個(gè)tkinterGUI程序總是有一個(gè)默認(rèn)的主窗口,也稱根窗口或root窗口。root窗口可通過(guò)顯式調(diào)用kinter.Tk()來(lái)創(chuàng)建。如果沒(méi)有顯式調(diào)用tkinter.Tk(),GUI程序也會(huì)隱式調(diào)用。頂層窗口組件Toplevel用于創(chuàng)建一個(gè)頂層窗口。頂層窗口默認(rèn)外觀和root窗口相同,可獨(dú)立地進(jìn)行操作。實(shí)例二十二創(chuàng)建了一個(gè)root窗口和兩個(gè)頂層窗口。fromtkinterimport*root=Tk() #顯示創(chuàng)建root窗口root.title('默認(rèn)主窗口') #設(shè)置窗口標(biāo)題win1=Toplevel() #創(chuàng)建頂層窗口win1.title('頂層窗口1') #設(shè)置窗口標(biāo)題win1.withdraw() #隱藏窗口win2=Toplevel(root) #顯示設(shè)置頂層窗口的父窗口為rootwin2.title('頂層窗口2')win2.withdraw()frame1=LabelFrame(text='頂層窗口1:',relief=GROOVE)frame1.pack()bt1=Button(frame1,text='顯示',command=win1.deiconify) #單擊按鈕時(shí)顯示窗口bt1.pack(side=LEFT)bt2=Button(frame1,text='隱藏',command=win1.withdraw) #單擊按鈕時(shí)隱藏窗口bt2.pack(side=LEFT)frame2=LabelFrame(text='頂層窗口2:',relief=GROOVE)frame2.pack()bt3=Button(frame2,text='顯示',command=win2.deiconify)bt3.pack(side=LEFT)bt4=Button(frame2,text='隱藏',command=win2.withdraw)bt4.pack(side=LEFT)bt5=Button(win1,text='關(guān)閉窗口',command=win1.destroy) #單擊按鈕時(shí)關(guān)閉窗口bt5.pack(anchor=CENTER)bt6=Button(win2,text='關(guān)閉窗口',command=quit)bt6.pack(anchor=CENTER)root.mainloop()7.3對(duì)話框

tkinter提供下列不同類(lèi)型的對(duì)話框,這些對(duì)話框的功能存放在tkinter的不同子模塊中,主要包括messagebox模塊、filedialog模塊和colorchooser模塊。7.3.1消息對(duì)話框messagebox模塊提供下列方法來(lái)打開(kāi)供用戶選擇的對(duì)話框。(1)showinfo(title,message,options):顯示普通信息對(duì)話框。(2)showwarning(title,message,options):顯示警告信息對(duì)話框。(3)showerror(title,message,options):顯示錯(cuò)誤信息對(duì)話框。(4)askquestion(title,message,options):顯示詢問(wèn)問(wèn)題對(duì)話框。(5)askokcancel(title,message,options):顯示詢問(wèn)確認(rèn)取消對(duì)話框。(6)skyesno(title,message,options):顯示詢問(wèn)是否對(duì)話框。(7)askyesnocancel(title,message,options):顯示詢問(wèn)是否取消對(duì)話框。(8)askretrycancel(title,message,options):顯示詢問(wèn)重試取消對(duì)話框。各個(gè)函數(shù)的參數(shù)均可省略,title參數(shù)設(shè)置對(duì)話框標(biāo)題,message參數(shù)設(shè)置對(duì)話框內(nèi)部顯示的提示信息,options為一個(gè)或多個(gè)附加選項(xiàng)。實(shí)例二十三調(diào)用了各個(gè)方法顯示相應(yīng)的消息對(duì)話框,并打印返回值。fromtkinterimport*fromtkinter.messageboximport*win=Tk()title="通用消息對(duì)話框"print("信息對(duì)話框:",showinfo(title,"這是信息對(duì)話框"))print("警告對(duì)話框:",showwarning(title,"這是警告對(duì)話框"))print("錯(cuò)誤對(duì)話框:",showerror(title,"這是錯(cuò)誤提示對(duì)話框"))print("問(wèn)題對(duì)話框:",askquestion(title,"這是個(gè)問(wèn)題正確嗎?"))print("確認(rèn)取消對(duì)話框",askokcancel(title,"請(qǐng)選擇確認(rèn)或取消"))print("是否對(duì)話框:",askyesno(title,"請(qǐng)選擇是或否"))print("是否取消對(duì)話框:",askyesnocancel(title,"請(qǐng)選擇是、否或取消"))print("重試話框:",askretrycancel(title,"請(qǐng)選擇重試或取消"))win.mainloop()7.3對(duì)話框7.3.2文件對(duì)話框tkinter.filedialog()提供了標(biāo)準(zhǔn)的文件對(duì)話框,其的常用方法如下。(1)askopenfilename():打開(kāi)“打開(kāi)”對(duì)話框,選擇文件。如果有選中文件,則返回文件名,否則返回空字符串。(2)asksaveasfilename():打開(kāi)“另存為”對(duì)話框,指定文件保存路徑和文件名。如果有指定文件名,則返回文件名,否則返回空字符串。(3)askopenfile:打開(kāi)“打開(kāi)”對(duì)話框,選擇文件。如果有選中文件,則返回以“r方式打開(kāi)的文件,否則返回None。(4)asksaveasfile():打開(kāi)“另存為”對(duì)話框,指定文件保存路徑和文件名。若指定了文件名,則返回以“w”方式打開(kāi)的文件,否則返回None。實(shí)例二十四打開(kāi)系統(tǒng)的標(biāo)準(zhǔn)文件對(duì)話框。fromtkinterimport*fromtkinter.filedialogimport*fromtkinter.messageboximport*defbt1click(): #打開(kāi)文件withopen(askopenfilename()

,encoding='utf-8')as

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論