使用 .grid 将 tkinter 列表框的大小调整为最大项目的宽度
Resizing tkinter listbox to width of largest item, using .grid
我有两个并排的列表框。他们使用 lstBox.grid() 方法在 window 中对它们进行排序。然后我有一个下拉选项,可以更改其中一个列表框中显示的项目。这里的最终目标是能够 "add" 从一个盒子到另一个盒子的物品,并从另一个盒子中取出物品。我的问题是我不知道如何将列表框宽度扩展到它包含的最大项目的宽度。我有一个方法用于在下拉列表更改时处理,并确定其值以适当更改项目,但列表框不会更改宽度。
我知道通过使用 lstBox.pack(fill=X,expand=YES)
,列表框会调整大小,但我使用的是 .grid()
几何图形。
有什么建议吗?
您可以列出所有项目以找到最大的(如果不是太多应该没问题)。例如,对于字符串,您可以使用 'len(item)' 来计算它们的长度。
然后,当你创建你的列表框时(而不是当你网格化它时)你设置它的宽度 'width = "The size you want" ',如果你放在那里的大小关于最大项目的长度有明确的定义,你不应该有任何问题。(我想我记得,列表框的宽度统一由其中文本的大小决定,但需要检查)
我不太了解网格,所以我不知道是否有更快的选择。
它应该看起来像这样:
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()
我有两个并排的列表框。他们使用 lstBox.grid() 方法在 window 中对它们进行排序。然后我有一个下拉选项,可以更改其中一个列表框中显示的项目。这里的最终目标是能够 "add" 从一个盒子到另一个盒子的物品,并从另一个盒子中取出物品。我的问题是我不知道如何将列表框宽度扩展到它包含的最大项目的宽度。我有一个方法用于在下拉列表更改时处理,并确定其值以适当更改项目,但列表框不会更改宽度。
我知道通过使用 lstBox.pack(fill=X,expand=YES)
,列表框会调整大小,但我使用的是 .grid()
几何图形。
有什么建议吗?
您可以列出所有项目以找到最大的(如果不是太多应该没问题)。例如,对于字符串,您可以使用 'len(item)' 来计算它们的长度。 然后,当你创建你的列表框时(而不是当你网格化它时)你设置它的宽度 'width = "The size you want" ',如果你放在那里的大小关于最大项目的长度有明确的定义,你不应该有任何问题。(我想我记得,列表框的宽度统一由其中文本的大小决定,但需要检查)
我不太了解网格,所以我不知道是否有更快的选择。
它应该看起来像这样:
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()