Python tkinter 不会删除条目,只会删除除最后一个字符之外的所有内容

问题描述 投票:0回答:1

这是我第一次编码,请放轻松。

我正在尝试制作一个需要 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

我浪费了几个小时。请帮助我。

python tkinter widget tkinter-entry
1个回答
2
投票

我不是专家,所以如果这是一个愚蠢的答案,请不要笑,但是你是否尝试用 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()
© www.soinside.com 2019 - 2024. All rights reserved.