We can format the inputs by using different events and one common requirement is formatting to local system. We are using locale library.
import locale
Here is the code to format the input as entered by user and on lost focus or once the focus is moved out of the input box the data is formatted. The required format can be changed based by using setlocal().
locale.setlocale(locale.LC_ALL, 'en_US.utf8')# USA
Function show_format()
This function is triggered once the input box lost the focus and the code to format the input is kept here. The triggering event can be changed .
Here e1_str is the string variable connected to entry option. So we used set() option of string variable to assign value to entry box.
Triggering the event to execute the function
Here we used on focus out event to trigger the function, however this event can be changed to any other required event.
e1.bind("<FocusOut>",show_format) # when tab is pressed
#e1.bind("<KeyRelease>",show_format) # when key is released
Output
Data entered is 12345678.456
#locale.setlocale(locale.LC_ALL, 'de_DE.utf8')# German
locale.setlocale(locale.LC_ALL, 'en_US.utf8')# USA
Without using locale library
Inside the function show_format() we can use this line to get string formatting.
e1_str.set("{:,}".format(int(e1.get())))
Full code is here
import tkinter as tk
import locale
#locale.setlocale(locale.LC_ALL, 'de_DE.utf8')# German
locale.setlocale(locale.LC_ALL, 'en_US.utf8')# USA
my_w = tk.Tk()
my_w.geometry("250x100")
font1=('Times',18,'bold')
sv = tk.StringVar() # String variable
def show_format(*args):
#e1_str.set("{:,}".format(int(e1.get())))
e1_str.set(locale.format_string("%.2f", float(e1.get()), grouping=True))
e1_str=tk.StringVar() # string variable
e1 = tk.Entry(my_w,font=font1,width=13,textvariable=e1_str)
e1.grid(row=1,column=1,padx=18,pady=5)
b1=tk.Button(my_w,text='Testing')
b1.grid(row=1,column=2)
e1.bind("<FocusOut>",show_format) # when tab is pressed
my_w.mainloop() # Keep the window open
We can use on key release event and then format every 4th position. Check how the cursor position is collected and repositioned.
from tkinter import *
import tkinter as tk
my_w = tk.Tk()
my_w.geometry("350x100")
font1=('Times',18,'bold')
sv = tk.StringVar() # String varible
def show_format(*args):
position = e1.index(INSERT) # getting cursor position
if((position % 4)==0):
e1.icursor(position+1) # shift cursor one position
x=e1_str.get().replace(',','')
e1_str.set("{:,}".format(float(x)))
e1_str=tk.StringVar() # string variable
e1 = tk.Entry(my_w,font=font1,width=20,textvariable=e1_str)
e1.grid(row=1,column=1,padx=18,pady=5)
#e1.bind("<FocusOut>",show_format) # when tab is pressed
e1.bind("<KeyRelease>",show_format) # when key is released
my_w.mainloop() # Keep the window open