这是我第一次编码,请放轻松。
我正在尝试制作一个需要 5 个不同条目的应用程序。一旦按下按钮,我希望这些条目被清除。我目前正在测试一个 - “lditime”。我设置了输入,使其仅接受 (XX:XX:XX) 并且不再接受字符,也没有退格键,其中 X 是数字。
整个游戏我有一千多行代码,所以我已经尽力挑选出相关的东西,如果需要更多,请告诉我。
import tkinter as tk
window = tk.Tk()
def validate_time(inputtime):
if len(inputtime) == 1 and inputtime[-1].isdigit():
return True
if len(inputtime) == 2 and inputtime[-1].isdigit():
return True
if len(inputtime) == 3 and inputtime[-1] == ":":
return True
if len(inputtime) == 4 and inputtime[-1].isdigit():
return True
if len(inputtime) == 5 and inputtime[-1].isdigit():
return True
if len(inputtime) == 6 and inputtime[-1] == ":":
return True
if len(inputtime) == 7 and inputtime[-1].isdigit():
return True
if len(inputtime) == 8 and inputtime[-1].isdigit():
return True
else:
return False
def on_validate(P):
return validate_time(P)
def backandmessage(bs):
if bs.keysym == "BackSpace":
return "break"
messagecheck() #cmd that is irrelevant
def ldrelease():
if (len(lditime.get()) == 8 and len(ldilat.get()) == 8 and len(ldilong.get()) == 8 and
((ldd1cbv.get() == 1 or ldd2cbv.get() == 1) or ldd3cbv.get() == 1 or ldd4cbv.get() == 1
or ldd5cbv.get() == 1 or ldd6cbv.get() == 1)):
lditime.delete(0, 8)
ldd1.deselect()
ldd1.configure(state="normal")
ldd2.deselect()
ldd2.configure(state="normal")
ldd3.deselect()
ldd3.configure(state="normal")
ldd4.deselect()
ldd4.configure(state="normal")
ldd5.deselect()
ldd5.configure(state="normal")
ldd6.deselect()
ldd6.configure(state="normal")
ldi = tk.Label(text="Load Drop Interface", font=("Helvetica", 15))
lditimet = tk.Label(text="Time", font=("Helvetica", 15))
lditime = tk.Entry(validate="key", validatecommand=(window.register(on_validate), "%P"))
lditime.bind("<KeyPress>", backandmessage)
lddrelease = tk.Button(text="Release", font=("Helvetica", 15), command=ldrelease)
window.mainloop()
我已经尝试使用上面的 lditime.delete(0, 8),lditime.delete(0, tk.END)。 当我使用 lditime.delete(0, 7) 时,它将清除除条目最后一个字符之外的所有字符。 当我打印 len(lditime.get()) 时,结果是 8。 当我逐个字符打印出来时,它符合预期(我一直使用 12:12:12 作为测试)。 我在删除之前尝试过使用 lditime.focus_force() 。
取消选择语句按预期运行,但以防万一我将删除移动到另一个运行良好的按钮。当我这样做时,我尝试过
print(lditime.get())
print(len(lditime.get()))
lditime.delete(0, 8)
print(lditime.get())
print(len(lditime.get()))
这给了我 8, 12:12:12, 8, 12:12:12 当我用 lditime.delete(0, 7) 重复它时,结果是 8, 12:12:12, 2, 1
我浪费了几个小时。请帮助我。
我不是专家,所以如果这是一个愚蠢的答案,请不要笑,但是你是否尝试用 lditime.delete(0, tk.END) 替换你的 lditime.delete(0, 8) 。
如果不尝试这种方式,您不必明确说明该值如何将其全部删除
import tkinter as tk
def clear_entry():
print("Before clearing:", entry.get())
entry.delete(0, tk.END)
print("After clearing:", entry.get())
root = tk.Tk()
entry = tk.Entry(root)
entry.pack()
entry.insert(0, "12:34:56") # Inserting example data
clear_button = tk.Button(root, text="Clear", command=clear_entry)
clear_button.pack()
root.mainloop()