我正在开发一个应用程序,其中用户将创建包含日期,电话号码和ID号等项目的配置文件。我想设置它以便在用户输入数据时格式化数据(例如在标识号的适当位置添加破折号。如果用户输入正确,一切都很顺利,但如果你必须回去有几件事情出错了。首先,添加的破折号不会在按下退格键的情况下删除。其次,如果你在破折号后面并更正数字,则会在不属于的地方添加额外的破折号。
以下是摘录:
from Tkinter import *
class App:
def __init__(self, master):
self.label = Label(text="ID#: ")
self.entry = Entry()
self.label.grid(row=0, column=0)
self.entry.grid(row=0, column=1)
self.entry.focus_set()
root.bind('<Key>', self.formatData)
def formatData(self, master):
currentData = self.entry.get()
if len(currentData) == 3:
self.entry.insert(3, '-')
elif len(currentData) == 6:
self.entry.insert(6, '-')
root = Tk()
app = App(root)
root.mainloop()
非常感谢任何帮助。感谢。
答案 0 :(得分:1)
不是在动态中插入短划线,并且遇到失步问题,更好的解决方案是始终从数字的干净副本开始,没有任何破折号,然后再添加它们。这样,无论做了多少修改,您都会在正确的空格中添加破折号。
一个例子:
from Tkinter import *
class App:
def __init__(self, master):
self.label = Label(text="ID#: ")
self.currentData = StringVar()
self.entry = Entry(textvariable=self.currentData)
self.positions = [3, 6]
self.label.grid(row=0, column=0)
self.entry.grid(row=0, column=1)
self.entry.focus_set()
root.bind('<Key>', self.formatData)
def formatData(self, master):
# Adding dashes
raw = [char for char in self.currentData.get() if char != '-']
for index in self.positions:
if len(raw) > index:
raw.insert(index, '-')
self.currentData.set(''.join(raw))
# Prevent cursor from derping
cursor = self.entry.index(INSERT) # Gets the current cursor position
for index in self.positions:
if cursor == (index + 1):
# Increment the cursor if it falls on a dash
cursor += 1
if master.keysym not in ['BackSpace', 'Right', 'Left', 'Up', 'Down']:
self.entry.icursor(cursor)
root = Tk()
app = App(root)
root.mainloop()
一些补充说明:
for
循环中,但我将它们分开以用于演示目的。