Python 3 Tkinter - 使用网格创建覆盖100%宽度的文本小部件

Hen*_*Zhu 2 python grid text tkinter

我知道你可以使用Pack Geometry Manager轻松创建一个覆盖100%宽度的Tkinter Text小部件:

from tkinter import *
root = Tk()
textWidget = Text(root)
textWidget.pack(side=TOP, fill=X)
root.geometry('600x1000')
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

但我想知道,如何使用grid Geometry Manager和grid_columnconfigure完成同样的任务?

Bry*_*ley 5

使用网格需要以下步骤:

  • 使用grid文本小部件的方法,给它一行和一列.在这种情况下,您可以使用0,0.
  • 同样使用该grid方法,定义您是否希望窗口小部件"粘贴"到它所给出的空间的两侧.在你的情况下,你可以给字符串"nsew"(北,南,东,西).
  • 配置窗口小部件所在的行的权重为1(一).这样做 grid_rowconfigure.这将导致行垂直扩展以填充任何额外空间
  • 配置窗口小部件所在的列的权重为1(一).这样做 grid_columnconfigure.这将导致列水平扩展以填充任何额外空间.

请注意,grid_rowconfigure并且grid_columnconfigure是在包含文本小部件的小部件上调用的方法,而不是在文本小部件本身上调用的方法.grid在文本小部件上调用该方法,因为您告诉文本小部件应将其自身放置在其父级中.

你的代码看起来像这样:

from tkinter import *
root = Tk()
textWidget = Text(root)

textWidget.grid(row=0, column=0, sticky="nsew")
root.grid_rowconfigure(0, weight=1)
root.grid_columnconfigure(0, weight=1)

root.geometry('600x1000')
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

当你有一个小部件来填充分配给它的所有空间时,我建议pack只是因为你可以用一行代码而不是三行来完成所有工作.pack适合这类问题.grid更适合创建小部件网格,因为它的名称适用.话虽这么说,要么完全可以接受.你可以混合和匹配grid,并pack在同一程序中,虽然你不能共享共同的父窗口部件使用它们两者.