Python程序設計基礎 課件 第7章 圖形用戶界面_第1頁
Python程序設計基礎 課件 第7章 圖形用戶界面_第2頁
Python程序設計基礎 課件 第7章 圖形用戶界面_第3頁
Python程序設計基礎 課件 第7章 圖形用戶界面_第4頁
Python程序設計基礎 課件 第7章 圖形用戶界面_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第七章圖形用戶界面:tkinter與wxPython入門tkinterwxPython本章案例本章小結目錄CONTENTS7.1概述7.27.37.47.5概述7.1GUI由組件、窗體、屬性、事件和方法五大元素組成。組件是界面的基本單元,窗體是組件的容器,屬性控制組件外觀,事件驅動交互,方法實現(xiàn)功能。GUI的組成元素常用的GUI庫包括tkinter和wxPython。tkinter是Python內置庫,簡單易用;wxPython是第三方庫,功能豐富,支持原生外觀。常用GUI庫圖形用戶界面(GUI)是一種通過圖形元素與用戶交互的界面,具有直觀、易用的特點。它通過可視化組件降低操作門檻,提升用戶體驗。GUI的定義與優(yōu)勢7.1GUI簡介tkinter7.27.2.1窗體創(chuàng)建以下3種方式均可導入tkinter,程序代碼如下:importtkinterimporttkinterastkfromtkinterimport*1.導入tkinter2.創(chuàng)建窗體程序代碼如下:win=tkinter.Tk() #創(chuàng)建窗體win.title("窗體標題")#設置窗體標題win.geometry("寬x高+水平坐標+垂直坐標")#設置窗體的大小和位置,使用英文字母x7.2.1窗體創(chuàng)建3.在窗體中添加組件4.窗體布局5.事件處理程序代碼如下:window.mainloop()當窗體中的容器進入事件循環(huán)狀態(tài)時,容器內部的其他圖形對象會處于循環(huán)等待狀態(tài),準備接收消息,并根據(jù)消息執(zhí)行相應的操作,完成某項功能。6.進入事件循環(huán)例7-1使用tkinter創(chuàng)建窗體程序代碼如下:importtkinterwindow=tkinter.Tk()window.mainloop()運行結果如圖7-1所示。圖7-1

使用tkinter創(chuàng)建窗體7.2.2基本控件Label(標簽)控件是tkinter中非常簡單的控件之一,用于顯示文字和圖片,即展示信息。最終呈現(xiàn)的Label控件是由背景和前景疊加構成的內容,語法格式如下:w=tkinter.Label(master,option=value,…)Label控件用于顯示文本或圖片,常用屬性包括text、bg、font、width、height等。通過place方法可設置控件位置。Label控件01例7-2Label控件的設置程序代碼如下:importtkinterwin=tkinter.Tk()win.title("Label控件") #設置窗體標題win.geometry("200x200")#設置窗體的大小和位置win.resizable(width=True,height=False) #設置窗體是否可變,True表示可變l=tkinter.Label(win,text="標簽",bg="snow",font=("宋體",12),width=10,height=2)l.place(x=10,y=30)win.mainloop()圖7-2

Label控件的設置7.2.2基本控件Text(文本)控件用于輸入多行文本,支持圖像、富文本等格式。使用Text()方法創(chuàng)建文本框,用于數(shù)據(jù)的輸入和顯示,語法格式如下:w=tkinter.Text(master,option=value,…)Text控件02例7-3 Text控件的設置程序代碼如下:importtkinterwin=tkinter.Tk()win.title("Text控件")#設置窗體標題l=tkinter.Text(win,bg="snow",font=("宋體",12),width=10,height=2)l.insert("1.0","文本")l.place(x=10,y=30)win.mainloop()圖7-3

Text控件的設置7.2.2基本控件Button(按鈕)控件用于創(chuàng)建按鈕和執(zhí)行用戶的單擊操作,是實現(xiàn)人機交互的主要控件。當用戶單擊按鈕時,會觸發(fā)某個事件從而執(zhí)行相應的操作。當焦點位于按鈕上時,按空格鍵或單擊鼠標左鍵,會觸發(fā)command事件,語法格式如下:w=tkinter.Button(master,option=value,…)Button控件03例7-4

Button控件的設置(1)程序代碼如下:importtkinterwin=tkinter.Tk()win.title("Button控件(1)")win.geometry("300x200")bt1=tkinter.Button(win,text="禁用",width=10)bt1.pack(side="left")bt2=tkinter.Button(win,text="開始",width=10)bt2.pack(side="left")bt3=tkinter.Button(win,text="確定",width=10)bt3.pack(side="right")win.mainloop()圖7-4Button控件的設置(1)例7-5

Button控件的設置(2)程序代碼如下:win=tkinter.Tk()win.title("Button控件(2)")win.geometry("300x200")defcloseWin():iftkinter.messagebox.askokcancel("提示","是否確認退出"):win.destroy()bt=tkinter.Button(win,text="關閉",command=closeWin)bt.pack(side="top")win.mainloop()運行結果如圖7-5所示。當單擊“關閉”按鈕時,打開提示界面,繼續(xù)單擊“確定”按鈕,將窗體全部關閉。圖7-5Button控件的設置(2)7.2.2基本控件Entry(輸入)控件是接收輸入的單行字符串的控件。當輸入的字符串長度大于Entry控件的寬度時,字符串會自動向后滾動,此時無法全部顯示所輸入的字符串。Entry控件只能使用預設字體,語法格式如下:w=tkinter.Entry(master,option=value,…)Entry控件04例7-6

Entry控件的設置程序代碼如下:importtkinter.messageboxwin=tkinter.Tk()win.title("Entry控件")win.geometry("300x200")l1=tkinter.Label(win,text="用戶名")l1.grid(row=0)l2=tkinter.Label(win,text="密

碼")l2.grid(row=1)e1=tkinter.Entry(win,width=20)e1.grid(row=0,column=1)e2=tkinter.Entry(win,width=20)e2.grid(row=1,column=1)win.mainloop()圖7-6Entry控件的設置例7-6

Entry控件的設置Entry控件提供了insert()方法和delete()方法。insert()方法用于插入內容,對其進行調用的語法格式如下:insert(index,text)

index參數(shù):表示插入內容的開始位置。

text參數(shù):表示要插入的內容。delete()方法用于刪除內容,對其進行調用的語法格式如下:delete(first,last=None)兩個參數(shù)都是整數(shù),如果只傳入一個參數(shù),則會刪除該參數(shù)指定位置的字符;如果傳入兩個參數(shù),則表示刪除指定范圍(從first參數(shù)到last參數(shù))的字符。使用delete(0,END)語句可以刪除Entry控件中已經輸入的全部字符。7.2.2基本控件Listbox(列表框)控件用于顯示項目列表。列表框內可以包含許多選項,用戶可以選擇一項或多項,語法格式如下:w=tkinter.Listbox(master,option,…)Listbox控件05例7-7

Listbox控件的設置程序代碼如下:importtkinter.messageboxwin=tkinter.Tk()win.title("Listbox控件")win.geometry()li=["C","C++","Python","Java","HTML"]lb=tkinter.Listbox(win)foriteminli:lb.insert(0,item)lb.grid()win.mainloop()圖7-7Listbox控件的設置7.2.3布局管理器pack()布局管理器采用區(qū)塊的方式組織控件,根據(jù)控件創(chuàng)建的順序將控件添加到父控件內。如果沒有設置任何選項,則這些控件會從上到下排列。如果想要將控件按順序放入,則必須將這些控件設置為相同的anchor屬性。pack布局grid()布局管理器是一種非常推薦使用的布局管理器,具有靈活多變、使用便捷的特點。GUI以矩形界面為主,可以將其劃分為m×n個小網(wǎng)格,并自動計算網(wǎng)格的尺寸,只需要根據(jù)行號和列號,將組件逐一地放到網(wǎng)格結構中即可。grid布局place()布局管理器可以顯示指定控件在窗體中的絕對地址或相對地址。place布局0102037.2.4事件響應1.tkinter的事件當GUI運行時,大部分時間都處于消息循環(huán)過程中,等待事件的發(fā)生。當執(zhí)行人機交互操作時,會觸發(fā)鼠標、鍵盤等事件。tkinter提供了處理相關事件的機制,便于在控件內處理這些事件,語法格式如下:deffunction(event):passwidget.bind("<event>",function)2.鼠標事件在Python中可以處理以下鼠標事件。(1)<Enter>事件。移入控件。(2)<Leave>事件。移出控件。(3)<Button-1>、<ButtonPress-1>或<1>事件。單擊鼠標左鍵。(4)<Button-2>、<ButtonPress-2>或<2>事件。單擊鼠標中鍵。(5)<Button-3>、<ButtonPress-3>或<3>事件。單擊鼠標右鍵。(6)<B1-Motion>事件。按下鼠標左鍵并拖動鼠標指針。(7)<ButtonRelease-1>事件。釋放鼠標左鍵。(8)<Double-Button-1>事件。雙擊鼠標左鍵。例7-8

鼠標事件的設置程序代碼如下:importtkinterwin=tkinter.Tk()win.title("鼠標事件")win.geometry("420x100")l1=tkinter.Label(win,text="鼠標X坐標",bg="snow",font=14)l1.pack(side="left",padx=10,pady=10)l2=tkinter.Label(win,text="X坐標值",bg="snow",font=14)l2.pack(side="left",padx=10,pady=10)l3=tkinter.Label(win,text="鼠標Y坐標",bg="snow",font=14)l3.pack(side="left",padx=10,pady=10)l4=tkinter.Label(win,text="Y坐標值",bg="snow",font=14)l4.pack(side="left")defMouseLeft(event): #事件處理函數(shù)l2["text"]=event.xl4["text"]=event.ywin.bind("<Button-1>",MouseLeft) #單擊鼠標左鍵win.mainloop()圖7-8鼠標事件的設置——初始界面圖7-9鼠標事件的設置——單擊鼠標左鍵7.2.4事件響應3.鍵盤事件在Python中,可以處理以下鍵盤事件。(1)<KeyPress>事件。按下鍵盤上的任意鍵。(2)<KeyRelease>事件。釋放鍵盤上的任意鍵。(3)<KeyPress-key>事件。按下鍵盤上指定的key鍵。(4)<KeyRelease-key>事件。釋放鍵盤上指定的key鍵。例7-9

鍵盤事件的設置程序代碼如下:importtkinterwin=tkinter.Tk()win.title("鍵盤事件")win.geometry("420x100")l1=tkinter.Label(win,text="鍵盤字符",bg="snow",font=14)l1.pack(side="left",padx=10,pady=10)l2=tkinter.Label(win,text="字符",bg="snow",font=14)l2.pack(side="left",padx=10,pady=10)defKey(event):l2["text"]=event.charwin.bind("<KeyPress>",N)#按下鍵盤上的N鍵win.mainloop()圖7-10鍵盤事件的設置——初始界面圖7-11鍵盤事件的設置——按下鍵盤上的N鍵7.2.5畫布(Canvas)tkinter中的Canvas(畫布)控件具有兩個功能,一是可以用來繪制各種圖形,如弧形、線條、橢圓形、多邊形和矩形等;二是可以在其上放置圖片、文本、小部件或框架。通過Canvas控件創(chuàng)建一個簡單的圖形編輯器,可以讓用戶達到自定義圖形的目的。就像使用畫筆在畫布上繪制形狀一樣,用戶使用Canvas控件也可以繪制各種形狀,從而有更好的人機交互體驗。例7-10

創(chuàng)建一個簡單的Canvas畫布程序代碼如下:fromtkinterimport*root=Tk()root.title('Canvas創(chuàng)建畫布界面')root.geometry('400x200')canvas_1=Canvas(root,width=200,height=150,background='white')#白色畫布canvas_1.pack()root.mainloop()圖7-12創(chuàng)建一個簡單的Canvas畫布例7-11

使用Canvas控件繪制圖形程序代碼如下:#導入tkinter中的所有內容fromtkinterimport*#創(chuàng)建主窗體rootroot=Tk()root.title('Canvas畫圖功能展示')root.geometry('600x400')#創(chuàng)建并設置can1畫布can1=Canvas(root,width=500,height=350,background='white') #白色畫布can1.pack()#can1.pack(fill=BOTH,expand=True)#使用Canvas控件繪制直線與虛線can1.create_line(20,10,200,10) #繪制直線can1.create_line(20,35,200,35,dash=(5,2),fill='red') #繪制虛線例7-11

使用Canvas控件繪制圖形#使用Canvas控件繪制矩形can1.create_rectangle(20,80,100,140,fill='red',outline='green',width=8)#繪制矩形#使用Canvas控件繪制圓形can1.create_oval(250,10,380,140,width=4,fill='lightyellow') #繪制圓形,淺黃色填充#使用Canvas控件繪制橢圓形can1.create_oval(400,10,480,140,width=4,fill='lightgreen') #繪制橢圓形,淺綠色填充#使用Canvas控件添加文本框can1.create_text(320,200,text='練習CANVAS',font=('黑體',17,'bold'),fill='red') #添加文本框#使用Canvas控件添加各種按鈕but1=Button(root,text="按鈕",command=lambda:print('已單擊Button按鈕')) #創(chuàng)建按鈕rad1=Radiobutton(root,text='多選按鈕') #創(chuàng)建多選按鈕can1.create_window(280,280,window=but1) #插入按鈕can1.create_window(280,290,window=rad1,anchor=NW) #插入多選按鈕root.mainloop()wxPython7.37.3.1wxPython的安裝與配置wxPython是非常流行的GUI開發(fā)框架之一,其功能模塊不能直接導入,需要使用pip工具安裝,程序代碼如下:pipinstall-UwxPython使用wx.App的子類創(chuàng)建窗體的具體步驟如下。(1)定義子類。(2)在子類中定義初始化OnInit()方法。(3)定義該類的實例。(4)調用實例的MainLoop()方法,該方法將程序的控制權轉交給wxPython。圖7-14wxPython安裝成功界面例7-12

使用wx.APP的子類創(chuàng)建窗體程序代碼如下:importwxclassApp(wx.App):defOnInit(self):frame=wx.Frame(parent=None,title="wxPython")frame.Show()returnTrueif__name__=="__main__":app=App()app.MainLoop()圖7-15使用wx.APP的子類創(chuàng)建窗體例7-13

使用wx.APP直接創(chuàng)建窗體程序代碼如下:importwxapp=wx.App()frame=wx.Frame(None,title="wxPython")frame.Show()app.MainLoop()運行結果與圖7-15相同。本章案例7.4案例7-1用戶登錄界面的設置需要兩個Entry控件,分別用于輸入用戶名和密碼,其中,密碼需要隱藏顯示。需要3個Button控件,分別用于創(chuàng)建“確定”按鈕、“清除”按鈕、“取消”按鈕。單擊“確定”按鈕,退出當前界面(注:正常流程為單擊“確定”按鈕,驗證用戶名和密碼,成功后進入下一個界面。由于本案例中只是單一界面,沒有下一個界面,因此設置“確定”按鈕和“取消”按鈕執(zhí)行同樣的功能);單擊“清除”按鈕,清空輸入的內容;單擊“取消”按鈕,退出當前界面。案例7-1用戶登錄界面的設置程序代碼如下:importtkinterwin=tkinter.Tk()win.title("用戶界面")win.geometry("400x250")win.resizable(width=False,height=False)'''設置Label控件與Entry控件'''titlelab=tkinter.Label(win,text="歡迎使用登錄系統(tǒng)",font=("NSimSun",16),fg='black')titlelab.pack(side="top",pady=20)namelab=tkinter.Label(win,text="用戶名:",font=("NSimSun",14),fg='black')namelab.place(x=50,y=70)nameEty=tkinter.Entry(win,font=("NSimSun",14),width=20)nameEty.place(x=130,y=70)pwdlab=tkinter.Label(win,text="密

碼:",font=("NSimSun",14),fg='black')pwdlab.place(x=50,y=110)pwdEty=tkinter.Entry(win,font=("NSimSun",14),width=20,show="*") pwdEty.place(x=130,y=110)'''設置Button控件'''deffunOk():win.destroy() #退出當前界面deffunClear():nameEty.delete(0,'end') #清除輸入的內容pwdEty.delete(0,'end')btOK=tkinter.Button(win,text='確定',font=("NSimSun",14),width=8,command=funOk)btOK.place(x=50,y=180)btClear=tkinter.Button(win,text='清除',font=("NSimSun",14),width=8,command=funClear)btClear.place(x=160,y=180)btCancel=tkinter.Button(win,text='取消',font=("NSimSun",14),width=8,command=funOk)btCancel.place(x=270,y=180)win.mainloop()圖7-16用戶登錄界面的設置案例7-2Canvas控件的應用使用Canvas控件繪制圖形,程序代碼如下:fromtkinterimport*root=Tk()root.title('Canvas綜合應用')fr1=Frame(root,relief='ridge',borderwidth=1) #不設置邊框的寬度fr1.pack(fill=X) #如果fill=X,則表示控件可以填滿所分配空間的X軸fr2=Frame(root,relief='ridge',borderwidth=1) #不設置邊框的寬度fr2.pack()var1=StringVar()opt1=OptionMenu(fr1,var1,'弓形','弧形','扇形').pack(side=LEFT,padx=20)var1.set('弧形')sca1=Scale(fr1,from_=0,to=359,orient=HORIZONTAL,label='起始偏移角度')sca1.pack(side=LEFT,padx=20)sca2=Scale(fr1,from_=0,to=359,orient=HORIZONTAL,label='圓周的弧度')sca2.pack(side=LEFT,padx=20)defdraw():can1.delete('all') #清除所有對象can1.create_rectangle(50,10,180,140,dash=(3,2)) #繪制正方形can1.create_line(115,0,115,150,dash=(3,2),fill='yellow') #繪制水平中線can1.create_line(40,75,190,75,dash=(3,2),fill='yellow') #繪制垂直中線a=var1.get()ifa=='弓形':b='chord'elifa=='弧形':b='arc'elifa=='扇形':b='pieslice'can1.create_arc(50,10,180,140,style=b,start=sca1.get(),extent=sca2.get(),outline='red',width=4)#根據(jù)參數(shù)的不同,生成弓形、弧形或扇形but1=Button(fr2,text="畫:圓、弧線",command=draw)but1.pack()can1=Canvas(fr2,width=220,height=150,background='lightblue') #淺藍色畫布can1.pack(fill=BOTH,expand=True)draw()root.mainloop()圖7-17Canvas控件的應用案例7-3Canvas控件的綜合應用使用Canvas控件制作一個簡單的繪圖軟件(可以設置畫筆顏色、畫筆粗細,并清空畫布)。程序代碼如下(代碼一行寫不下時,應加“/”換行):fromtkinterimport*root=Tk()root.title('Canvas制作繪圖

溫馨提示

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

評論

0/150

提交評論