【问题标题】:Place each element in a Listbox widget of tkinter module into separate row cell将 tkinter 模块的 Listbox 小部件中的每个元素放入单独的行单元格中
【发布时间】: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 小部件并调整spacing1spacing3 选项。为什么不直接使用Label 小部件而不是Listbox

标签: python-3.x tkinter tkinter-layout


【解决方案1】:

有没有办法将列表中的每个元素对齐到自己的行?

不,没有。 Tkinter 根本不是为那样工作而设计的。列表中元素的高度完全独立于列表框可能属于的网格。

您可以尝试一些技巧,根据列表框的bbox 命令的结果计算列表框中行的高度,然后尝试将网格中每一行的高度强制为相同的大小,不过这似乎比它的价值要多得多。

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 2016-09-15
    • 2021-08-13
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    相关资源
    最近更新 更多