我是“新手”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?),所以我不需要解决方案,我感兴趣的是为什么事情没有按照我的预期运作。
由于
答案 0 :(得分:2)
您的默认字体不会对字符使用相等的宽度。例如,尝试(假设您在Windows上):
listbox = Listbox(master, width=60, font='consolas')
这导致以下结果:
答案 1 :(得分:0)
不如@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()