有没有办法在Tkinter的列表框中修复列宽?

时间:2014-06-07 20:44:08

标签: python listbox tkinter

我想在列表框中显示一些项目。有些非常短,有些非常大(10-15个字符)。如下所示,

1. facebook  gowtham95****@gmail.com

2. gmail  someone@gmail.com

3. stackoverflow   stackusername

我想整齐地展示它们......

1. facebook    gowtham95****@gmail.com

2. gmail       someone@gmail.com

3. stack..     stackusername

无论如何要在Tkinter中的列表框中修复列宽?

还有一件事,我想在上面标注为id,domain和username。我不想使用标签。我想在列表框中提及它,无论如何还有吗?

1 个答案:

答案 0 :(得分:1)

您可以使用string formating - 但它需要一些monospaced font,您必须在列中找到最长的字符串。

import Tkinter as tk

master = tk.Tk()
master.geometry('600x100')

lb = tk.Listbox(master, font='monospace') # some monospaced font
lb.pack(fill=tk.BOTH, expand=1)

#---

data = [
    ('1', 'facebook', 'gowtham95****@gmail.com'),
    ('2', 'gmail', 'someone@gmail.com'),
    ('3', 'stackoverflow', 'stackusername')
]

longest_1 = max( len(x[1]) for x in data )
longest_2 = max( len(x[2]) for x in data )

for x in data:
    line = '%s | %*s | %*s |' % (x[0], -longest_1, x[1], -longest_2, x[2])    
    lb.insert(tk.END, line)

#---

tk.mainloop()

enter image description here