![Python程序設(shè)計(jì)案例教程第十一次課GUI編程課件_第1頁(yè)](http://file4.renrendoc.com/view/8a1eddcd83fd4a3903a5cba4e8fab27f/8a1eddcd83fd4a3903a5cba4e8fab27f1.gif)
![Python程序設(shè)計(jì)案例教程第十一次課GUI編程課件_第2頁(yè)](http://file4.renrendoc.com/view/8a1eddcd83fd4a3903a5cba4e8fab27f/8a1eddcd83fd4a3903a5cba4e8fab27f2.gif)
![Python程序設(shè)計(jì)案例教程第十一次課GUI編程課件_第3頁(yè)](http://file4.renrendoc.com/view/8a1eddcd83fd4a3903a5cba4e8fab27f/8a1eddcd83fd4a3903a5cba4e8fab27f3.gif)
![Python程序設(shè)計(jì)案例教程第十一次課GUI編程課件_第4頁(yè)](http://file4.renrendoc.com/view/8a1eddcd83fd4a3903a5cba4e8fab27f/8a1eddcd83fd4a3903a5cba4e8fab27f4.gif)
![Python程序設(shè)計(jì)案例教程第十一次課GUI編程課件_第5頁(yè)](http://file4.renrendoc.com/view/8a1eddcd83fd4a3903a5cba4e8fab27f/8a1eddcd83fd4a3903a5cba4e8fab27f5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、復(fù)習(xí)回顧復(fù)習(xí)回顧任務(wù)九 GUI編程任務(wù)九 GUI編程新課導(dǎo)入到目前為止,我們所編寫的Python代碼都是處于一個(gè)文字交互界面的狀態(tài)。但在實(shí)際應(yīng)用中,很多用戶都是非專業(yè)的,他們希望所提供的軟件能有一個(gè)友好的界面,這就用到GUI編程了。GUI(Graphical User Interface)又稱圖形用戶界面,是指采用圖形方式顯示的用戶操作界面。Python的GUI工具包有很多,其中最常用的有tkinter,wxPython,PyGTK,PyQt等,本章將介紹如何使用tkinter來(lái)編寫GUI程序。新課導(dǎo)入到目前為止,我們所編寫的Python代碼都是處于一個(gè)知識(shí)能力目標(biāo)理解使用tkinter進(jìn)行G
2、UI編程的主要步驟熟悉tkinter的常用控件掌握事件綁定的方法掌握布局管理器的使用方法了解標(biāo)準(zhǔn)對(duì)話框的使用方法連接數(shù)據(jù)庫(kù)知識(shí)能力目標(biāo)理解使用tkinter進(jìn)行GUI編程的主要步驟11.1 tkinter和Python編程11.2 tkinter常用控件11.3 事件綁定11.4 布局管理器11.5 標(biāo)準(zhǔn)對(duì)話框11.6 典型案例計(jì)算器11.1 tkinter和Python編程11.1 tkinter和Python編程11.1.2 tkinter的使用11.1.1 tkinter簡(jiǎn)介11.1 tkinter和Python編程11.1.2 tkinter是Python的標(biāo)準(zhǔn)GUI庫(kù)。tkinter
3、的優(yōu)點(diǎn)是簡(jiǎn)單易用,與Python結(jié)合度好。tkinter在Python 3.x下默認(rèn)集成,不需要額外安裝。因此,想要使用tkinter進(jìn)行GUI編程,可直接使用import語(yǔ)句導(dǎo)入tkinter模塊。import tkintertkinter是Python的標(biāo)準(zhǔn)GUI庫(kù)。import t創(chuàng)建一個(gè)GUI應(yīng)用程序需要以下5個(gè)主要步驟。導(dǎo)入tkinter模塊(import tkinter)創(chuàng)建一個(gè)頂層窗口對(duì)象(調(diào)用Tk()類),用于容納整個(gè)GUI應(yīng)用在頂層窗口對(duì)象上構(gòu)建所有的GUI控件通過(guò)底層應(yīng)用代碼將這些GUI控件連接起來(lái)進(jìn)入主事件循環(huán)(調(diào)用mainloop()函數(shù))創(chuàng)建一個(gè)GUI應(yīng)用程序需要以下
4、5個(gè)主要步驟。導(dǎo)入tkinte在GUI編程中,頂層窗口對(duì)象包含組成GUI應(yīng)用程序的所有小窗口對(duì)象,它們可能是文字標(biāo)簽、按鈕、列表框等,這些獨(dú)立的GUI組件稱為控件???件描 述Button按鈕控件,在程序中顯示按鈕Canvas畫布控件,顯示圖形元素,如線條、橢圓、矩形等Checkbutton多選框控件,用于在程序中提供多項(xiàng)選擇框Entry輸入控件,用于顯示簡(jiǎn)單的文本內(nèi)容Frame框架控件,在屏幕上顯示一個(gè)矩形區(qū)域,多用作容器Label標(biāo)簽控件,可以顯示文本和圖像LabelFrameFrame的進(jìn)化版,標(biāo)簽和框架的組合Listbox列表框控件,用來(lái)顯示一個(gè)字符串列表給用戶Menu菜單控件,顯示菜
5、單欄、下拉菜單和彈出菜單Menubutton菜單按鈕控件,用于顯示菜單項(xiàng)Message消息控件,用來(lái)顯示多行文本,與Label類似PanedWindow窗口布局管理插件,可以包含一個(gè)或多個(gè)子控件Radiobutton單選按鈕控件,顯示一個(gè)單選的按鈕狀態(tài)Scale線性滑塊控件,根據(jù)已設(shè)定的起始值和終止值,給出當(dāng)前設(shè)定的精確值Scrollbar滾動(dòng)條控件,當(dāng)內(nèi)容超過(guò)可視化區(qū)域時(shí)使用,如列表框SpinboxEntry和Button的組合,允許對(duì)值進(jìn)行調(diào)整Text文本控件,用于顯示多行文本Toplevel容器控件,用來(lái)提供一個(gè)單獨(dú)的對(duì)話框,和Frame類似在GUI編程中,頂層窗口對(duì)象包含組成GUI應(yīng)用
6、程序的所有小窗例:第一個(gè)tkinter實(shí)例創(chuàng)建一個(gè)窗口用于輸出“Hello world“。import tkinter#導(dǎo)入tkinter模塊top = tkinter.Tk()#創(chuàng)建一個(gè)頂層窗口對(duì)象label = tkinter.Label(top,text=Hello World,fg=red)#添加一個(gè)Label控件,用于顯示文本label.pack()#調(diào)用Label控件的pack()方法top.mainloop()#進(jìn)入主事件循環(huán)程序運(yùn)行效果例:第一個(gè)tkinter實(shí)例創(chuàng)建一個(gè)窗口用于輸出“Hel11.2 tkinter常用控件11.2 tkinter常用控件窗口也稱為框架(Fram
7、e),是屏幕上的一塊矩形區(qū)域,多用來(lái)作為容器布局窗體。窗口中可包含標(biāo)簽、菜單、按鈕等其他控件,其運(yùn)行之后可移動(dòng)和縮放。屬 性描 述title設(shè)置窗口標(biāo)題geometry設(shè)置窗口大小resizable設(shè)置窗口是否可以變化長(zhǎng)和寬窗口也稱為框架(Frame),是屏幕上的一塊矩形區(qū)域,多用來(lái)例:創(chuàng)建一個(gè)300200的窗口,其標(biāo)題為“金企鵝”,運(yùn)行后該窗口寬不可變,高可變。import tkinter#導(dǎo)入tkinter庫(kù)window = tkinter.Tk()#創(chuàng)建tkinter對(duì)象window.title(金企鵝)#設(shè)置標(biāo)題window.geometry(300 x200)#設(shè)置窗口大小,注意是字
8、母xwindow.resizable(width=False, height=True)#寬不可變,高可變,默認(rèn)為Truewindow.mainloop()#進(jìn)入主事件循環(huán)程序運(yùn)行效果例:創(chuàng)建一個(gè)300200的窗口,其標(biāo)題為“金企鵝”,運(yùn)行后Label控件是用于在界面上輸出描述信息的標(biāo)簽,可以顯示文本和圖像。屬 性描 述text要顯示的文本bg背景顏色fg前景色bd外圍3D邊界的寬度f(wàn)ont字體width控件寬度height控件高度relief邊框樣式Label控件是用于在界面上輸出描述信息的標(biāo)簽,可以顯示文本例:創(chuàng)建一個(gè)200100的窗口,其標(biāo)題為“金企鵝”,在窗口中創(chuàng)建一個(gè)標(biāo)簽,用于顯示“
9、金企鵝聯(lián)合出版中心”,并設(shè)置其字體、顏色、寬度和高度。import tkinter#導(dǎo)入tkinter庫(kù)window = tkinter.Tk()#創(chuàng)建tkinter對(duì)象window.title(金企鵝)#設(shè)置標(biāo)題window.geometry(200 x100)#設(shè)置窗口大小,注意是字母x#創(chuàng)建標(biāo)簽,text設(shè)置文本,bg設(shè)置背景色,fg設(shè)置前景色,font設(shè)置字體,width設(shè)置寬,height設(shè)置高label1 = tkinter.Label(window, text=金企鵝聯(lián)合出版中心, bg=white, fg=blue, font=(宋體), width=20, height=3)
10、label1.pack()#顯示Labelwindow.mainloop()#進(jìn)入主事件循環(huán)程序運(yùn)行效果例:創(chuàng)建一個(gè)200100的窗口,其標(biāo)題為“金企鵝”,在窗口通過(guò)Button控件可以方便地與用戶進(jìn)行交互。Button控件有一個(gè)command屬性,用于指定一個(gè)函數(shù)或方法,當(dāng)用戶單擊按鈕時(shí),tkinter就會(huì)自動(dòng)調(diào)用該函數(shù)或方法。例:編寫程序?qū)崿F(xiàn)通過(guò)按下按鈕來(lái)執(zhí)行指定操作(改變標(biāo)簽的內(nèi)容)。import tkinter as tk#導(dǎo)入tkinter模塊重命名為tk#定義函數(shù),用于實(shí)現(xiàn)改變標(biāo)簽的內(nèi)容def btnHelloClicked(): labelHello.config(text =
11、Hello tkinter!)top = tk.Tk()#創(chuàng)建tkinter對(duì)象top.geometry(200 x150)#設(shè)置窗口大小,注意是字母xtop.title(Button Test)#設(shè)置窗口標(biāo)題#創(chuàng)建原始標(biāo)簽labelHello = tk.Label(top, text = Press the button., height = 5, width = 20, fg = blue)labelHello.pack()#顯示標(biāo)簽#創(chuàng)建按鈕,顯示“Hello”,單擊按鈕調(diào)用btnHelloClicked函數(shù)btn = tk.Button(top, text = Hello, comma
12、nd = btnHelloClicked)btn.pack()#顯示按鈕top.mainloop()#進(jìn)入主事件循環(huán)程序運(yùn)行效果通過(guò)Button控件可以方便地與用戶進(jìn)行交互。Button控Entry控件就是輸入框,用來(lái)輸入單行內(nèi)容,可以方便地向程序傳遞用戶參數(shù)。獲取輸入框的內(nèi)容可以使用Entry控件的get()方法。例:編寫攝氏度轉(zhuǎn)華氏度的小程序,要求從輸入框輸入攝氏度的值,單擊計(jì)算按鈕后得到華氏度的值。計(jì)算公式:F = 1.8C+32。import tkinter as tk#導(dǎo)入并重命名tkinter模塊#定義函數(shù)用于讀取Entry控件的內(nèi)容并將計(jì)算結(jié)果進(jìn)行輸出def btnHelloCl
13、icked(): cd = float(entryCd.get()#讀取Entry控件的內(nèi)容 labelHello.config(text = %.2fC = %.2fF %(cd, cd*1.8+32)top = tk.Tk()#創(chuàng)建tkinter對(duì)象top.title(Entry Test)#設(shè)置窗口標(biāo)題#創(chuàng)建標(biāo)簽labelHello = tk.Label(top, text = 攝氏度轉(zhuǎn)華氏度, height = 5, width = 20, fg = blue)labelHello.pack()#顯示標(biāo)簽entryCd = tk.Entry(top, text = 0)#創(chuàng)建輸入框en
14、tryCd.pack()#顯示輸入框#創(chuàng)建按鈕btnCal = tk.Button(top, text = 計(jì)算, command = btnHelloClicked)btnCal.pack()#顯示按鈕top.mainloop()#進(jìn)入主事件循環(huán)程序運(yùn)行效果Entry控件就是輸入框,用來(lái)輸入單行內(nèi)容,可以方便地向程序Radiobutton和Checkbutton控件分別用于實(shí)現(xiàn)選項(xiàng)的單選和復(fù)選功能。屬 性描 述variable單選框索引變量,通過(guò)變量的值確定哪個(gè)單選框被選中,一組單選框使用同一個(gè)索引變量value單選框選中時(shí)變量的值command單選框選中時(shí)執(zhí)行的命令(函數(shù))屬 性描 述va
15、riable復(fù)選框索引變量,通過(guò)變量的值確定哪些復(fù)選框被選中;每個(gè)復(fù)選框使用不同的變量,使復(fù)選框之間相互獨(dú)立onvalue復(fù)選框選中(有效)時(shí)變量的值offvalue復(fù)選框未選中(無(wú)效)時(shí)變量的值command復(fù)選框選中時(shí)執(zhí)行的命令(函數(shù))Radiobutton和Checkbutton控件分別用于實(shí)例:編寫程序,實(shí)現(xiàn)通過(guò)單選框和復(fù)選框設(shè)置文字樣式的功能。import tkinter as tk#導(dǎo)入tkinter模塊重命名為tk#定義函數(shù)用于修改標(biāo)簽中文字的顏色def colorChecked(): labelHello.config(fg = color.get()#定義函數(shù)用于修改標(biāo)簽中文
16、字的字體def typeChecked(): textType = typeBlod.get() + typeItalic.get()#兩個(gè)復(fù)選框的值相加 if textType = 1:#單選typeBlod復(fù)選框 labelHello.config(font = (Arial, 12, bold) elif textType = 2:#單選typeItalic復(fù)選框 labelHello.config(font = (Arial, 12, italic) elif textType = 3:#同時(shí)選中兩個(gè)復(fù)選框 labelHello.config(font = (Arial, 12, bo
17、ld italic) else:#兩個(gè)都不選 labelHello.config(font = (Arial, 12)例:編寫程序,實(shí)現(xiàn)通過(guò)單選框和復(fù)選框設(shè)置文字樣式的功能。imtop = tk.Tk()#創(chuàng)建tkinter對(duì)象top.title(Radio & Check Test)#設(shè)置窗口標(biāo)題#創(chuàng)建標(biāo)簽labelHello = tk.Label(top, text = Check the format of text., height = 3, font=(Arial, 12)labelHello.pack()#顯示標(biāo)簽color = tk.StringVar()#獲取單選框輸入#創(chuàng)建三
18、個(gè)單選框并顯示tk.Radiobutton(top, text = Red, variable = color, value = red, command = colorChecked).pack()tk.Radiobutton(top, text = Blue, variable = color, value = blue, command = colorChecked).pack()tk.Radiobutton(top, text = Green, variable = color, value = green, command = colorChecked).pack()#獲取復(fù)選框輸入
19、typeBlod = tk.IntVar()typeItalic = tk.IntVar()#創(chuàng)建2個(gè)復(fù)選框tk.Checkbutton(top, text = Blod, variable = typeBlod, onvalue = 1, offvalue = 0, command = typeChecked).pack()tk.Checkbutton(top, text = Italic, variable = typeItalic, onvalue = 2, offvalue = 0, command = typeChecked).pack()top.mainloop()#進(jìn)入主事件循環(huán)
20、top = tk.Tk()#創(chuàng)建tkinter對(duì)程序運(yùn)行效果 提示可以使用tkinter.StringVar()創(chuàng)建與特定控件關(guān)聯(lián)的字符串變量,使用tkinter.IntVar()創(chuàng)建與特定控件關(guān)聯(lián)的整型變量。程序運(yùn)行效果 提示可以使用tkinter.tkinter提供了Menu控件,用于實(shí)現(xiàn)頂級(jí)菜單、下拉菜單和彈出菜單。函數(shù)名稱說(shuō) 明menu.add_cascade()添加子選項(xiàng)menu.add_command()添加命令(label參數(shù)為顯示內(nèi)容)menu.add_separator()添加分隔線menu.add_checkbutton()添加確認(rèn)按鈕tkinter提供了Menu控件,用于
21、實(shí)現(xiàn)頂級(jí)菜單、下拉菜單1頂級(jí)菜單創(chuàng)建一個(gè)頂級(jí)菜單,需要先創(chuàng)建一個(gè)菜單實(shí)例,然后使用add()方法將命令添加進(jìn)去。例:創(chuàng)建頂級(jí)菜單實(shí)例。import tkinter#導(dǎo)入tkinter庫(kù)#定義函數(shù)用于顯示信息def callback(): print(單擊了“顯示”菜單!)window = tkinter.Tk()#創(chuàng)建tkinter對(duì)象window.title(標(biāo)題)#設(shè)置標(biāo)題window.geometry(200 x100)#設(shè)置窗口大小menubar = tkinter.Menu(window)#創(chuàng)建一個(gè)頂級(jí)菜單窗口#給菜單實(shí)例增加菜單項(xiàng)menubar.add_command(label=
22、顯示, command = callback)menubar.add_command(label=退出, command = window.quit)window.config(menu = menubar)#顯示菜單window.mainloop()#進(jìn)入主事件循環(huán)程序運(yùn)行效果1頂級(jí)菜單創(chuàng)建一個(gè)頂級(jí)菜單,需要先創(chuàng)建一個(gè)菜單實(shí)例,然后使2下拉菜單創(chuàng)建一個(gè)下拉菜單,方法同創(chuàng)建頂級(jí)菜單類似,最主要的區(qū)別是下拉菜單需要添加到主菜單上。例:創(chuàng)建下拉菜單實(shí)例。import tkinterwindow = tkinter.Tk()window.title(標(biāo)題)window.geometry(200 x1
23、00)#創(chuàng)建一個(gè)頂級(jí)菜單實(shí)例menubar = tkinter.Menu(window)#為每個(gè)子菜單實(shí)例添加菜單項(xiàng)#創(chuàng)建文件菜單項(xiàng),并添加子菜單fmenu = tkinter.Menu(menubar)for each in 新建,打開(kāi),保存,另存為: fmenu .add_command(label = each)程序運(yùn)行效果#創(chuàng)建視圖菜單項(xiàng),并添加子菜單vmenu = tkinter.Menu(menubar)for each in 復(fù)制,粘貼,剪切: vmenu.add_command(label = each)#創(chuàng)建編輯菜單項(xiàng),并添加子菜單emenu = tkinter.Menu(m
24、enubar)for each in 默認(rèn)視圖,新式視圖: emenu.add_command(label = each)#創(chuàng)建關(guān)于菜單項(xiàng),添加子菜單amenu = tkinter.Menu(menubar)for each in 版權(quán)信息,聯(lián)系我們: amenu.add_command(label = each)#為頂級(jí)菜單實(shí)例添加菜單,并綁定相應(yīng)的子菜單實(shí)例menubar.add_cascade(label=文件,menu=fmenu)menubar.add_cascade(label=視圖,menu=vmenu)menubar.add_cascade(label=編輯,menu=emen
25、u)menubar.add_cascade(label=關(guān)于,menu=amenu)window.config(menu = menubar)#顯示菜單window.mainloop()#進(jìn)入主事件循環(huán)2下拉菜單創(chuàng)建一個(gè)下拉菜單,方法同創(chuàng)建頂級(jí)菜單類似,最主要3彈出菜單創(chuàng)建一個(gè)彈出菜單的方法也是類似的,不過(guò)需要使用post()方法將其顯示出來(lái)。例:創(chuàng)建彈出菜單實(shí)例。from tkinter import *root = Tk()#定義函數(shù)用于輸出提示信息def hello(): print( 選擇了菜單!)root.geometry(200 x100)#創(chuàng)建一個(gè)頂級(jí)菜單實(shí)例menu = Men
26、u(root)menu.add_command(label=顯示, command=hello)menu.add_command(label=退出, command=root.quit)程序運(yùn)行效果#彈出菜單frame = Frame(root, width=512, height=512)frame.pack()#定義函數(shù),調(diào)用post()方法顯示def popup(event): menu.post(event.x_root, event.y_root)#綁定鼠標(biāo)右鍵frame.bind(, popup)root.config(menu = menu)root.mainloop()3彈出菜
27、單創(chuàng)建一個(gè)彈出菜單的方法也是類似的,不過(guò)需要使用p11.3 事件綁定11.3.2 事件對(duì)象11.3.1 事件序列11.3 事件綁定11.3.2 事件對(duì)象11.3.1 一個(gè)tkinter應(yīng)用程序的大部分時(shí)間花費(fèi)在事件循環(huán)上(通過(guò)mainloop()方法進(jìn)入)。事件可以有多種來(lái)源,包括用戶觸發(fā)的鼠標(biāo)、鍵盤操作或是系統(tǒng)事件。tkinter提供了強(qiáng)大的事件處理機(jī)制,對(duì)于每個(gè)控件來(lái)說(shuō),可以通過(guò)bind()方法將函數(shù)或方法綁定到具體的事件上,其語(yǔ)法格式如下:控件對(duì)象名.bind(event, handler)event是tkinter已經(jīng)定義好的事件(通過(guò)事件序列機(jī)制定義)。handler是一個(gè)處理函數(shù)或
28、方法。一個(gè)tkinter應(yīng)用程序的大部分時(shí)間花費(fèi)在事件循環(huán)上(通過(guò)例:捕獲鼠標(biāo)點(diǎn)擊事件實(shí)例。from tkinter import *#導(dǎo)入tkinter庫(kù)中所有內(nèi)容root = Tk()#創(chuàng)建tkinter對(duì)象#定義函數(shù),用于輸出鼠標(biāo)單擊的坐標(biāo)def callback(event): print (clicked at, event.x, event.y)frame = Frame(root, width=200, height=100)#創(chuàng)建窗體frame.bind(, callback)#綁定鼠標(biāo)左鍵frame.pack()#顯示窗體root.mainloop()#進(jìn)入主事件循環(huán)程序運(yùn)行
29、效果例:捕獲鼠標(biāo)點(diǎn)擊事件實(shí)例。from tkinter impotkinter使用一種稱為事件序列的機(jī)制來(lái)允許用戶定義事件,事件序列以字符串的形式表示,其語(yǔ)法格式如下:說(shuō)明:(1)事件序列必須用尖括號(hào)括起來(lái);(2)type字段是最重要的,它通常用于描述事件類型,如鼠標(biāo)單擊、鍵盤輸入等;(3)modifier字段是可選的,它通常用于描述組合鍵,如Ctrl、Shift等;(4)detail字段也是可選的,它通常用于描述具體的按鍵,如Button-1表示單擊鼠標(biāo)左鍵。tkinter使用一種稱為事件序列的機(jī)制來(lái)允許用戶定義事件,關(guān) 鍵 字含 義Button鼠標(biāo)單擊事件,detail部分指定具體哪個(gè)按鍵
30、:鼠標(biāo)左鍵,鼠標(biāo)中鍵,鼠標(biāo)右鍵。鼠標(biāo)的位置x和y會(huì)被event對(duì)象傳給handlerButtonRelease鼠標(biāo)釋放事件,在大多數(shù)情況下,比Button要更好用,因?yàn)槿绻?dāng)用戶不小心按下鼠標(biāo),用戶可以將鼠標(biāo)移出控件再釋放鼠標(biāo),從而避免不小心觸發(fā)事件Configure控件大小改變事件,新的控件大小會(huì)存儲(chǔ)在event對(duì)象中的width和height屬性中傳遞Enter鼠標(biāo)移入控件事件FocusIn獲得焦點(diǎn)事件FocusOut失去焦點(diǎn)事件Leave鼠標(biāo)移出控件事件KeyPress鍵盤按下事件,detail可指定具體的按鍵,例如,表示當(dāng)大寫字母H被按下時(shí)觸發(fā)該事件,KeyPress也可以簡(jiǎn)寫成Key
31、Motion鼠標(biāo)移動(dòng)事件,鼠標(biāo)在控件內(nèi)移動(dòng)的整個(gè)過(guò)程均觸發(fā)該事件type字段常用的關(guān)鍵字及含義:關(guān) 鍵 字含 義Button鼠標(biāo)單擊事件,detail部分modifier字段常用的關(guān)鍵字及含義關(guān) 鍵 字含 義Alt當(dāng)按下Alt鍵時(shí)Any表示任何類型的按鍵被按下時(shí),例如,表示當(dāng)用戶按下任意鍵時(shí)觸發(fā)事件Control當(dāng)按下Ctrl鍵時(shí)Double當(dāng)后續(xù)事件被連續(xù)觸發(fā)兩次時(shí),例如,表示當(dāng)用戶雙擊鼠標(biāo)左鍵時(shí)觸發(fā)事件Lock當(dāng)打開(kāi)大寫字母鎖定鍵時(shí)Shift當(dāng)按下Shift鍵時(shí)Triple跟Double類似,當(dāng)后續(xù)事件被連續(xù)觸發(fā)三次時(shí)modifier字段常用的關(guān)鍵字及含義關(guān) 鍵 字含 義Al當(dāng)tkinte
32、r調(diào)用預(yù)先定義的函數(shù)時(shí),會(huì)將事件對(duì)象(作為參數(shù))傳遞給函數(shù),事件對(duì)象的屬性及含義如下表所示。屬 性含 義widget產(chǎn)生事件的控件x, y當(dāng)前鼠標(biāo)的位置(相對(duì)于窗口左上角,單位為像素)x_root, y_root當(dāng)前鼠標(biāo)的位置(相對(duì)于屏幕左上角,單位為像素)char字符代碼(僅限鍵盤事件),作為字符串keysym關(guān)鍵符號(hào)(僅限鍵盤事件)keycode關(guān)鍵代碼(僅限鍵盤事件)num按鈕數(shù)字(僅限鼠標(biāo)按鈕事件)width, height控件的新尺寸(Configure事件專屬)type事件類型當(dāng)tkinter調(diào)用預(yù)先定義的函數(shù)時(shí),會(huì)將事件對(duì)象(作為參數(shù)例:事件綁定實(shí)例。import tkinter
33、#導(dǎo)入tkinter庫(kù)window = tkinter.Tk()#創(chuàng)建tkinter對(duì)象window.title(標(biāo)題)#設(shè)置標(biāo)題window.geometry(200 x100)#設(shè)置窗口大小#鼠標(biāo)單擊綁定事件def func(event): print(單擊!)window.bind(,func)#鼠標(biāo)雙擊綁定事件def func1(event): print(雙擊!)window.bind(,func1)程序運(yùn)行效果#鼠標(biāo)移入綁定事件def func2(event): print(鼠標(biāo)移入!)window.bind(,func2)#實(shí)現(xiàn)拖拽功能def func3(event): x=st
34、r(event.x_root) y=str(event.y_root) window.geometry(200 x100+x+y)window.bind(,func3)window.mainloop()例:事件綁定實(shí)例。import tkinter#導(dǎo)入tk11.4 布局管理器11.4.2 grid布局11.4.1 pack布局11.4.3 place布局11.4 布局管理器11.4.2 grid布局11.4.pack布局是按添加的順序排列控件,即向容器中添加控件,第一個(gè)添加的控件在最上方,然后依次向下排列。例:pack布局實(shí)例。from tkinter import *#導(dǎo)入tkinter庫(kù)
35、中所有內(nèi)容root = Tk()#創(chuàng)建tkinter對(duì)象#創(chuàng)建三個(gè)標(biāo)簽Label(root, text = pack1, bg = red).pack()Label(root, text = pack2, bg = blue).pack()Label(root, text = pack3, bg = green).pack()root.mainloop()#進(jìn)入主事件循環(huán)程序運(yùn)行效果pack布局是按添加的順序排列控件,即向容器中添加控件,第一pack布局的常用屬性屬 性 名含 義取值說(shuō)明fill設(shè)置控件是否向水平或垂直方向填充X(水平方向填充)、Y(垂直方向填充)、BOTH(水平和垂直)、NO
36、NE(不填充)expand設(shè)置控件是否展開(kāi),當(dāng)值為YES時(shí),side選項(xiàng)無(wú)效,控件顯示在父容器中心位置;若fill選項(xiàng)為BOTH,則填充父控件的剩余空間;默認(rèn)為不展開(kāi)expand = YESexpand = NOside設(shè)置控件的對(duì)齊方式LEFT(左)、TOP(上)、RIGHT(右)、BOTTOM(下)ipadxipady設(shè)置x方向(或者y方向)內(nèi)部間隙(與子控件之間的間隔)可設(shè)置數(shù)值(非負(fù)整數(shù),單位為像素),默認(rèn)是0padxpady設(shè)置x方向(或者y方向)外部間隙(與之并列的控件之間的間隔)可設(shè)置數(shù)值(非負(fù)整數(shù),單位為像素),默認(rèn)是0anchor錨選項(xiàng),當(dāng)可用空間大于所需求的尺寸時(shí),決定控件
37、被放置于容器的位置N,E,S,W,NW,NE,SW,SE,CENTER(默認(rèn)值為CENTER),表示八個(gè)方向以及中心pack布局的常用屬性屬 性 名含 義取值說(shuō)明fill設(shè)置 提示pack布局適用于少量控件的排列,當(dāng)界面復(fù)雜度增加時(shí),要實(shí)現(xiàn)某種布局效果,需要分層來(lái)實(shí)現(xiàn)。例:分層實(shí)現(xiàn)較復(fù)雜布局。from tkinter import *root = Tk()root.title(Pack - Example)#使用Frame增加一層容器fm1 = Frame(root)#創(chuàng)建3個(gè)按鈕,從上到下排列Button(fm1, text=Top).pack(side=TOP, anchor=W, fil
38、l=X)Button(fm1, text=Center).pack(side=TOP, anchor=W, fill=X)Button(fm1, text=Bottom).pack(side=TOP, anchor=W, fill=X)fm1.pack(side=LEFT, fill=Y)程序運(yùn)行效果#使用Frame再增加一層容器fm2 = Frame(root)#創(chuàng)建3個(gè)按鈕,從左到右排列Button(fm2, text=Left).pack(side=LEFT)Button(fm2, text=This is the Center button).pack(side=LEFT)Button
39、(fm2, text=Right).pack(side=LEFT) fm2.pack(side=LEFT, padx=10)root.mainloop() 提示pack布局適用于少量控件的排列,當(dāng)grid布局又稱為網(wǎng)格布局,是tkinter布局管理器中最靈活多變的布局方法。由于大多數(shù)程序界面都是矩形的,我們可以將它劃分為由行和列組成的網(wǎng)格,然后根據(jù)行號(hào)和列號(hào),將控件放置于網(wǎng)格之中。屬 性 名含 義取值說(shuō)明row,columnrow為行號(hào),column為列號(hào),設(shè)置控件放置的位置(第幾行第幾列)row和column的序號(hào)都從0開(kāi)始sticky設(shè)置控件在網(wǎng)格中的對(duì)齊方式(類似于pack布局中的錨選項(xiàng)
40、)N,E,S,W,NW,NE,SW,SE,CENTERrowspan,columnspan控件所跨越的行數(shù)或列數(shù)取值為跨越占用的行數(shù)或列數(shù)ipadx,ipady,padx,pady控件的內(nèi)部和外部間隔距離與pack的該屬性用法相同grid布局又稱為網(wǎng)格布局,是tkinter布局管理器中最靈例:grid布局實(shí)例。from tkinter import *#導(dǎo)入tkinter庫(kù)中所有內(nèi)容root = Tk()#創(chuàng)建tkinter對(duì)象colours = red,green,orange,white,yellow,blue#定義顏色列表r = 0#循環(huán)創(chuàng)建標(biāo)簽和不同顏色的輸入框for c in col
41、ours: Label(root,text=c, relief=RIDGE,width=15).grid(row=r,column=0) Entry(root,bg=c, relief=SUNKEN,width=10).grid(row=r,column=1) r = r + 1root.mainloop()#進(jìn)入主事件循環(huán)程序運(yùn)行效果例:grid布局實(shí)例。from tkinter importplace布局使用控件坐標(biāo)來(lái)放置控件的位置。屬 性 名含 義取值說(shuō)明x,y控件左上角的x,y坐標(biāo)(絕對(duì)位置)整數(shù),默認(rèn)值為0,單位像素relx,rely控件相對(duì)于父容器的x,y坐標(biāo)(相對(duì)位置)01之間浮
42、點(diǎn)數(shù),0.0表示左邊緣(或上邊緣),1.0表示右邊緣(或下邊緣)width,height控件的寬度和高度非負(fù)整數(shù),單位像素relwidth,relheight控件相對(duì)于父容器的寬度和高度與relx和rely取值相似anchor錨選項(xiàng)同pack布局bordermode如果設(shè)置為INSIDE,不包括邊框;如果是OUTSIDE,包括邊框INSIDE,OUTSIDE(默認(rèn)值INSIDE)place布局使用控件坐標(biāo)來(lái)放置控件的位置。屬 性 名含 例:place布局實(shí)例。from tkinter import *#導(dǎo)入tkinter庫(kù)中所有內(nèi)容root = Tk()#創(chuàng)建tkinter對(duì)象root.geo
43、metry(200 x100)#設(shè)置窗口大小la = Label(root,text = hello Place a)#創(chuàng)建標(biāo)簽lala.place(x = 0,y = 0,anchor = NW)#使用絕對(duì)坐標(biāo)將Label放置到(0,0)位置上lb = Label(root,text = hello Place b)#創(chuàng)建標(biāo)簽lblb.place(relx = 0.5,rely = 0.5,anchor = CENTER)#使用相對(duì)坐標(biāo)將標(biāo)簽放置到窗口中央root.mainloop()#進(jìn)入主事件循環(huán)程序運(yùn)行效果 提示(1)在同一個(gè)主窗口中不要混用這3種布局管理器。(2)不推薦使用place
44、布局,因?yàn)樵诓煌直媛氏?,界面往往有較大差異。例:place布局實(shí)例。from tkinter impor11.5 標(biāo)準(zhǔn)對(duì)話框11.5.2 filedialog模塊11.5.1 messagebox模塊11.5.3 colorchooser模塊11.5 標(biāo)準(zhǔn)對(duì)話框11.5.2 filedialog模messagebox模塊用于顯示一個(gè)模式對(duì)話框,其中包含一個(gè)系統(tǒng)圖標(biāo)、一組按鈕和一個(gè)簡(jiǎn)短的特定于應(yīng)用程序的消息,如狀態(tài)或錯(cuò)誤信息。messagebox模塊askokcancel()askquestion()askretrycancel()askyesno()showerror()showwarnin
45、g()messagebox模塊用于顯示一個(gè)模式對(duì)話框,其中包含一個(gè)例:messagebox模塊實(shí)例。import tkinter as tk#導(dǎo)入tkinter模塊并命名為tkfrom tkinter import messagebox as msgbox#導(dǎo)入tkinter. messagebox模塊并命名#定義各個(gè)函數(shù)用于相應(yīng)按鈕事件def btn1_clicked(): msgbox.showinfo(Info, showinfo測(cè)試!)def btn2_clicked(): msgbox.showwarning(Warning, showwarning測(cè)試!)def btn3_clic
46、ked(): msgbox.showerror(Error, showerror測(cè)試!)def btn4_clicked(): msgbox.askquestion(Question, askquestion測(cè)試!)def btn5_clicked(): msgbox.askokcancel(OkCancel, askokcancel測(cè)試!)def btn6_clicked(): msgbox.askyesno(YesNo, askyesno測(cè)試!) def btn7_clicked(): msgbox.askretrycancel(Retry, askretrycancel測(cè)試!)例:mes
47、sagebox模塊實(shí)例。import tkintetop = tk.Tk()#創(chuàng)建tkinter對(duì)象top.title(MsgBox Test)#設(shè)置標(biāo)題#創(chuàng)建按鈕用于觸發(fā)各個(gè)對(duì)話框函數(shù)btn1 = tk.Button(top, text = showinfo, command = btn1_clicked)btn1.pack(fill = tk.X)btn2 = tk.Button(top, text = showwarning, command = btn2_clicked)btn2.pack(fill = tk.X)btn3 = tk.Button(top, text = showerror, command = btn3_clicked)btn3.pack(fill = tk.X)btn4 = tk.Button(top, text = askquestion, comma
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 三年級(jí)數(shù)學(xué)上冊(cè)教學(xué)詳案-第3單元1捐書活動(dòng)(北師大版)
- 2025年金屬門窗及類似制品合作協(xié)議書
- 2025年產(chǎn)品采購(gòu)合同經(jīng)典版(三篇)
- 2025年個(gè)人獨(dú)資企業(yè)解散協(xié)議(三篇)
- 2025年個(gè)人機(jī)械加工合同模板(2篇)
- 2025年個(gè)人設(shè)備維修合同模板(三篇)
- 2025年個(gè)人裝修承包合同常用版(2篇)
- 2025年企業(yè)臨時(shí)用工聘合同(4篇)
- 2025年個(gè)人租賃房屋協(xié)議(2篇)
- 沿江服裝運(yùn)輸合同
- 小學(xué)六年級(jí)數(shù)學(xué)上冊(cè)《簡(jiǎn)便計(jì)算》練習(xí)題(310題-附答案)
- 2024年中國(guó)養(yǎng)老產(chǎn)業(yè)商學(xué)研究報(bào)告-銀發(fā)經(jīng)濟(jì)專題
- 高教版2023年中職教科書《語(yǔ)文》(基礎(chǔ)模塊)下冊(cè)教案全冊(cè)
- 人教版英語(yǔ)七年級(jí)上冊(cè)閱讀理解專項(xiàng)訓(xùn)練16篇(含答案)
- 護(hù)理教學(xué)查房評(píng)分標(biāo)準(zhǔn)
- GB/T 23505-2017石油天然氣工業(yè)鉆機(jī)和修井機(jī)
- 《清廉文化進(jìn)校園》廉潔文化教育主題班會(huì)課件
- 人工智能發(fā)展史課件
- 古樹(shù)名木保護(hù)建設(shè)項(xiàng)目可行性研究報(bào)告
- 幼小銜接學(xué)拼音
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第九章運(yùn)動(dòng)技能學(xué)習(xí)概述
評(píng)論
0/150
提交評(píng)論