【发布时间】:2021-01-14 13:47:20
【问题描述】:
我有一个列表框定义为:
listbox1=tk.Listbox(master=frame_1,listvariable=samples_var)
其中 samples_var 是一个 tk.StringVar() 类,它包含一个样本列表。
例如:
samples=["A","B","C","D"]
samples_var=tk.StringVar(value=marko.samples)
然后我定义 tk.Listbox 使用:
listbox1=tk.Listbox(master=frame_1,listvariable=samples_var)
我通过调用 grid 将 listbox1 放在 frame_1 小部件上。然后我指定我希望它从 row=1,column=3 开始(因为左侧和顶部的其他单元格被占用),并且我希望它跨越等于“样本”列表长度的行数.在上面的示例中,“样本”列表中为 4(因为有 A、B、C、D)。这应该使得 ListBox 小部件正好跨越 len(samples) 行,从开始。
代码:
listbox1.grid(row=1,column=3,rowspan=len(samples),sticky="nsew")
有没有办法将列表中的每个元素对齐到自己的行中?
例如:
A 将在 row=1,column=3,B 将在 row=2,column=3,C 将在 row=3,column=3,等等。
我这样做是为了与列中的其他小部件保持良好的对齐。
【问题讨论】:
-
不,你不能。
-
我至少可以以某种方式修改列表框,使列表中元素的高度与列表框旁边的列中的行高度匹配吗?例如,如果 column=2 中的所有行的高度都为 50,我会将列表框的高度设置为列表框 x 50 中的元素数。对于我们的示例,列表框将是 4(因为它有元素 A, B,C,D) x 50 - 200 相当于第 3 列中的 4 行?
-
Listbox高度以行为单位,而不是像素。您可以尝试使用Text小部件并调整spacing1和spacing3选项。为什么不直接使用Label小部件而不是Listbox?
标签: python-3.x tkinter tkinter-layout