我并排创建了两个文本框小部件。左侧文本框包含 100 行 Checkbutton 框。右侧文本框包含 100 行文本。我已将两个文本框配置为具有相同的 30 高度和 10 宽度。
当我运行程序时,左边的文本框垂直增长超出了我的可视屏幕区域的大小。结果,右侧的文本框被推到了框架下方,以至于我再也看不到它了。我知道它在那里,因为当我将行数(两个框)减少到 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()