十进制的 Tkinter 格式

问题描述 投票:0回答:1

我是 Python 的新手,一直在研究如何解决这个简单的格式问题。在示例代码中,我试图将列对齐到小数点但没有成功。如果两个数字的长度相同,它就可以工作,但如果两个数字的长度不同,它就不再格式化。此外,总计未正确对齐。和指针将不胜感激。

from tkinter import *
 
# set-up window
window = Tk()
window.geometry('300x300')
window.resizable(0, 0)
window.title('Example')
  
 
# calculate add or minus function
def calculate():
    char_ok = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.']
    Item1Amt = Item1.get()
    Item2Amt = Item2.get()
    
    if float(Item1Amt) in char_ok:
        return True

    if True:
        TotalAmt = float(Item1Amt) + float(Item2Amt)
        Item1.delete(0, END)
        Item1Amt_insert = "{:>15,.2f}".format(float(Item1Amt))
        Item1.insert(0, Item1Amt_insert)
        print ( Item1Amt_insert)
     
        Item2.delete(0, END)
        Item2Amt_insert = "{:>15,.2f}".format(float(Item2Amt))
        Item2.insert(0, Item2Amt_insert)
        print(Item2Amt_insert)

        TotalAmt_Disp = "{:>15,.2f}".format(float(TotalAmt))
        Totallabel1 = Label(window, text=TotalAmt_Disp, borderwidth=1, relief='solid', background='#D3D3D3', width=15)
        Totallabel1.grid(column=1, row=5, sticky=W)
        print(TotalAmt_Disp)

def clear():
    Item1.delete(0, 'end')
    Item2.delete(0, 'end')

 
# labels
label_1 = Label(window, text='Item #1', padx = 30, pady=10)
label_1.grid(row=3, sticky=E)
 
label_2 = Label(window, text='Item #2', padx = 30, pady=10)
label_2.grid(row=4, sticky=E)
 
label_3 = Label(window, text='Total:', padx = 30, pady=10)
label_3.grid(row=5, sticky=E)
 
#Label_3Disp = Label(window, text='', borderwidth=1, relief='solid', background='#D3D3D3', width=20) 
#Label_3Disp.grid(row=5, column=1, padx=0, pady=15,   sticky='w') 
 
# button
calculate_btn = Button(window, text='Calculate', width=10,  command=calculate, padx=10, pady=10)
calculate_btn.grid(column=1, row=6, pady=20, sticky=W)
  
# text fields
Item1 = Entry(window)
Item1.grid(column=1, row=3)

Item2 = Entry(window)
Item2.grid(column=1, row=4)

#Total = Entry(window)
#Total.grid(column=1, row=5, sticky=W)


window.mainloop()
python-3.x tkinter formatting decimal
1个回答
0
投票

由于

Text
Label
小部件默认不使用等宽字体,因此具有相同字符宽度的不同内容的像素宽度将不相同。

为文本小部件和总标签使用等宽字体:

...
fnt = ('Courier New', 10)

def calculate():
    ...
        Totallabel1 = Label(window, text=TotalAmt_Disp, borderwidth=1, relief='solid',
                            background='#D3D3D3', width=15, font=fnt)
    ...

...
# text fields
Item1 = Entry(window, font=fnt)
Item1.grid(column=1, row=3)

Item2 = Entry(window, font=fnt)
Item2.grid(column=1, row=4)
...

结果:

© www.soinside.com 2019 - 2024. All rights reserved.