python tkinter组件,tkinter创建pack几何布局管理器的GUI程序

  python tkinter组件,tkinter创建pack几何布局管理器的GUI程序

  GUI编程相当于子积木,每个积木应该放在哪里,每个积木显示多大,也就是大小和位置需要管理,布局管理器负责管理每个组件的大小和位置。此外,当用户调整窗口大小时,布局管理器会自动调整窗口中每个组件的大小和位置。

  热门IT软件开发工作室,大量免费python视频教程,欢迎在线学习!

  如果使用Pack布局,当程序向容器中添加组件时,这些组件将依次向后排列,排列方向可以是水平的,也可以是垂直的。

  下面的程序简单地演示了Pack layout的使用,它向窗口添加了三个标签组件:

  #Python2.x使用这一行

  #fromTkinterimport*

  #Python3.x使用这一行

  fromtkinterimport *

  #创建一个窗口并设置窗口标题

  root=Tk()

  #设置窗口标题

  Root.title(包布局)

  (三):

  Lab=Label(root,text= %d Label%(i 1),bg=#eeeeee )

  #布局呼叫包

  lab.pack()

  #启动主窗口的消息循环

  root.mainloop()上面的程序创建一个窗口,然后通过循环创建三个标签,并对这三个标签的默认pack布局使用Pack()方法。运行程序看到如图所示的界面:

  图图使用默认的包装布局。事实上,程序在调用pack()方法时可以传入多个选项。例如,通过使用帮助(tkinter。Label.pack)命令查看pack()方法支持的选项,可以看到以下输出结果:

  求助(tkinter。标签.包装)

  helponfunctionpack _ configureinmoduletkinter :

  pack_configure(self,cnf={},**kw)

  Packawidgetintheparentwidget。使用选项:

  after=widget-packitafteryouhavepackedwidget

  anchor=NSEW(或子集)-positionwidgetaccordo

  给定方向

  before=widget-packkitbeforeyouwillpackwidget

  expand=bool-expandwidgetifparentsizegrows

  fill=NONEorXorYorBOTH-fillwidgetifwidgetgrows

  in=master-usemastertocontainthiswidget

  in_=master-see'in'optiondescription

  ipadx=amount-addinternalpaddinginxdirection

  ipady=amount-addinternalpaddinginydirection

  padx=amount-addpaddinginxdirection

  pady=amount-addpaddinginydirection

  side=TOPorBOTTOMorLEFTorRIGHT-wheretoaddthiswidget.从上面的显示信息可以看出,pack() 方法通常可支持如下选项:

  anchor:当可用空间大于组件所需求的大小时,该选项决定组件被放置在容器的何处。该选项支持 N(北,代表上)、E(东,代表右)、S(南,代表下)、W(西,代表左)、NW(西北,代表左上)、NE(东北,代表右上)、SW(西南,代表左下)、SE(东南,代表右下)、CENTER(中,默认值)这些值。

  

  expand:该 bool 值指定当父容器增大时才是否拉伸组件。

  fill:设置组件是否沿水平或垂直方向填充。该选项支持 NONE、X、Y、BOTH 四个值,其中 NONE 表示不填充,BOTH 表示沿着两个方向填充。

  ipadx:指定组件在 x 方向(水平)上的内部留白(padding)。

  ipady:指定组件在 y 方向(水平)上的内部留白(padding)。

  padx:指定组件在 x 方向(水平)上与其他组件的间距。

  pady:指定组件在 y 方向(水平)上与其他组件的间距。

  side:设置组件的添加位置,可以设置为 TOP、BOTTOM、LEFT 或 RIGHT 这四个值的其中之一。

  当程序界面比较复杂时,就需要使用多个容器(Frame)分开布局,然后再将 Frame 添加到窗口中。例如如下程序:

  

#Python2.x使用这行

  #fromTkinterimport*

  #Python3.x使用这行

  fromtkinterimport*

  classApp:

  def__init__(self,master):

  self.master=master

  self.initWidgets()

  definitWidgets(self):

  #创建第一个容器

  fm1=Frame(self.master)

  #该容器放在左边排列

  fm1.pack(side=LEFT,fill=BOTH,expand=YES)

  #向fm1中添加3个按钮

  #设置按钮从顶部开始排列,且按钮只能在垂直(X)方向填充

  Button(fm1,text='第一个').pack(side=TOP,fill=X,expand=YES)

  Button(fm1,text='第二个').pack(side=TOP,fill=X,expand=YES)

  Button(fm1,text='第三个').pack(side=TOP,fill=X,expand=YES)

  #创建第二个容器

  fm2=Frame(self.master)

  #该容器放在左边排列,就会挨着fm1

  fm2.pack(side=LEFT,padx=10,expand=YES)

  fm2.pack(side=LEFT,padx=10,fill=BOTH,expand=YES)

  #向fm2中添加3个按钮

  #设置按钮从右边开始排列

  Button(fm2,text='第一个').pack(side=RIGHT,fill=Y,expand=YES)

  Button(fm2,text='第二个').pack(side=RIGHT,fill=Y,expand=YES)

  Button(fm2,text='第三个').pack(side=RIGHT,fill=Y,expand=YES)

  #创建第三个容器

  fm3=Frame(self.master)

  #该容器放在右边排列,就会挨着fm1

  fm3.pack(side=RIGHT,padx=10,fill=BOTH,expand=YES)

  #向fm3中添加3个按钮

  #设置按钮从底部开始排列,且按钮只能在垂直(Y)方向填充

  Button(fm3,text='第一个').pack(side=BOTTOM,fill=Y,expand=YES)

  Button(fm3,text='第二个').pack(side=BOTTOM,fill=Y,expand=YES)

  Button(fm3,text='第三个').pack(side=BOTTOM,fill=Y,expand=YES)

  root=Tk()

  root.title("Pack布局")

  display=App(root)

  root.mainloop()

上面程序创建了三个 Frame 容器,其中第一个 Frame 容器内包含三个从顶部(TOP)开始排列的按钮,这意味着这三个按钮会从上到下依次排列,且这三个按钮能在水平(X)方向上填充;第二个 Frame 容器内包含三个从右边(RIGHT)开始排列的按钮,这意味着这三个按钮会从右向左依次排列;第三个 Frame 容器内包含三个从底部(BOTTOM)开始排列的按钮,这意味着这三个按钮会从下到上依次排列,且这三个按钮能在垂直(Y)方向上填充。

  运行上面程序,将看到如下图所示的界面。

  

  从上图中可以看到,为运行效果添加了三个框,分别代表 fm1、fm2、fm3(实际上容器是看不到的),此时可以看到 fm1 内的三个按钮从上到下排列,并且可以在水平方向上填充;fm3 内的三个按钮从下到上排列,并且可以在垂直方向上填充。

  可能有读者会有疑问,fm2 内的三个按钮也都设置了 fill=Y,expand=YES,这说明它们也能在垂直方向上填充,为啥舍看不到呢?仔细看 fm2.pack(side=LEFT, padx=10, expand= YES)这行代码,它说明 fm2 本身不在任何方向上填充,因此 fm2 内的三个按钮都不能填充。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: