在Tkinter的输入框中显示小数点
我需要创建一个Tkinter的 Entry小部件来输入美元金额。它需要把数字从右往左输入,我知道怎么实现。需要有一种方法,在不让用户输入小数点的情况下,直观地显示美元和分之间的分隔。比如输入12345,显示为123.45。我们不使用鼠标,因此任何导航都应通过退格键或箭头键完成。这个输入将来会被插入到我的数据库中。
一个标准的Entry小部件也可以,但我需要某种方式,在输入框底部的正确位置覆盖或贴近一个可视指示器,用来表示小数位。它可以是小数点、线条、不同的颜色;只要有一种视觉方式来表示美元和分。
我已经尝试使用place() 在输入框中覆盖一个标签,但效果不太理想。我已经能够在美元和分之间放置一个 | 符号,但标签的背景会遮挡输入框中的数字,因此不可行。现在我专注于这个问题,因此下面是基本代码:
import tkinter as tk
root = tk.Tk()
frame = tk.Frame(root)
frame.pack()
# create widgets
label_1 = tk.Label(frame, text="Just a test label")
label_1.grid(row=0, column=0)
entry_1 = tk.Entry(frame, justify="right")
entry_1.grid(row=0, column=1)
#trying to make a label to overlay into entry box
#the background is blocking part of the number entry
Label_2 = tk.Label(entry_1, fg="black", anchor="se", text="|")
Label_2.place(rely=0.5, relx=0.88)
root.mainloop()
Bryan Oakley在 Tkinter - Entry box - formatted for date 中提到了一些关于使用多个输入框和绑定的提示,但我甚至不知道如何开始这样的事情。我是不是应该暂停当前的工作,重新阅读关于字符串的知识,看看如果输入超过两位数字,如何插入小数位?我其实并不想在我要存入数据库的数字中出现小数点(我们把所有金额都按美分来处理),但随着时间的推移我可以把这事儿理顺。
解决方案
Not sure if it is correct for your question
import tkinter as tk
def validate(text):
text = text.replace(".", "").replace(",", "")
new_text = ""
for i, char in enumerate(text[::-1]):
if i <= 1:
new_text = char + new_text
elif i == 2:
new_text = char + "." + new_text
else:
if (i-2) % 3 == 0:
new_text = "," + new_text
new_text = char + new_text
root.after_idle(lambda: text_var.set(new_text))
root.after_idle(lambda: entry.icursor(tk.END))
return True
root = tk.Tk()
text_var = tk.StringVar()
validate_func = root.register(validate)
vcmd = (validate_func, '%P')
entry = tk.Entry(root, textvariable=text_var, validate='key', validatecommand=vcmd, justify=tk.RIGHT)
entry.pack()
root.mainloop()
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
