0

我无法将我的第一个“无”复选框小部件放在我想要的位置。这是屏幕截图的链接。

在此处输入图像描述

我试图让“无”复选框小部件直接位于条目小部件的右侧。包含旋转框小部件的底部行包含在位于 row=7,column=2 的 LabelFrame 小部件中,其列跨度为 2。我的第一个复选框小部件位于 row=5,column=3 且粘性 ='w'。既然我给 LabelFrame 的列跨度为 2,为什么它不与行 = 5、列 = 2 处的 Entry 小部件相对?

这是我的代码:

tk.Label(GUI, text='label 1').grid(row=0, sticky='w')
tk.Label(GUI, text='label 2').grid(row=1, sticky='w')
tk.Label(GUI, text='label 3').grid(row=2, sticky='w')
tk.Label(GUI, text='label 4').grid(row=3, sticky='w')
tk.Label(GUI, text='label 5').grid(row=4, sticky='w')
tk.Label(GUI, text='label 6').grid(row=5, sticky='w')
tk.Label(GUI, text='label 7').grid(row=6, sticky='w')
tk.Label(GUI, text='label 8').grid(row=7, sticky='w')
tk.Label(GUI, text='label 9').grid(row=8, sticky='w')

tk.Label(GUI, text='$').grid(row=2, column=1, sticky='w')
tk.Label(GUI, text='$').grid(row=3, column=1, sticky='w')
tk.Label(GUI, text='$').grid(row=4, column=1, sticky='w')

tk.Label(GUI, text='9999').grid(row=2, column=2, sticky='w')

input1 = tk.Entry(GUI, width=10)
input2 = tk.Entry(GUI, width=10)
input3 = tk.Entry(GUI, width=10)
button_input = tk.Checkbutton(GUI, text='None')
input5 = tk.Entry(GUI, width=10)

date_field = tk.LabelFrame(GUI)
scheduled_start_month_input = tk.Spinbox(date_field, from_=1, to=12, width=2)
scheduled_start_day_input = tk.Spinbox(date_field, from_=1, to=31, width=2)
scheduled_start_year_input = tk.Spinbox(date_field, from_=2018, to=2025, width=4)
scheduled_start_hour_input = tk.Spinbox(date_field, from_=0, to=23, width=2)
scheduled_start_minute_input = tk.Spinbox(date_field, from_=0, to=59, width=2)
start_on_launch_option = tk.Checkbutton(date_field, onvalue=True, offvalue=False, text='On Launch')
scheduled_stop_month_input = tk.Spinbox(date_field, from_=1, to=12, width=2)
scheduled_stop_day_input = tk.Spinbox(date_field, from_=1, to=31, width=2)
scheduled_stop_year_input = tk.Spinbox(date_field, from_=2018, to=2025, width=4)
scheduled_stop_hour_input = tk.Spinbox(date_field, from_=0, to=23, width=2)
scheduled_stop_minute_input = tk.Spinbox(date_field, from_=0, to=59, width=2)
scheduled_stop_none = tk.Checkbutton(date_field, onvalue=True, offvalue=False, text='None')


input1.grid(row=3, column=2, sticky='w')
input2.grid(row=4, column=2, sticky='w')
input3.grid(row=5, column=2, sticky='w')
button_input.grid(row=5, column=3, sticky='w')
input5.grid(row=6, column=2, sticky='w')

date_field.grid(row=7, column=2, rowspan=2, columnspan=2, sticky='w')
scheduled_start_month_input.grid(column=0)
tk.Label(date_field, text='/').grid(column=1, row=0)
scheduled_start_day_input.grid(column=2, row=0)
tk.Label(date_field, text='/').grid(column=3, row=0)
scheduled_start_year_input.grid(column=4, row=0)
tk.Label(date_field, text=' ').grid(column=5, row=0)
scheduled_start_hour_input.grid(column=6, row=0)
tk.Label(date_field, text=':').grid(column=7, row=0)
scheduled_start_minute_input.grid(column=8, row=0)
start_on_launch_option.grid(row=0, column=9)

scheduled_stop_month_input.grid(column=0)
tk.Label(date_field, text='/').grid(column=1, row=1)
scheduled_stop_day_input.grid(column=2, row=1)
tk.Label(date_field, text='/').grid(column=3, row=1)
scheduled_stop_year_input.grid(column=4, row=1)
tk.Label(date_field, text=' ').grid(column=5, row=1)
scheduled_stop_hour_input.grid(column=6, row=1)
tk.Label(date_field, text=':').grid(column=7, row=1)
scheduled_stop_minute_input.grid(column=8, row=1)
scheduled_stop_none.grid(column=9, row=1, sticky='w')

tk.Button(GUI, text='Launch').grid(row=9, sticky='w')

GUI.mainloop()
4

2 回答 2

0

添加以下代码:

GUI.grid_columnconfigure(3, weight=1)

这意味着第 3 列将占据它可以获得的所有位置。您/默认权重为 0。这意味着 Checkbutton 实例与“无”文本一样宽,因此粘性 w 等于粘性 e 等于粘性 we 或 wens。如果您将权重设置为 1,那么您的粘性参数实际上会发生。

于 2019-06-26T22:10:54.570 回答
0

问题是第二列比你想象的要宽。要查看它,请更改将输入小部件添加到网格的行,使其如下所示:

input3.grid(row=5, column=2, sticky='ew')

您会看到,复选按钮实际上位于尽可能左的位置,并且它左侧的列负责所有额外的空间。

原因是datefield小部件跨越两列,但这两列的宽度不足以容纳日期字段。grid必须在列中添加额外的空间,以便小部件适合。

如果您希望第二列保持固定大小并使第 3 列成为增长和缩小的列,则必须为第 3 列赋予非零权重,以便grid可以将所有额外空间分配给该列。

您可以通过在某处添加这行代码来做到这一点:

GUI.grid_columnconfigure(3, weight=1)

另一种解决方案是将权重添加到不可见的第 4 列,然后datefield跨越三列而不是两列。这将导致第 2 列和第 3 列保持其自然大小,并且任何额外的空间都将分配给空列。

GUI.grid_columnconfigure(4, weight=1)
date_field.grid(row=7, column=2, rowspan=2, columnspan=3, sticky='w')
于 2019-06-26T22:46:18.413 回答