Я создал два виджета текстового поля бок о бок. Левое поле «Текст» содержит 100 строк ящиков Checkbutton. Правильное текстовое поле содержит 100 строк текста. Я настроил оба текстовых поля на одну и ту же высоту 30 и ширину 10.Tkinter: Работа с Checkbutton + панель прокрутки внутри текстового виджета
Когда я запускаю программу, левое текстовое поле растет вертикально за пределы области экрана, доступной для просмотра. В результате правильное текстовое поле сдвигается так далеко по кадру, что я больше не могу его видеть. Я знаю, что он есть, потому что, когда я уменьшаю количество строк (для обоих ящиков) до 50 (в отличие от 100), я могу видеть нужное текстовое поле.
Кроме того, я заметил, что левая панель прокрутки не подключена к левому текстовому окну. Однако правая панель прокрутки правильно подключена к правильному текстовому полю.
Не могли бы вы помочь мне понять:
1) Почему окно слева текст растут вертикально (за пределами определенного текста размера виджета) и из синхронизации с нужным размером текста коробки и положение?
2) Почему левая панель прокрутки не прикреплена к левому текстовому виджету (например, текстовое поле)?
Вот мой код до сих пор:
#!/usr/bin/python
from Tkinter import *
class MyApp:
def __init__(self, parent):
self.myParent = parent
self.main_container = Frame(self.myParent)
self.main_container.grid(row=0, column=0, columnspan=4)
self.left_frame = Frame(self.main_container)
self.left_frame.grid(row=0, column=0, columnspan=2)
self.right_frame = Frame(self.main_container)
self.right_frame.grid(row=0, column=2, columnspan=2)
self.checkbox_scrollbar = Scrollbar(self.left_frame)
self.checkbox_scrollbar.grid(row=0, column=1, sticky='NS')
self.checkbox_text = Text(self.left_frame, height=30, width=10, yscrollcommand=self.checkbox_scrollbar.set)
self.checkbox_text.grid(row=0, column=0)
self.checkbox_scrollbar.config(command=self.checkbox_text.yview)
self.databox_scrollbar = Scrollbar(self.right_frame)
self.databox_scrollbar.grid(row=0, column=1, sticky='NS')
self.databox_text = Text(self.right_frame, height=30, width=10, yscrollcommand=self.databox_scrollbar.set)
self.databox_text.grid(row=0, column=0)
self.databox_scrollbar.config(command=self.databox_text.yview)
my_dict = {}
for each_num in range(100):
my_line = "Line number: " + str(each_num)
my_dict[my_line] = 0
for my_key in my_dict:
my_dict[my_key] = IntVar()
cb = Checkbutton(self.checkbox_text, text=my_key, variable=my_dict[my_key])
cb.grid(sticky='W')
for each_entry in range(100):
entry_line = "This is entry number: " + str(each_entry) + "\n"
self.databox_text.insert(END, entry_line)
root = Tk()
root.title("Checkbox UI Test")
myapp = MyApp(root)
root.mainloop()
Благодарим вас за предложения.После долгих проб и ошибок я обнаружил, что решение заключается в использовании метода window_create текстового виджета для встраивания объектов (например, моего объекта checkbutton). –
@ DirtyPenguin О, аккуратно, рад, что ты разобрался. Извините, я больше не мог вам помочь. – TankorSmash
Не беспокойтесь. Ваше предложение изменить цвет фона очень полезно для отладки. Я запомню, что он движется вперед. Еще раз спасибо. –