python tkinter列表框条目窗体

2024-10-16 20:48:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个“新手”python用户。在

我有一个使用tkinter的列表框,我想格式化列表条目,使它们对齐,我有以下内容:

from Tkinter import *
master = Tk()

info=[  ['sue', 1, 'Argentina', 'Bsc'],
    ['peggy-sue', 17, 'U.K.', 'Bsc'],
    ['susie', 234, 'France', 'BA'] 
]

listbox = Listbox(master, width=60)
listbox.pack()

listbox.insert(END, "{:<15s}  {:>5s}  {:<25s}  {:<5s}".format("Name","id","Nationality","Qual") )

for i  in range(len(info)):
    item = "{:<15s}  {:>5d}  {:<25s}  {:<5s}".format(info[i][0],info[i][1],info[i][2],info[i][3])
    print item  # Gives nicely formatted lines
    listbox.insert(END, item)  #Lines are not nicely formatted in listbox

mainloop()

有人能解释一下为什么列表框条目的格式不像打印行那么好吗?在

我知道多列列表框(例如Display Listbox with columns using Tkinter?),所以我不需要一个解决方案,我感兴趣的是为什么事情没有像我预期的那样工作。在

谢谢


Tags: ininfomasterformattkinteritemendinsert
2条回答

默认字体对字符使用的宽度不相等。例如,请尝试(假设您在Windows上):

listbox = Listbox(master, width=60, font='consolas')

结果如下:

TKinter window using Consolas, with equal spacing

不如asongtoruin但是

from Tkinter import *
master = Tk()

info=[  ['sue', 1, 'Argentina', 'Bsc'],
        ['peggy-sue', 17, 'U.K.', 'Bsc'],
        ['susie', 234, 'France', 'BA'] 
]

heads = ["Name","id","Nationality","Qual"]
listbox = Listbox(master, width=60)
listbox.pack()
fixedlen = 10
listbox.insert(END, ("{:<15s}"+(fixedlen-len(heads[0]))*" " +"{:>5s}"+(fixedlen-len(heads[1]))*" " +"{:<25s}"+(fixedlen-len(heads[2]))*" " +"{:<5s}").format(heads[0],heads[1],heads[2],heads[3]) )

for i  in range(len(info)):
    item = ("{:<15s}"+(fixedlen-len(str(info[i][0])))*" " +"{:>5d}"+(fixedlen-len(str(info[i][1])))*" " +"{:<25s}"+(fixedlen-len(str(info[i][2])))*" " +"{:<5s}").format(info[i][0],info[i][1],info[i][2],info[i][3])
    print item  # Gives nicely formatted lines
    listbox.insert(END, item)  #Lines are not nicely formatted in listbox

mainloop()

相关问题 更多 >