python - 使用 .grid 将 tkinter 列表框的大小调整为最大项目的宽度

标签 python algorithm tkinter resize widget

我有两个并排的列表框。他们使用 lstBox.grid() 方法在窗口中对它们进行排序。然后我有一个下拉选项,可以更改其中一个列表框中显示的项目。这里的最终目标是能够将项目从一个盒子“添加”到另一个盒子,并从另一个盒子中删除。我的问题是我不知道如何将列表框宽度扩展到它包含的最大项目的宽度。我有一个方法用于在下拉列表发生更改时进行处理,并确定其值以适当更改项目,但列表框不会更改宽度。

我知道通过使用 lstBox.pack(fill=X,expand=YES),列表框会调整大小,但我使用的是 .grid() 几何学。

有什么建议吗?

最佳答案

您可以列出所有项目以找到最大的(如果不是太多应该没问题)。例如,对于字符串,您可以使用“len(item)”来计算它们的长度。 然后,当你创建你的列表框时(而不是当你网格化它时)你设置它的宽度为'width =“你想要的大小”',如果你放在那里的大小关于最大项目的长度定义明确,你应该没有任何问题。(我想我记得,列表框的宽度统一由其中文本的大小决定,但需要检查)

我不太了解网格,所以我不知道是否有更快的选择。

它应该看起来像这样:

len_max = 0
list_items = ["item2", "item2", "item3+a few characters for the size"]
for m in list_items:
    if len(m) > len_max:
        len_max = len(m)

import tkinter
master = Tk()

my_listbox1 = Listbox(master, width = len_max)
my_listbox1.grid(row = 0, column = 0)

my_listbox2 = Listbox(master, width = len_max)
my_listbox2.grid(row = 0, column = 1)

my_listbox1.insert(END, list_items[0])
my_listbox2.insert(END, list_items[1])
my_listbox2.insert(END, list_items[2])

master.mainloop()

关于python - 使用 .grid 将 tkinter 列表框的大小调整为最大项目的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31046479/

相关文章:

python - 如何使用 OpenCensus 发送指标

python - 函数对象属性 __kwdefaults__ 有什么用?

Python Tkinter、lambda 和回调

python - 在 python 文档字符串中记录其他函数中可能发生的异常

python - 为什么 multiprocessing.Pool.map 比内置 map 慢?

python - 填充表面网格的算法

c - 来自标准输入的存储行永远不会改变

python - 查找子字符串在较大字符串中的位置

python - 使用 Tkinter 在 Python 中进行内存游戏

python - 从 gui 启动和停止线程