我正在使用这个命令:
self.licenseBox.insert(END, "{:30}{:90}{:20}{:5}".format(item[0],
item[1], item[2], item[3]))
但是 .format 将添加项目然后是列宽。例如if item[0] = "foo"
,第一列是 33 宽,表示后面的参数相差 3。
有什么解决办法吗?
我正在使用这个命令:
self.licenseBox.insert(END, "{:30}{:90}{:20}{:5}".format(item[0],
item[1], item[2], item[3]))
但是 .format 将添加项目然后是列宽。例如if item[0] = "foo"
,第一列是 33 宽,表示后面的参数相差 3。
有什么解决办法吗?
但是 .format 将添加项目然后是列宽。
format() 没有这样的事情:
print "1234567890" * 2
print "{:4}{:4}{:4}{:4}".format('aaaa', 'bbbb', 'cccc', 'dddd')
--output:--
12345678901234567890
aaaabbbbccccdddd
输出的总宽度为 16 = 4 x 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()
使用该代码,我从第 11 列开始看到 200。好吧,对齐问题与 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()
视窗
listbox = Listbox(master, width=60, font='consolas')
我在 linux 上,在哪里font='mono'
可以工作。