gpt4 book ai didi

python - Tkinter:在用户键入数据时格式化数据

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:44 26 4
gpt4 key购买 nike

我正在开发一个应用程序,除其他外,用户将创建个人资料,包括日期、电话号码和身份证号码等项目。我想对其进行设置,以便数据在用户键入时进行格式化(例如,在标识号的适当位置添加破折号。如果用户正确键入,则一切都会正常,但如果您必须返回,有几个地方出了问题。首先,按退格键不会删除添加的破折号。其次,如果您走到破折号后面并更正数字,则会在不属于的地方添加额外的破折号。

这是片段:

    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()

任何帮助将不胜感激。谢谢。

最佳答案

与其即时插入破折号并遭受不同步问题,更好的解决方案是始终从没有任何破折号的数字的干净副本开始,然后添加它们。这样,无论进行多少次修改,您都将始终在正确的空格中添加破折号。

一个例子:

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()

一些附加说明:

  • 此版本使用 StringVar(),以便可以获取和设置条目的内容,而不是仅限于插入。
  • 我没有对破折号位置进行硬编码,而是将它们抽象到自己的列表中,以减少出错的可能性。
  • 我添加了代码以防止光标位置与破折号不同步。请注意,光标逻辑完全独立于添加破折号的逻辑。从技术上讲,您可以将它们组合到同一个 for 循环中,但出于演示目的,我将它们分开。
  • 我还添加了一些额外的代码,以防止按下退格键或箭头键时光标自动跳转到末尾。您可能还需要考虑添加“Enter”作为要过滤的键之一。

关于python - Tkinter:在用户键入数据时格式化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18865708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com