我刚刚编写了一个创建窗口(使用 TKinter)并显示一个工作按钮的代码。
b = Button(master, text="get", width=10, command=callback)
但我想在这个下面有多个按钮。
如何设置按钮的行列?我试图添加row = 0, column = 0,
,但这不起作用。
谢谢
使小部件出现需要您使用 Tkinter 所谓的“几何管理器”来定位它。三个管理器是grid、pack和place。每个人都有优点和缺点。这三个管理器被实现为所有小部件上的方法。
grid,顾名思义,非常适合在网格中放置小部件。您可以指定行和列、行和列跨度、填充等。
例子:
b = Button(...)
b.grid(row=2, column=3, columnspan=2)
pack使用了一个盒子比喻,让您沿着容器的一侧“打包”小部件。pack 非常擅长全垂直或全水平布局。例如,小部件在水平线上对齐的工具栏是使用 pack 的好地方。
例子:
b = Button(...)
b.pack(side="top", fill='both', expand=True, padx=4, pady=4)`
place是使用最少的几何管理器。使用 place 您可以指定小部件的确切 x/y 位置和确切宽度/高度。它有一些不错的功能,例如能够使用绝对坐标或相对坐标(例如:您可以将小部件放置在 10,10 或小部件宽度或高度的 50% 处)。
与grid
and不同pack
,使用place
不会导致父小部件展开或折叠以适应已放置在其中的所有小部件。
例子:
b = Button(...)
b.place(relx=.5, rely=.5, anchor="c")
使用这三个几何管理器,您几乎可以进行任何可以想象的布局。
阿斯蒂纳克斯是对的。按照您给出的示例:
MyButton1 = Button(master, text="BUTTON1", width=10, command=callback)
MyButton1.grid(row=0, column=0)
MyButton2 = Button(master, text="BUTTON2", width=10, command=callback)
MyButton2.grid(row=1, column=0)
MyButton3 = Button(master, text="BUTTON3", width=10, command=callback)
MyButton3.grid(row=2, column=0)
应该创建 3 行按钮。使用 grid 比使用 pack 好很多。但是,如果您在一个按钮上使用网格并在另一个按钮上打包,它将无法正常工作并且您会收到错误消息。
尝试网格几何管理器:
btns = [
(lambda ctl: ctl.grid(row=r, column=c) or ctl)(
Button(text=str(1 + r * 3 + c)))
for c in (0,1,2) for r in (0,1,2)]
结果:
[1][2][3]
[4][5][6]
[7][8][9]