口令:RAPID708第7章 图形用户界面了解Tkinter工具包的作用。掌握Tkinter常用组件的使用。“Tkinter”是Python 的标准库,它对“TCL”或“TK”(工具控制语言)进一步封装,和“tkinter.ttk”和“tkinter.tix”共同提供强大 的跨平台GUI编程的功能,IDLE就是使用“Tkinter”进行开发的。“Tkinter”的安装比较简单,安装“Python”的时 候就可以选择安装。测试“tkinter”安装后默认自带的案例:>>> import tkinter>>> tkinter._tes t()编写“Tkinter”应用的主体框架具体步骤如下.:定义Windowns窗口及其属性。填写窗口内容。执行“window.ma inloop”激活窗口。import tkinter as tkf1=tk.Tk()f1.wm_title("Python GUI 窗口显示")tk.mainloop()标签是“Tkinter”模块中最简单的组件,主要功能是显示提示信息。import tkin ter as tkf1=tk.Tk()f1.wm_title("Python GUI 窗口显示")l1=tk.Label(f1,t ext="欢迎学习Python!",background="yellow")l2=tk.Label(f1,text="Python 使我快乐!",background="green")l1.pack()l2.pack()tk.mainloop()按钮是非常重要的 组件,通过单击或多次点击时可以执行相对应的功能。import tkinter as tkf1=tk.Tk()f1.wm_title ("Python GUI 窗口显示")b1=tk.Button(f1,text="按钮1")b1["width"]=20b1["h eight"]=10b1["background"]="yellow"b1.pack()tk.mainloop()“command ”属性import tkinter as tkdef event1(): global f1,num num+=1 l1=tk.Label(f1,text="点击按钮"+str(num)+"次!",background="red") l 1.pack()num=0 f1=tk.Tk()f1.wm_title("Python GUI 窗口显示")b1=tk.Butt on(f1,text="按钮1",command=event1)b1.pack()tk.mainloop()“bind( )”方法 import tkinter as tkdef event1(event): global f1,num num+=1 l1=tk.Label(f1,text="点击按钮"+str(num)+"次!",background="yellow") l1.pack()num=0 f1=tk.Tk()f1.wm_title("Python GUI 窗口显示")b1=tk .Button(f1,text="按钮1")b1.bind("",event1)b1.pack()tk.mai nloop()“pack”布局会默认选择合适的位置和大小,当有多个组件时会从上往下依次排列。“pack( )”函数常用参数:imp ort tkinter as tkf1=tk.Tk()tk.Label(f1, text=''上'').pack(side=''top'' )tk.Label(f1, text=''下'').pack(side=''bottom'')tk.Label(f1, text=''左'') .pack(side=''left'')tk.Label(f1, text=''右'').pack(side=''right'')f1.mai nloop()“grid”布局是网格布局,可以将界面分为几行几列,然后在网格中添加对应组件。网格布局的相对位置并不会随窗体大小不同 而发生改变。“grid( )”函数常用参数:import tkinter as tkf1=tk.Tk()l1=tk.Label(f 1,text="账号:9527").grid(row=0,sticky="w")l2=tk.Label(f1,text="密码:9 527").grid(row=1,sticky="w")b1=tk.Button(f1,text="登陆").grid(row=2 ,sticky="w")tk.mainloop()“place”布局给定固定的坐标,然后添加组件。这种方式操作复杂,不能随意放大或 缩小窗口,否则就会导致布局混乱,所以使用较少。import tkinter as tkf1=tk.Tk()l1=tk.Label( f1,text="Hello").place(x=0,y=0)l1=tk.Label(f1,text="Python").plac e(x=20,y=20)f1.mainloop()“Tkinter”中事件处理使用 “bind”函数。“bind”函数使用语法如下 :组件对象.bind(“events”,fun)“events”:事件类型。“fun”:回调函数(事件处理函数名)。常用事件类型如 下:1.鼠标事件:其中的取值为1、2或3。x为1时:鼠标左击事件。x为2时:鼠标中击事件。x为3时:鼠标右击事 件。2.键盘事件:X可以为键盘上任意键,直接点击即可触发事件。:X可以为键盘上F系列的任意键,直接 点击即可触发事件。:X可以为键盘上任意键,“Ctrl+x”即可触发事件。输入框的功能是获取用户输入的数据信息 。from tkinter import def reg(): myAccount = a_entry.get() # 获 取?户输?的?户名 myPassword = p_entry.get() # 获取?户输?的密码 a_len = le n(myAccount) # 获取输?的?户名? p_len = len(myPassword) # 获取输?的密码? if myAccount == "123" and myPassword == "123": msg_label[ "text"] = "登录成功" elif myAccount == "123" and myPassword!= "1 23": msg_label["text"] = "密码错误" a_entry.delete(0, a _len) #清除显示 p_entry.delete(0, p_len) #清除显示 elif myAccou nt != "123" and myPassword== "123": msg_label["text"] = "? 户名错误" a_entry.delete(0, a_len) p_entry.delete(0, p_ len) else : msg_label["text"] = "?户名、密码错误" a_e ntry.delete(0, a_len) p_entry.delete(0, p_len)root = Tk() # ?户名a_label = Label(root, text = "?户名: ")a_label.grid(row = 0, c olumn = 0, sticky = W)a_entry = Entry(root)a_entry.grid(row = 0, column = 1, sticky = E)# 密码p_label = Label(root, text = "密码: ")p_ label.grid(row = 1, column = 0, sticky = W)p_entry = Entry(root)p _entry["show"] = "" # 密码显示为 p_entry.grid(row = 1, column = 1, s ticky = E)# 登录按钮btn = Button(root, text = "登录", command = reg)btn .grid(row = 2, column = 1, sticky = E)# 提示信息msg_label = Label(roo t, text = "")msg_label.grid(row = 3)root.mainloop()文本框实质上就是一个文本。f rom tkinter import f1=Tk()t1=Text(f1,width=30,height=20)t1.pack( )f1.mainloop()顶层菜单一般包含文件、编辑、查看、窗口、帮助等下拉菜单,使用“Menu”类来自定义菜单,使用“add_ command( )”方法来添加菜单项。from tkinter import f1=Tk()m1=Menu(f1)for i in ["文件","开始","插入","设计"]: m1.add_command(label=i)f1["menu"]=m1 f1.mainloop()子菜单负责向顶级菜单中添加内容。from tkinter import f1=Tk()m1=Menu( f1)fm1=Menu(m1)for i in ["信息","新建","打开","保存"]: fm1.add_command (label=i)m1.add_cascade(label="文件",menu=fm1)f1["menu"]=m1f1.mainl oop()弹出菜单也叫“右键菜单”,鼠标单击右键时触发而产生的菜单。from tkinter import def events (): global f1 Label(f1,text="已点击共享!").pack()def m_event(eve nt): global m1 m1.post(event.x_root,event.y_root)f1=Tk()m1= Menu(f1)fm1=Menu(m1)for i in ["信息","新建","打开","保存"]: fm1.add_co mmand(label=i)fm1.add_command(label="共享",command=events)m1.add_ca scade(label="文件",menu=fm1)f1.bind("",m_event)f1["menu"] =m1f1.mainloop()单选菜单和复选菜单的使用类似于单选按钮和复选按钮,单选菜单使用 “add_radiobutton( )”函数,每次只能选定一个菜单项,复选菜单使用 “add_checkbutton( )”函数,可以同时选定多个多个菜单项,这两种 菜单一旦被选定在菜单项前面就会出现“?” 对号标记。from tkinter import f1=Tk()m1=Menu(f1) fm1=Menu(m1)for i in ["创建","打开","保存","打印"]: fm1.add_radiobutto n(label=i) #单选菜单fm1.add_separator() #添加分割线for j in ["关闭","重启"] : fm1.add_checkbutton(label=j) #复选菜单m1.add_cascade(label="文件", menu=fm1)f1["menu"]=m1f1.mainloop()单选按钮和复选按钮相当是把单选菜单和复选菜单变为按钮,单选按 钮和复选按钮分别使用“Radiobutton( )”函数和“Checkbutton( )”。from tkinter import def fun1(): global l1,cou1 if cou1 % 2 == 0: cou1 += 1 l1["text"] = "复选按钮1被选中" else: cou1 += 1 l1["text"] = "复选按钮1被取消"def fun2(): global l1,cou2 if co u2 % 2 == 0: cou2 += 1 l1["text"] = "复选按钮2被选中" e lse: cou2 += 1 l1["text"] = "复选按钮2被取消"cou1 = 0cou2 = 0f1 = Tk()c1 = Checkbutton(f1, text = "复选按钮1", command = fun1)c 1.pack()c2 = Checkbutton(f1, text = "复选按钮2", command = fun2)c2.pa ck()l1 = Label(f1, text = "")l1.pack()f1.mainloop()“Tkinter”模块中提供 了许多实用的对话框,用来显示文本消息、提示警告信息或错误信息等。from tkinter.dialog import from tkinter import def events(): d = Dialog(None, title = "Python 调查", text = "喜欢学习Python吗? ", bitmap = DIALOG_ICON, default = 0, strings = ("喜欢", "很喜欢", "?常喜欢")) print(d.num)b1= Button(None, text = "Python调查", command = events)b1.pack()b2 = Button(None, text = "关闭", command = b1.quit)b2.pack()b1.mainloop()消息框的主要作用是向用户传递提示信息,“Tkinter”模块中使用消息框需要导入“messagebox.py”文件from tkinter.messagebox import showinfo(title = "Python学习", message = "人生苦短,我学Python!")谢谢! |
|