Вы можете использовать функцию связывания для входа с событием <KeyRelease-comma>
. Она запустит эту функцию после , поставит запятую в Entry
, а затем функция сможет получить текст из `Entry и заменить его новым текстом с точкой вместо запятой.
import tkinter as tk
def callback(event):
print('event.widget.get():', event.widget.get())
text = event.widget.get() # get all text
text = text.replace(',', '.') # replace comma
event.widget.delete(0, 'end') # remove all text from Entry
event.widget.insert(0, text) # put new text in Entry
root = tk.Tk()
e = tk.Entry(root)
e.pack()
e.bind('<KeyRelease-comma>', callback)
root.mainloop()
Если вы используете <Key-comma>
, тогда функция будет выполняться до того, как tkinter
поместит символ в Entry
, так что вы получите текст без запятой и не сможете его изменить.
Вы можете использовать StringVar()
в Entry(..., textvariable=...)
и вызывать функцию до StringVar
. trace('w', ...)
выполнит функцию, когда tkinter
изменит (установит) текст в StringVar
.
import tkinter as tk
def callback(id_, mode, other):
#print(id_, mode, other)
var.set( var.get().replace(',', '.') )
root = tk.Tk()
var = tk.StringVar()
var.trace('w', callback)
e = tk.Entry(root, textvariable=var)
e.pack()
root.mainloop()
РЕДАКТИРОВАТЬ: с помощью <Key-comma>
вы можете выполнить функцию до того, как tkitner
введите запятую в Entry. Функция может поставить точку и использовать return "break"
, чтобы остановить событие, и она не будет ставить запятую в Entry
import tkinter as tk
def callback(event):
#print('event.widget.get():', event.widget.get())
event.widget.insert('end', '.') # put new text in Entry
return 'break' # stop event so it will not put comma in Entry
root = tk.Tk()
e = tk.Entry(root)
e.pack()
e.bind('<Key-comma>', callback) # execute callback before it puts comma in Entry
root.mainloop()