【问题标题】:python tkinter listbox entry formatpython tkinter 列表框条目格式
【发布时间】:2017-10-19 09:27:21
【问题描述】:

我是一个“新手”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?),所以我不需要解决方案,我对为什么事情没有像我预期的那样工作很感兴趣。

谢谢

【问题讨论】:

  • 您需要根据每个元素的长度更改元素之间的空格数。我会看看我能不能让它工作,但这应该很容易完成。

标签: python tkinter listbox string-formatting


【解决方案1】:

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

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

这会导致以下结果:

【讨论】:

  • 谢谢,这回答了我的问题。我在 linux 上,其中 font='mono' 工作
  • @TCJUK 很高兴听到这个消息,我以后会为 Linux 记住“单声道”!您可以通过单击答案左侧的勾号将其标记为问题的答案!
【解决方案2】:

不如@ason​​gtoruin,但是

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    相关资源
    最近更新 更多