Python tkinter grid, значение строки игнорируется в виджете ScrolledText

#python-3.x #tkinter

#python-3.x #tkinter

Вопрос:

Я хочу, чтобы между виджетом ввода и виджетом ScrollText был пробел. Я думал, что это будет так же просто, как установить row = 2 для сетки. Странно то, что независимо от того, что я установил для строки, виджет ScrollText всегда начинается со строки 1. Я полагаю, я мог бы добавить пустой текстовый виджет, чтобы освободить место, но я не понимаю, почему настройка строки у меня не работает.

 from tkinter import *
from tkinter import scrolledtext

main = Tk()
main.title("Grid Prob")
main.geometry('750x750')


text = StringVar()
entSearch = Entry(main, textvariable = text, width = 50, font='arial 12',
                  highlightthickness=1)
entSearch.grid(row = 0, column = 1)

txt = """This is some text to be entered into the text widget. It should 
word wrap when the text exceeds the width of the widget."""
textw = scrolledtext.ScrolledText(main,width=70,height=33)

# No matter what number I put for row the scroll widget always starts in 
# row 1
textw.grid(column=1, row=3)

textw.config(background="light grey", foreground="black",
             font='arial 12', wrap='word')
textw.insert(END, txt)    

main.mainloop()
  

Комментарии:

1. высота пустых строк равна нулю.

2. Я не совсем понимаю, о чем вы говорите. Не могли бы вы объяснить это немного подробнее?

3. После создания еще нескольких тестовых примеров я думаю, что понимаю, о чем вы сейчас говорите. Смотрите мое решение ниже.

Ответ №1:

Если я правильно интерпретировал то, что Брайан Оукли сказал в комментариях выше, проблема в том, что, поскольку мой код ничего не помещал в строку 2, по умолчанию она (строка 2) имеет высоту 0. Это означает, что я помещаю свой виджет ScrollText в строку 3, как и предполагалось, но поскольку строка 2 имеет высоту 0, визуально это выглядит так, как будто он помещается в строку 2. Я добавил в свой код пустую метку высотой в единицу и поместил ее в строку 2. Это обеспечило пространство, которое я искал. Вот дополнительный код, который я добавил.

 label_1 = Label(main, width = "70", height = "1")
label_1.grid(row=1, columnspan=3)
  

Кажется странным, что tkinter заставляет вас добавлять виджеты только для того, чтобы предоставить пробел. Если кто-нибудь знает лучший способ сделать это, пожалуйста, дайте мне знать.

Комментарии:

1. Вы можете использовать grid_rowconfigure метод, чтобы установить минимальный размер пустой строки.