对于任何⼀⻔图形界⾯编程来说,布局都是⾮常重要的⼀关,它的英⽂翻译叫做“layout”。不管是MFC、Java、还是Qt等图形界⾯编程, 都会有有布局的相关知识。 Python 的 Tkinter 也⼀样。
- Tkinter的三种布局:
- pack 布局:其实我们已经接触过 tkinter 的⼀种布局,就是 pack 布局,它⾮常简单,我们不⽤做过多的设置,直接使⽤⼀个 pack 函数就可以了。
- grid 布局:grid 可以理解为⽹格,或者表格,它可以把 界⾯设置为⼏⾏⼏列的⽹格,我们在⽹格⾥插⼊我们想要的元素。这种布局的好处是不管我们如何拖动窗⼝,相对位置是不会变化的,⽽且这种布局也超简单。
- place 布局:它直接使⽤死板的位置坐标来布局,这样做的最⼤的问题在于当我们向窗⼝添加⼀个新部件的时候,⼜得重新测⼀遍数据,且我们不能随便地变⼤或者缩⼩窗⼝,否则可能会导致混乱。
注意: pack 和 grid 不能同时⽤。⽽且通常对于较为复杂点的界⾯, 还是建议⼤家⽤gird;如果布局相对简单,使⽤pack 也很不错。
pack 布局 #
我们使⽤ pack 函数的时候,默认先使⽤的放到上⾯,然后依次向下排,它会给我们的组件⼀个⾃认为合适的位置和⼤⼩,这是默认⽅式,也是我们上⾯⼀直采⽤的⽅式。
| 选项 | 含义 |
|---|---|
| anchor | 1. 控制组件在 pack 分配的空间中的位置 ;2. “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, 或者 “center” 来定位(ewsn 代表东西南北,上北下南左西右东); 3. 默认值是 “center” |
| expand | 1. 指定是否填充父组件的额外空间 2. 默认值是 False |
| fill | 1. 指定填充 pack 分配的空间 ;2. 默认值是 NONE,表示保持子组件的原始尺寸 ;3. 还可以使用的值有:“x”(水平填充),“y”(垂直填充)和 “both”(水平和垂直填充) |
| in_ | 1. 将该组件放到该选项指定的组件中 ;2. 指定的组件必须是该组件的父组件 |
| ipadx | 指定水平方向上的内边距 |
| ipady | 指定垂直方向上的内边距 |
| padx | 指定水平方向上的外边距 |
| pady | 指定垂直方向上的外边距 |
| side | 1. 指定组件的放置位置;2. 默认值是 “top” ;3. 还可以设置的值有:“left”,“bottom”,“right” |
grid 布局 #
由于我们的程序⼤多数都是矩形,因此特别适合于⽹格布局,也就是 grid 布局。
| 选项 | 含义 |
|---|---|
| column | 1. 指定组件插入的列(0 表示第 1 列) ;2. 默认值是 0 |
| columnspan | 指定用多少列(跨列)显示该组件 |
| in_ | 1. 将该组件放到该选项指定的组件中 ;2. 指定的组件必须是该组件的父组件 |
| ipadx | 指定水平方向上的内边距 |
| ipady | 指定垂直方向上的内边距 |
| padx | 指定水平方向上的外边距 |
| pady | 指定垂直方向上的外边距 |
| row | 指定组件插入的行(0 表示第 1 行) |
| rowspan | 指定用多少行(跨行)显示该组件 |
| sticky | 1. 控制组件在 grid 分配的空间中的位置; 2. 可以使用 “n”, “e”, “s”, “w” 以及它们的组合来定位(ewsn代表东西南北,上北下南左西右东);3.使用加号(+)表示拉长填充,例如 “n” + “s” 表示将组件垂直拉长填充网格,“n” + “s” + “w” + “e” 表示填充整个网格;4.不指定该值则居中显示 |