在Tkinter的输入框中显示小数点

编程语言 2026-07-09

我需要创建一个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()

enter image description here

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章