【问题标题】:Are column widths variable in tkinter Text widgets?tkinter Text 小部件中的列宽是否可变?
【发布时间】:2020-08-28 17:02:03
【问题描述】:

我正在尝试在 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']]

Screenshot of current results

【问题讨论】:

  • 不同的字符宽度看​​起来像是问题所在。您可以在 Text 小部件中定义制表位来克服这个问题 - 这是一些标题为 Setting tabs in a Text widget 的文档。

标签: python python-3.x tkinter tkinter-text


【解决方案1】:

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

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

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

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

如何定义制表位的规范描述在文本小部件的tcl/tk documentation 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 2011-03-30
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2016-12-09
    相关资源
    最近更新 更多