python tkinter列表框条目格式

时间:2017-05-19 09:51:41

标签: python tkinter listbox string-formatting

我是“新手”python用户。

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

<!-- POSTS BY YEAR -->
{% for post in site.posts %}
  {% capture current_year %}{{ post.date | date: "%Y" }}{% endcapture %}
  {% if current_year != previous_year %}
    {% unless forloop.first %}
      </ul>
    {% endunless %}
    <h2>{{ current_year }}</h2>
    <ul>
    {% assign previous_year = current_year %}
  {% endif %}
  <li><a href="{{ post.url }}">
  {{ post.date | date: "%Y-%m-%d" }} - {{ post.title }}
  </a></li>

  {% if forloop.last %}
    </ul>
  {% endif %}
{% endfor %}


</div>

    <img style='vertical-align:right;width:304px;height:228px;' src='/assets/archiveSM.jpg'>
</p>

任何人都可以解释为什么列表框条目格式不正确,因为打印行是?

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

由于

2 个答案:

答案 0 :(得分:2)

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

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

这导致以下结果:

TKinter window using Consolas, with equal spacing

答案 1 :(得分:0)

不如@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()