有没有办法 fix Tkinter 中 listbox 的列宽?
我想在列表框里显示一些项目。有些项目很短,有些项目比较长(大约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、域名和用户名。我不想使用标签,我想直接在列表框里提到这些,有办法做到吗?
1 个回答
1
你可以使用字符串格式化,不过这需要用到一些等宽字体,而且你还得找出列中最长的字符串。
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()