使用.grid

时间:2015-06-25 09:34:11

标签: python algorithm tkinter resize widget

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

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

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

看起来应该是这样的:

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