python tkinter图形界面和代码结合,pythontkinter控件
布局管理器(注意:有些组件的大小不会随着窗口的伸缩而改变)。
GUI应用程序必须有大量的组件。这些组件是如何排列的?此时,您需要使用tkinter提供的布局管理器来组织和管理父组件中子组件的布局。Tkinter有三种类型的管理器:包、网格和布局。
网格布局管理器网格表布局。使用表结构来组织组件。子组件的位置由行列单元格决定,可以跨多列放置,实现复杂布局。
网格))方法提供的选项
网格函数表
函数说明grid_slaves()以列表的形式返回该控件的所有子控件对象grid_configure(option=value),并在网格布局管理器中设置属性。如果属性(选项值)值用于将grid_propagate(boolean)设置为True,则父控件的几何大小由子控件(默认值)决定,而不是重置。grid,带有当前选项grid_location(x,y)的设置控件将返回x,y(相对于屏幕中存储的单元格)坐标,以及网格系统中哪些单元格包含坐标(列,行大小)来表示组件的网格大小。Col2=None,row2=None()返回包含四个元素的元组,用于描述控件中部分或全部单元格的边界。前两个数字是左上区域的x和y坐标,后两个数字是宽度和高度。如果只传递列和行参数,返回的参数将描述矩阵中单元的大小。如果传递了col2和row2参数,则返回的参数将描述从列到col2和行到行的整个区域的大小。Grid_rowconfigure(index,* * options)-设置行属性(注意:该组件的网格序列在行属性设置表grid_columnconfigure中)
表:行属性设置表
可选的minsize指定行的最小高度。指定填充行最大网格的垂直边距权重。指定行之间的相对距离。默认值为0。说明:第一次创建窗口时,网格会根据组件的大小自动调整窗口大小,thdmf拉伸窗口的大小为空白。此选项指定是否填充行之间的空白,默认情况下不填充。此外,此选项的值指定填充的倍数。例如,权重=2的列将填充两倍于权重=1的列的空白,因此如果需要均匀填充,只需将所有列设置为权重=1。【示例】Grid layout用法-Fromtkinterimport * fromtkinterimportmessageboxmortrandoclassapplication(frame):def _ _ init _)设计登录界面master=none (3360 susue) super))表示父类的定义。父对象self . master=master self . pack(self . create widget)Defcreatewidget(self): 显示登录界面" " self.label01.grid(row=0,Column=0)self . entry 01=entry)self . entry 01 . grid(row=0 Column=2)label(self)show= * 。grid) row=1,cooow sticky=e=Ew(button) self,text="cancel ")。网格(行)
Rid布局——实现计算器软件接口。根据实际简易计算器的按键分布,设计类似的计算器界面,相应的功能暂不需要实现。
可以设计成7行4列的表格布局,然后在里面放置相应的按钮。
from tkinter import * from tkinter import messagebox import random class Application(Frame):def _ _ init _ _(self,Master=none): super()。_ _ init _ _ (master) # super()表示父类的定义,而不是父类对象self . master=master self . pack()self . create widget()def create widget(self):通过网格布局实现计算器的接口 btntext=((mc , m-, Mr ),( c , ,/, ),(7,8,9,-),(4,5,6 ),(1,2,3,=),(0,.) )入口(自己)。grid(row=0,column=0,columnspan=4,pady=10) for rindex,r in enumerate(BTN text):for cindex,c in enumerate(r):if c===:Button(self,text=c,width=2)。grid(row=rindex 1,column=cindex,rowspan=2,sticky=NSEW)elif c==0:Button(self,text=c,width=2)。grid(row=rindex 1,column=cindex,columnspan=2,sticky=NSEW) elif c== . :按钮(self,text=c,width=2)。grid(row=rindex 1,column=cindex 1,sticky=NSEW) else: Button(self,text=c,width=2)。grid(row=rindex 1,column=cindex,Sticky=NSEW)if _ _ name _ _= _ _ main _ _ :root=TK()root . geometry( 200 x200 200 300 )app=application(master=root)root . main loop()pack布局管理器包按照子组件的创建顺序将子组件添加到父组件中。如果不指定任何选项,默认情况下,在父组件中从上到下垂直添加组件。
Pack适用于对少量组件进行排序,因此使用起来相当简单。通常,您可以直接使用。添加组件后的pack()方法。但是如果要布局复杂的组件,就要用grid()或者Frame框架。
(子控件可以重写父控件(使用_)中的参数)
pack()方法提供的选项
【xwddn建议】pack布局的所有属性都在上面列出来了,但是不需要一一熟悉,知道基本的就可以了。Pack适用于简单的垂直或水平布局。如果需要复杂的布局,可以用网格或者地方。
包装的功能包括:
slaves()函数返回该控件的所有子控件对象。如果不使用pack(),slaves()不会输出没有pack()的子控件,即使子控件已经被实例化。例如,B4将不被输出。B2和b3将被视为b1的传播(标志)函数,它确定父控件的大小是否与子控件相关。如果flag为True,父控件的大小就是包括子控件在内的大小。如果flag为False,则意味着父控件的大小独立于子控件。但是geometry()会使propagate()无效,窗口的大小由geometry()决定(会改变图像的位置和组件的位置,从头开始放)。【示例】pack布局的用法,制作钢琴键布局#从tkinter import *root=Tk()测试pack布局管理;Root.geometry(700x220)#Frame是一个矩形区域,其中其他子组件f1=Frame(root)f1 . pack()F2=Frame(root);F2.pack()btnText=(流行风,中国风,日式,重金属,轻音乐)for txt in btntext: button (f1,text=txt)。pack (side= left ,padx= 10) for I in range ( Width=5,height=10,BG= black if I % 2==0 else white))。pack(side= left )root . main loop()Place layout manager Place layout manager可以通过坐标精确控制组件的位置,适用于一些布局更加灵活的场景。
注意:您必须设置父控件(不是主窗口)的大小。否则,将不显示该控件及其子控件。地方是笨重的使用。需要注意的事情很多。优点是你可以随意放置控件。Place()必须包含参数,否则将不显示控件。
place()方法的选项
注意:in_不是一个可以任意指定的组件。如果在此参数中使用,则此组件必须满足以下要求:它是其父容器或父容器的子组件;否则,将会报告一个错误。
位置函数
【示例】地方布局管理-扑克牌游戏演示
扑克牌游戏的界面设计 from tkinter import * class Application(Frame):def _ _ init _ _(self,master=None): super().__init__(主)#超级()代表的是父类的定义,而不是父类对象自我。主人=主宰自我。包装()自我。create widget()def创建widget(self): 通过地方布局管理器实现扑克牌位置控制“”“#自我。photo=照片图像(file= imgs/puke 1/puke 1。gif))# self。吐1=标签(自我。主人,形象=自我。照片)#自己。呕吐1。放置(x=10,y=50)自我。photos=[photo image(file= imgs/puke/puke 1 str(I 1) .gif )for I in range(10)]self。pukes=[Label(self。主人,形象=自我。范围内的I的照片[I])(10)]范围内的I(10):自我。呕吐.place(x=10 i*40,y=50) #为所有的标签增加事件处理self.pukes[0].bind_class(Label , Button-1 ,self.chupai) def chupai(self,event):print(event。小部件。winfo _ geometry())打印(事件。小部件。winfo _ y()==50:事件。小部件。place(y=30)else:事件。小部件。place(y=50)if _ _ name _ _= _ _ main _ _ :root=Tk()root。几何( 600 x270 200 300 )app=应用程序(主
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。