ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

tkinter tk.grid

2021-09-22 18:36:44  阅读:141  来源: 互联网

标签:tkinter self 部件 网格 grid tk row


转载: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()

 

标签:tkinter,self,部件,网格,grid,tk,row
来源: https://www.cnblogs.com/linbo3168/p/15321114.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有