Python tkinter文本小部件中的列宽是可变的吗?

Python tkinter文本小部件中的列宽是可变的吗?,python,python-3.x,tkinter,tkinter-text,Python,Python 3.x,Tkinter,Tkinter Text,我试图在tkinterText框中显示账单,但无法对齐所有列(如名称、价格等)。是因为有些字母比其他字母宽吗 ct=5.0 for i in lst_bill: txt_bill.insert(ct,'\n' + str(int(ct-4))) # for sl.no txt_bill.insert(tk.END,' '*11+i[0]) txt_bill.insert(tk.END,' '*(40-len(i[0]))+str(i[1])) txt_bill.

我试图在tkinter
Text
框中显示账单,但无法对齐所有列(如名称、价格等)。是因为有些字母比其他字母宽吗

ct=5.0
for i in lst_bill:
    txt_bill.insert(ct,'\n' + str(int(ct-4)))  # for sl.no
    txt_bill.insert(tk.END,' '*11+i[0])
    txt_bill.insert(tk.END,' '*(40-len(i[0]))+str(i[1]))
    txt_bill.insert(tk.END,' '*(10-len(str(i[1]))) +i[2])
    ct+=1
lst_bill
看起来像这样:

[['Orange Cake', 20, 'milk'], ['Red Velvet Cake', 30, 'None'], 
 ['BlackCoffee', 5, 'None'], ['Pumpkin Pie', 10, 'Milk']]
txt_bill.configure(tabs="50 200 right 250")
ct=5.0
for i in lst_bill:
    txt_bill.insert("end", f"{int(ct-4)}\t{i[0]}\t{i[1]}\t{i[2]}\n")
    ct += 1

是的,这是因为您使用的是可变宽度字体

可以使用制表位,而不是用空格填充数据。例如,要将制表位设置为50像素、200像素,然后再设置为250像素,并且第三列右对齐,您可以这样做:

[['Orange Cake', 20, 'milk'], ['Red Velvet Cake', 30, 'None'], 
 ['BlackCoffee', 5, 'None'], ['Pumpkin Pie', 10, 'Milk']]
txt_bill.configure(tabs="50 200 right 250")
ct=5.0
for i in lst_bill:
    txt_bill.insert("end", f"{int(ct-4)}\t{i[0]}\t{i[1]}\t{i[2]}\n")
    ct += 1

您可能希望根据字体和每列中数据的最大宽度来计算宽度,但这给出了总体思路


关于如何定义制表位的规范性描述在文本小部件的中。

不同的字符宽度似乎是问题所在。您可以在
文本
小部件中定义制表位来克服这个问题-下面是一些标题为的文档。