Tkinter-容器窗口

Tkinter-容器窗口

本节介绍Tkinter容器窗口对使用,包括对Tk根窗口、顶层窗口TopLevel、容器窗口Frame、标签窗口LabelFrame、布局管理窗口PanelWindow使用详解等!

根窗口(Tk)&顶层窗口(Toplevel)

Tk是根窗口组件,由Tk()创建生产

Toplevel是顶层窗口组件,类似于Frame组件,但Toplevel组件是一个独立的窗口,窗口带有标题栏、边框等,和Tk()创建出来根窗口一样

Toplevel组件常用于显示额外的窗口、对话框或者其他弹出窗口等

Toplevel使用示例:

#--coding:utf-8--fromtkinterimportttk,Tk,Toplevel,MessageclassApp(object):definit(self,mw):self.mw=mwself.initWidgets()definitWidgets(self):ttk.Button(self.mw,text=‘未读消息’,command=self.create).pack()defcreate(self):top=Toplevel()top.title(‘消息’)msg=Message(top,text=‘你有新短信消息’)msg.pack()ifname==”main”:mw=Tk()mw.title(“Toplevel组件”)App(mw)mw.mainloop()

Tk和Toplevel一些方法

(wm_)geometry(geometry=None)设置和获取窗口尺寸,参数格式:”%dx%d%+d%+d”%(width,height,xoffset,yoffset)width宽度height高度xoffsetx轴偏离yoffsety轴偏离destroy()销毁窗口focusset()设置聚点(wm)iconbitmap(bitmap=None,default=None)设置和获取窗口的图标,如root.iconbitmap(bitmap=“python.ico”),默认将使用tkinter自带图标attribute(*args)/wmattributes(*args)设置和获取窗口属性,如设置窗口透明度50%,则attribute(“-alpha”,0.5),支持设置和获取参数如下:alpha控制窗口的透明度,1.0表示不透明,0.0表示完全透明disabled禁用整个窗口(只能从任务管理器中关闭它),仅支持Windowsfullscreen设置为True,则全屏显示toolwindow设置为True,该窗口采用工具窗口样式topmost设置为True,窗口将永远置顶(wm)iconify()将窗口最小化(wm)iconwindow()获取当前窗口最小化窗口组件(wm)deiconify()显示窗口(wm)focusmodel(model=None)设置和获取焦点模式(wm)maxsize(width=None,height=None)设置和获取该窗口的最大尺寸(wm)minsize(width=None,height=None)设置和获取该窗口的最小尺寸(wm)overrideredirect(boolean=None)参数为True,该窗口忽略所有的小部件(也就是说该窗口将没有传统的标题栏、边框等部件)(wm_)protocol(name=None,func=None)将回调函数func与相应的规则name绑定name=WM_DELETE_WINDOW窗口被关闭的时候name=WM_SAVE_YOURSELF窗口被保存的时候name=WM_TAKEFOCUS窗口获得焦点的时候(wm)resizable(width=None,height=None)是否可以改变窗口的尺寸width为True允许调整窗口的水平尺寸height为True允许调整窗口的垂直尺寸(wm)sizefrom(who=None)指定窗口尺寸由谁决定who=user窗口尺寸由用户决定who=program窗口尺寸由系统决定(wm)state(newstate=None)设置和获得当前窗口的状态,newstate取值:normaliconoc窗口最小化withdraw窗口最小化icon窗口最小化zoomed放大(wm)title(string=None)设置窗口的标题(wm)transient(master=None)指定为master临时窗口(wm)withdraw()将窗口从屏幕上移除(并没有销毁),重新显示窗口,使用deiconify()方法,该方法会使得state()返回”withdraw”(wm)frame()返回一个字符串表示当前操作系统特征对于类Unix系统,返回值是X窗口标识符对于Windows系统,返回值是HWND强制转换为长整形的结果(wm)grid(baseWidth=None,baseHeight=None,widthInc=None,heightInc=None)设置根窗口或定窗口以网格形式重新调整尺寸baseWidth和baseHeight指定网格单元数widthInc和heightInc指定单元的高度和宽度(wm)group(window=None)将窗口添加到窗口群中window参数指定控制窗口群的主窗口如果忽略该选项,将返回当前窗口群的主窗口(wm_)positionfrom(who=None)指定窗口位置由谁决定who=user窗口位置由用户决定who=program窗口位置由系统决定

获得窗口属性信息

mw.winfo_geometry()返回窗口尺寸mw.winfo_width()当前窗口宽度mw.winfo_height()当前窗口高度mw.winfo_reqheight()获得窗口高度,不需要执行update操作mw.winfo_reqwidth()获得窗口宽度,不需要执行update操作mw.winfo_x()当前窗口相对于父窗口左上角X坐标,根窗口的父窗口是windowsmw.winfo_y()当前窗口相对于父窗口左上角坐标,根窗口的父窗口是windowsmw.winfo_pointerx()鼠标x轴坐标mw.winfo_pointery()鼠标y轴坐标mw.winfo_pointerxy()鼠标x、y轴坐标mw.winfo_id()当前窗口IDmw.winfo_vrooty()相对虚拟根窗口,y轴偏离量,没有虚拟窗口,则相对于屏幕mw.winfo_vrootx()相对虚拟根窗口,x轴偏离量,没有虚拟窗口,则相对于屏幕mw.winfo_children()返回当前窗口下所有子组件mw.winfo_class()返回当前窗口组件类名mw.winfo_name()窗口名称mw.winfo_parent()父窗口名称mw.winfo_depth()返回像素位数mw.winfo_vrootwidth()虚拟根窗口的宽度,如果没有虚拟根窗口返回屏幕宽度mw.winfo_vrootheight()虚拟根窗口的高度,如果没有虚拟根窗口返回屏幕高度mw.update()刷新窗口,想要得到窗口最新的动态信息,必须要执行该函数以上方法,不仅适用于Tk、Toplevel,其他窗口组件一样使用

窗口容器(Frame)

Frame是窗口容器组件,在屏幕上显示一个矩形区域,多用作容器,填充其他窗口组件

Frame组件使用示例:

#--coding:utf-8--fromtkinterimportLabel,Frame,Tk,ttk,BOTH,YESclassApp(object):definit(self,mw):self.mw=mwself.initWidgets()definitWidgets(self):#创建Labelframe容器f=Frame(self.mw)f.pack(fill=BOTH,expand=YES)Label(f,text=“雷那网”).pack()Label(f,text=“一个有温度的Python兴趣屋”).pack()ifname==”main”:mw=Tk()mw.title(“Frame组件”)App(mw)mw.mainloop()

标签窗口容器(Labelframe)

Labelframe是Frame容器的改进版,带有标签的容器,该标签可以是文本、图片,也可以是gui组件

标签容器组件导入:tkinter.LabelFrame、ttk.LabelFrame、ttk.Labelframe,这三种方式都可以

使用示例:

#--coding:utf-8--fromtkinterimportttk,Tk,BOTH,YES,IntVar,Radiobutton,LEFT,StringVarclassApp(object):definit(self,master):self.master=masterself.initWidgets()definitWidgets(self):#创建Labelframe容器lf=ttk.LabelFrame(self.master,text=‘你喜欢那个编程语言’,padding=20)lf.pack(fill=BOTH,expand=YES,padx=10,pady=10)books=[‘C++’,‘Python’,‘Linux’,‘Java’]self.var=StringVar()#使用循环创建多个Radiobutton,并放入Labelframe中forbookinbooks:Radiobutton(lf,text=book+‘教程’,value=book,variable=self.var).pack(side=LEFT)self.var=‘C++‘ifname==”main”:mw=Tk()mw.title(“Labelframe测试”)App(mw)mw.mainloop()

Labelframe标签操作属性:

labelwidget:设置可以将任意GUI组件作为标签labelanchor:设置标签的位置,该选项支持‘e’、’s’、’w’、’n’、’es’、’ws’、’en’、’wn’、’ne’、’nw’、’se’、’sw’这12个边项值,用于控制标签的位置

如下示例,对LabelFrame标签位置控制:

#--coding:utf-8--fromtkinterimportttk,Tk,BOTH,YES,PhotoImage,Label,LEFT,Radiobutton,StringVarclassApp(object):definit(self,mw):self.mw=mwself.initWidgets()definitWidgets(self):#创建Labelframe容器self.lf=ttk.LabelFrame(self.mw,padding=20)self.lf.pack(fill=BOTH,expand=YES,padx=10,pady=10)#创建一个显示图片的Labelbm=PhotoImage(file=‘image/logo.png’)lb=Label(self.lf,image=bm)lb.bm=bmself.lf[‘labelwidget’]=lb#定义代表Labelframe的标题位置的12个常量self.books=[‘e’,’s’,‘w’,‘n’,‘es’,‘ws’,‘en’,‘wn’,‘ne’,‘nw’,‘se’,‘sw’]self.var=StringVar()#使用循环创建多个Radiobutton,并放入Labelframe中forbookinself.books:Radiobutton(self.lf,text=book,value=book,command=self.change,variable=self.var).pack(side=LEFT)self.var.set(’s’)defchange(self):#通过labelanchor选项改变Labelframe的标题的位置self.lf[‘labelanchor’]=self.var.get()ifname==”main”:mw=Tk()mw.title(“Labelframe组件”)App(mw)mw.mainloop()

布局窗口容器(Panedwindow)

Panedwindow组件是管理窗口布局的容器,自带布局管理功能(不需要使用Pack、Grid或Place布局),允许通过orient选项指定水平或垂直方向,让容器中的各组件按水平或垂直方向排列

Panedwindow组件导入:tkinter.PanedWindow,ttk.PanedWindow,ttk.Panedwindow,这三种方式都可以

通过如下方法向Panedwindow容器添加子组件:

add(self,child,kw):添加一个子组件insert(self,pos,child,kw):在pos位置插入一个子组件remove(self,child):删除一个子组件,该子组件所在区域也被删除

#--coding:utf-8--fromtkinterimportttk,RAISED,VERTICAL,BOTH,Label,TkclassApp(object):definit(self,mw):self.mw=mwself.initWidgets()definitWidgets(self):#创建Stylestyle=ttk.Style()style.configure(“fkit.TPanedwindow”,background=‘darkgray’,relief=RAISED)#创建Panedwindow组件,通过style属性配置分隔线pwindow=ttk.Panedwindow(self.mw,orient=VERTICAL,style=“fkit.TPanedwindow”)pwindow.pack(fill=BOTH,expand=1)first=ttk.Label(pwindow,text=“第一个标签”)#调用add方法添加组件pwindow.add(first)okBn=ttk.Button(pwindow,text=“第二个按钮”,command=lambda:pwindow.remove(okBn))#调用add方法添加组件pwindow.add(okBn)entry=ttk.Entry(pwindow,width=30)#调用add方法添加组件pwindow.add(entry)#调用insert方法插入组件pwindow.insert(1,Label(pwindow,text=‘插入的标签’))ifname==”main”:mw=Tk()mw.title(“Labelframe组件”)App(mw)mw.mainloop()涉及TkinterStyle样式使用,会在后续章节介绍

#--coding:utf-8--fromtkinterimportttk,Tk,PanedWindow,BOTH,RAISED,HORIZONTAL,VERTICAL,YES,LabelclassApp(object):definit(self,mw):self.mw=mwself.initWidgets()definitWidgets(self):#创建Stylestyle=ttk.Style()style.configure(“fkit.TPanedwindow”,background=‘darkgray’,relief=RAISED)#创建Panedwindow组件,通过style属性配置分隔线pwindow=ttk.Panedwindow(self.mw,orient=HORIZONTAL,style=“fkit.TPanedwindow”)pwindow.pack(fill=BOTH,expand=YES)left=ttk.Label(pwindow,text=“左边标签”,background=‘pink’)pwindow.add(left)#创建第二个Panedwindow组件,该组件的方向为垂直方向rightwindow=PanedWindow(pwindow,orient=VERTICAL)pwindow.add(rightwindow)top=Label(rightwindow,text=“右上标签”,background=‘lightgreen’)rightwindow.add(top)bottom=Label(rightwindow,text=“右下标签”,background=‘lightblue’)rightwindow.add(bottom)ifname==”main”:mw=Tk()mw.title(“Panedwindow组件”)App(mw)mw.mainloop()

本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。