但.format会添加项目,然后列宽。
格式()做没有这样的事:
print "1234567890" * 2
print "{:4}{:4}{:4}{:4}".format('aaaa', 'bbbb', 'cccc', 'dddd')
--output:--
123456789
aaaabbbbccccdddd
输出的总宽度为16 = 4×4
你应该明确地指定对准:
lb.insert(tk.END, "{:<5}-{:<2}".format(123, 9))
该文档说:
'<' Forces the field to be left-aligned within the available space
(this is the default for most objects).
“大多数对象”的语言是我认为你可能会遇到的。字符串,数字等有一个__format__()
方法,当你调用它们的format()方法时,它们被要求显示自己。看看这个:
print "{:4}".format("a")
print "{:4}".format(9)
--output:--
a
9
字符串和数字为他们的理由有不同的默认值。所以我不会依靠默认值 - 而是明确的,然后你就会知道输出结果是否合理。
话虽如此,我必须使用17为最小宽度实际得到10:
import Tkinter as tk
root = tk.Tk()
root.geometry("1000x200")
lb = tk.Listbox(root, width=150)
lb.insert("1", "{:4}{:4}".format("a", "b"))
lb.insert(tk.END, "1234567890" * 4)
lb.insert(tk.END, "{:<17}{:<10}".format(100, 200))
lb.pack()
root.mainloop()
与该代码,我看到200开始在塔11好吧,这对准问题必须做与tkinter使用不固定宽度的默认字体,即所有字符不占用相同数量的空间。如果您尝试对齐列,则需要使用固定宽度的字体。尝试这样的事情:
import Tkinter as tk
import tkFont
root = tk.Tk()
my_font = tkFont.Font(family="Monaco", size=12) #Must come after the previous line.
root.geometry("1000x200")
lb = tk.Listbox(root, width=150, font=my_font)
lb.insert("1", "{:4}{:4}".format("a", "b"))
lb.insert(tk.END, "1234567890" * 4)
lb.insert(tk.END, "{:>10}{:>10}".format(100, 200))
lb.pack()
root.mainloop()
道歉遗漏,当我打印它的对齐是好的。当被添加到列表框时,就像我之前提到的那样...感谢您的回复。 – user2522202
是的,我只是试着用Listbox试一试。我很久以前就记得这个问题。 – 7stud
@ user2522202,当我明确指定对齐时,它会起作用 - 在post中的示例。 – 7stud