下面是一段代码,可帮助显示我想要的内容。 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)

最佳答案

赋予列权重不会迫使列具有相等的大小,而是会迫使它们以相同的速率增长。从Effbot


  重量=
  用于在列之间分配额外空间的相对权重。权重为2的列的增长速度将为权重为1的列的增长速度的两倍。默认值为0,这意味着该列将完全不增长。


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

因此,尽管两列以相同的速度增长,但它们的起点并没有相同。

现在,如果为两个小部件提供相同的宽度值,则可能会看到它们的宽度仍然不同。发生这种情况的原因是“文本”和“列表框”窗口小部件的字体不同。如果给它们提供相同的宽度和字体,则它们应该以相同的宽度开始,这样它们长大时将保持相同的宽度:

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

关于python - tkinter.scrolledtext.ScrolledText columnspan问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50372641/

10-11 09:15