gpt4 book ai didi

python - Tkinter 设置输入文本格式

转载 作者:行者123 更新时间:2023-12-01 05:42:20 26 4
gpt4 key购买 nike

随着用户输入将文本格式化为时间格式

当用户输入数字时,我尝试将 Tk.Entry 文本框中的文本格式设置为标准时间格式 00:00:00

我知道 Tkinter 不是最简单的,也不是在用户键入时格式化文本的最佳优化框架,但我已经做到了这一点:

from Tkinter import *

class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.createWidgets()


def createWidgets(self):
sv = StringVar()
sv.trace("w", lambda name, index, mode, sv=sv: self.entryUpdateEndHour(sv))
endHourEntry = Entry(self, textvariable=sv)
endHourEntry.pack()

def entryUpdateEndHour(self, sv):
global x

x = sv.get()[0:2] + ':'
y = x + sv.get()[3:5] + ':'
z = y + sv.get()[6:8]

sv.set(z)


root = Tk()
app = Application(master=root)
app.mainloop()

这准确地打印出了我想要的内容 (12:45:67),但实时格式很糟糕。例如,在输入两个数字时,我在文本框中得到 12:::,并且它会跳过我输入的每第三个数字,因为它会将其替换为 :

如果有人对此答案有任何解决方法或解决方案,我将非常感激。提前致谢。

最佳答案

这是我的解决方案:

from Tkinter import *

class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.createWidgets()

def createWidgets(self):
sv = StringVar()
endHourEntry = Entry(self, textvariable=sv)
sv.trace("w", lambda name, index, mode, sv=sv:
entryUpdateEndHour(endHourEntry))
endHourEntry.pack()

def entryUpdateEndHour(entry):
text = entry.get()
if len(text) in (2,5):
entry.insert(END,':')
entry.icursor(len(text)+1)
elif len(text) not in (3,6):
if not text[-1].isdigit():
entry.delete(0,END)
entry.insert(0,text[:-1])
if len(text) > 8:
entry.delete(0,END)
entry.insert(0,text[:8])


root = Tk()
app = Application(master=root)
app.mainloop()

对我来说,使用条目小部件更容易,而不是直接使用 StringVar。包含 stringvar 的唯一原因是获取跟踪行为,以便正确调用回调。另一种选择是使用 vcmd option 做一些事情。到 Entry 构造函数,但我似乎无法更新条目...仅验证内容。

关于python - Tkinter 设置输入文本格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17214396/

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