zoukankan      html  css  js  c++  java
  • tkinter tk.grid

    转载:https://blog.csdn.net/hepu8/article/details/89417831

    用Tkinter打造GUI开发工具(12)Tkinter小部件的grid布局
    部件的网格放置grid()方法是使用行列位置的方法放置部件。 grid()方法布局管理器会将控件放置到一个二维的表格里。主控件被分割成一系列的行和列,表格中的每个单元(cell)都可以放置一个控件。
    grid()是Tkinter里面最为灵活的几何管理布局器。grid()方法不能和pack()方法混用。
    当你设计对话框的时候,grid布局管理器是一个非常方便的工具。在大多数情况下,你只需要将所有控件放置到容器类部件中,然后使用grid将它们布局到任何你想要布局的地方。
    使用pack进行布局的话,你可能需要一些额外的Frame控件,并自行调整。如果你使用grid的话,你只需要对每个控件使用grid(),所有的东西都会以合适的方式显示。
    使用grid()显示一个小部件w,其语法格式如下:

    1 w.grid(option=value, ...)

    grid()方法参数option见表。

    参数 说明

    1. column 部件所在的起始列位置。
    2. columnspan 部件的列宽,跨列数。
    3. in_ in_=w2使用。将w注册为w2部件的子部件。
    4. ipadx 设置部件里面水平方向空白区域大小。
    5. ipady 设置部件里面垂直方向空白区域大小。
    6. padx x方向间距。
    7. pady y方向间距。
    8. row 部件所在的起始行位置。
    9. rowspan 部件所跨的行数。
    10. sticky 对齐方式:NSEW(北南东西)上下右左。

    由于我们的程序大多数都是矩形,因此特别适合于网格布局,即 grid 布局。
    使用 grid()布局方法,至少给两个参数,用 row 表示行,用 column 表示列,其中值得注意的是 row 和 column 的编号都从 0 开始。
    grid()函数还有个 sticky 参数,它可以用 N,E,S,W 表示上右下左,它决定了子部件对齐的位置。
    sticky=N/S/E/W:顶端对齐/底端对齐/右对齐/左对齐。
    sticky=N+S:拉伸高度,使其在水平方向上顶端和底端都对齐。
    sticky=E+W,拉伸宽度,使其在垂直方向上左边界和右边界都对齐。
    grid()布局直接用后面的行和列的数字来指定了它位于的位置,而不必使用其他参数。
    grid()函数也支持诸如 ipadx,ipady,padx,pady,意思与pack 函数相同,默认边距是 0。
    Tkinter的Grid类,除了grid()方法外,还提供有一些方法。

    常用方法

    1. w.grid_bbox ( column=None, row=None, col2=None, row2=None )

    返回一个4成员元组,描述W部件中的部分或全部网格系统的包围框。返回的前两个数字是该区域左上角的X和Y坐标,第二个数字是宽度和高度。
    如果你通过参数列column和参数行row,返回的包围框描述了该列和行中单元格的区域。如果你也通过参数 col2和 row2,返回的包围框描述了从列column到col2的网格区域,并从行row 到row2包含的网格区域。
    例如,w.grid_bbox(0,0,1,1)返回四个单元格的包围框,而不是一个。
    w.grid_forget()
    此方法使W部件从屏幕上消失。它仍然存在,只是看不见。你可以使用.grid() 使它再次出现,但它不会记得它的上次网格选项。
    w.grid_info()
    返回一个字典,其关键字是W的选项名,与这些grid选项对应的值。
    w.grid_location ( x, y )
    给定相对于包含部件的坐标 (x, y) ,此方法返回一个元组(col, row),描述W网格系统中包含该屏幕坐标的单元格。
    w.grid_propagate()
    通常,所有的部件都传递它们的尺寸,也就是说它们会根据内容进行调整。然而,有时候你想强迫一个部件有一定的尺寸,不管里面的东西有多大。要做到这一点,调用w.grid_propagate(0),其中W是要强制大小的部件。
    w.grid_remove()
    这个方法就像.grid_forget(),但它的网格grid选项被记住了,所以,如果你再来一遍 .grid(),它将使用上一次相同的网格grid配置选项。
    w.grid_size()
    返回在W的网格系统中。包含列数和行数的2元素元组。
    w.grid_slaves ( row=None, column=None )
    返回由W部件管理的部件列表。如果不提供参数,您将得到所有托管部件的列表。使用row= argument。只选择一行中的部件;或column= argument只选择列中的部件。

    配置列和行大小
    除非您采取某些措施,否则给定部件内的网格列的宽度将等于其最宽单元格的宽度,
    网格行的高度将是其最高的单元格的高度。
    如果您想要覆盖此列和行的自动调整大小,在包含网格布局的父部件W上使用这些方法:
    小部件上的粘性属性sticky只控制在不完全填充单元格的情况下放置的位置。
    w.columnconfigure ( N, option=value, … )
    在W部件内部的网格布局中,配置列n,使给定的选项具有给定的值。有关选项,请参见下面。
    w.rowconfigure ( N, option=value, … )
    在W部件内部的网格布局中,配置行n,以便给定的选项具有给定的值。有关选项,请参见下面。
    这里是配置列和行大小的选项。
    minsize : 列或行的最小大小,单位为像素。如果在给定的列或行中没有任何内容,即使您使用此选项,它也不会出现。
    pad:将添加到给定列或行的像素数,超过或超过列或行中最大的单元格。
    weigh:要使列或行具有可伸缩性,请使用此选项并提供一个值,该值给出分配多余空间时,此列或行的相对权重。
    例如,如果部件W包含网格布局,这些线路将分配四分之三的额外第一栏的空格和第二栏的空格:

    w.columnconfigure(0, weight=3)
    w.columnconfigure(1, weight=1)
    如果不使用此选项,则列或行不会拉长。
    下面看一个Grid示例。

     1    # -*- coding: utf-8 -*-
     2    from  time  import  sleep
     3     import  tkinter  as  tk
     4     
     5     root=tk.Tk()  #闯将 Tk主窗口
     6     colours = ['white','black','red','green','blue','cyan','yellow','magenta']
     7     lables=[]
     8     entrys=[]
     9     
    10     r = 0
    11     for c in colours:
    12         l=tk.Label(root,text=c, relief=tk.RIDGE,width=10)
    13         l.grid(row=r,column=0)
    14         e=tk.Entry(root,bg=c, relief=tk.SUNKEN,width=10)
    15         e.grid(row=r,column=1)
    16         lables.append(l)    
    17         entrys.append(e)
    18         r = r + 1
    19     root.update()
    20     
    21     sleep(5)  #暂停5秒
    22     
    23     lables[2].grid_forget()
    24     entrys[4].grid_forget()
    25     
    26     lables[2].grid(row=4,column=1)
    27     entrys[4].grid(row=2,column=0)
    28     
    29     lables[5].grid_configure(row=8,column=0,columnspan=2)
    30     print(entrys[3].grid_info())
    31     
    32     root.mainloop() #开启Tkinter主循环

    3. 随根窗口自动调整大小
    您是否希望用户调整整个应用程序窗口的大小,把多余的空间分配给它的内部部件? 这需要一些不明显的操作。
    有必要将这些技术用于行和列的大小管理,“配置列和行大小”,以使应用程序部件的网格可伸缩的方法,显然是是不够用的。
    下面程序可以实现按钮使用grid()方法,并使部件随窗口大小而改变尺寸。

     1 # -*- coding: utf-8 -*-
     2 import  tkinter as tk
     3 class Application(tk.Frame):
     4     def __init__(self, master=None):
     5         self.master=master
     6         tk.Frame.__init__(self, master)
     7         #self.grid()
     8         self.grid(sticky=tk.N+tk.S+tk.E+tk.W)
     9         self.createWidgets2()
    10 
    11     def createWidgets(self):
    12         self.quitButton = tk.Button ( self, text='Quit',
    13                                   command=self.quit )
    14         self.quitButton.grid()
    15 
    16 
    17     def createWidgets2(self):
    18         top=self.winfo_toplevel()
    19         top.rowconfigure(0, weight=1)
    20         top.columnconfigure(0, weight=1)
    21 
    22         self.rowconfigure(0, weight=1)
    23         self.columnconfigure(0, weight=1)
    24         self.quit = tk.Button ( self, text="Quit", command=self.quit )
    25         self.quit.grid(row=0, column=0,
    26                        sticky=tk.N+tk.S+tk.E+tk.W)
    27         
    28     def quit(self):
    29         self.master.destroy()
    30 
    31 app = Application(tk.Tk())
    32 app.master.title("grid自动改变大小的应用程序演示")
    33 app.mainloop()

  • 相关阅读:
    Centos 7.0 下安装 Zabbix server 3.0服务器的安装及 监控主机的加入(1)
    Linux系统级别能够打开的文件句柄的数file-max命令
    记:cloudstack--gluster主存储上的一个文件损坏导致SSVM启动失败
    Linux 之 inotify+rsync 备份文件系统
    为什么KVM计算机点无故重启?
    vim批量在文件每行添加内容以及查询cloudstack模板是否是增量
    记-cloudstack 更改二级存储
    apache 自定义404错误页面
    URL路由
    前端图片优化
  • 原文地址:https://www.cnblogs.com/linbo3168/p/15321114.html
Copyright © 2011-2022 走看看