我在将第一个“无”复选框小部件放置在所需位置时遇到问题。这是屏幕截图的链接。
我正在尝试使“无”复选框小部件直接位于“条目”小部件的右侧。包含Spinbox小部件的底部行包含在LabelFrame小部件中,该部件位于row = 7,columnpan = 2,columnpan为2。我的第一个复选框小部件位于row = 5,column = 3,带有sticky ='w'。既然我给LabelFrame的columnpan设置为2,为什么它为什么不与row = 5,column = 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()
答案 0 :(得分:0)
添加以下代码:
GUI.grid_columnconfigure(3, weight=1)
这意味着第3列将占据它可以获得的所有位置。您的/默认权重为0。,这意味着Checkbutton实例很宽,就像“ None”文本一样,因此粘性w等于粘性e等于粘性we或wens。如果将权重设置为1,则粘性参数实际上会发生。
答案 1 :(得分: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')