我是 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()
由于
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)
...
结果: