ただし、 .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
文字列と数値は、正当化のデフォルトが異なります。したがって、デフォルトに依存するのではなく、明示的に指定すると、出力がどのように正当化されるかがわかります。
そうは言っても、実際に 10 を取得するには、最小フィールド幅に 17 を使用する必要があります。
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()