tkinter.scrolledtext.ScrolledText columnspan问题

时间:2018-05-16 13:45:41

标签: python tkinter grid

下面是一段代码,以帮助显示我想要的内容。 ScrolledText小部件占用宽度的3/4,但我设置为占用1/2,试图确定如何在中间拆分两个控件。当我注释掉ScrolledText小部件并在其中添加第二个测试列表框并使用相同的网格信息时,它会在中间分开。设置ScrolledText小部件有什么不同吗?

page.rowconfigure(1, weight=1)
page.columnconfigure(0, weight=1)
page.columnconfigure(6, weight=1)

lb_reports = Listbox(page, selectmode=SINGLE)
lb_reports.grid(row=1, column=0, columnspan=5, sticky=W + N + S + E, pady=5, padx=5)

# Following list box is here as a test, it does split down the middle of screen as expected.
# self.lb_reports1 = Listbox(page, selectmode=SINGLE)
# self.lb_reports1.grid(row=1, column=5, columnspan=5, sticky=W + N + S + E, pady=5, padx=5)

# this widget takes right 3/4 of screen instead of 1/2
st_test = tkinter.scrolledtext.ScrolledText(page)
st_test.grid(row=1, column=6, columnspan=5, sticky=W + N + S + E, pady=5, padx=5)

1 个答案:

答案 0 :(得分:1)

为列赋予权重不会强制列具有相同的大小,但会强制它们以相同的速率增长。来自Effbot

  

重量=
  用于在列之间分配额外空间的相对权重。权重为2的列的增长速度是权重为1的列的两倍。默认值为0,表示该列根本不会增长。

然后从Text widget(ScrolledText所基于的)的文档中你可以看到小部件的默认宽度是80(字符,而不是像素!),而Listbox默认宽度为20(同样,字符)。

因此,虽然两列都以相同的速率增长,但它们不会以相同的大小开始。

现在,如果您为两个小部件提供相同的宽度值,您可能会发现它们的宽度仍然不同。这可能发生,因为Text和Listbox小部件的字体不相同。如果你给它们相同的宽度相同的字体,它们应该具有相同的宽度,因此它们在增长时将保持相同的宽度:

from tkinter import *
from tkinter.scrolledtext import *

page = Tk()
page.rowconfigure(1, weight=1)
page.columnconfigure(0, weight=1)
page.columnconfigure(6, weight=1)

lb_reports = Listbox(page, selectmode=SINGLE, font=('Arial', 12), width=20)
lb_reports.grid(row=1, column=0, columnspan=5, sticky=W + N + S + E, pady=5, padx=5)

st_test = ScrolledText(page, font=('Arial', 12), width=20)
st_test.grid(row=1, column=6, columnspan=5, sticky=W + N + S + E, pady=5, padx=5)

page.mainloop()