Виджет Столбца, отбрасывающий столбцы - PullRequest
0 голосов
/ 27 июня 2019

У меня проблемы с получением моего первого виджета флажка "Нет", где я хочу его.Вот ссылка на скриншот.

enter image description here

Я пытаюсь установить виджет-флажок «Нет» прямо справа от виджета «Ввод».Нижние строки, содержащие виджеты SpinBox, содержатся в виджете LabelFrame, расположенном в строке = 7, столбце = 2, у которого размер столбца равен 2. Мой первый виджет флажка расположен в строке = 5, столбце = 3 с sticky = 'w'.Почему тогда это не против виджета Entry в row = 5, column = 2, так как я дал LabelFrame интервал столбцов 2?

Вот мой код:

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()

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Проблема в том, что 2-й столбец шире, чем вы думаете.Чтобы увидеть это, измените строку, где вы добавляете входной виджет в сетку, чтобы он выглядел следующим образом:

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')
0 голосов
/ 27 июня 2019

Добавьте следующий код:

GUI.grid_columnconfigure(3, weight=1)

Это означает, что столбец 3 будет занимать все место, которое он может получить.Ваш вес по умолчанию равен 0. , и это означает, что экземпляр Checkbutton является широким, как и текст «None», поэтому значение «липкий» равно «липкое», равно равно «липкий» или «wens».Если вы установите вес равным 1, тогда ваш аргумент будет иметь место.

...