【问题标题】:How to delete a character right after it was entered in Tkinter?如何在 Tkinter 中输入字符后立即删除?
【发布时间】:2021-05-03 19:48:21
【问题描述】:

如标题所述,我正在尝试在将字符输入文本字段后立即删除它。

import tkinter as tk

window = tk.Tk()
input = tk.Text()
input.pack()


def handle_keypress(event):
  print("test")
  input.delete("1.0")

input.bind("<Key>", handle_keypress)

window.mainloop()

以下代码仅在键入另一个字符后才删除该字符。但是,打印语句可以按预期立即工作。我想知道是什么导致了这种行为以及如何解决它。感谢您提供任何线索。

【问题讨论】:

  • 如果您从"&lt;Key&gt;" 事件返回"break",则文本小部件不会处理密钥。所以用return "break"替换input.delete("1.0")
  • 键绑定在文本实际插入字符之前执行 - 这允许您修改插入的字符,或完全阻止插入。
  • 如果你不想在文本框中输入任何键,你不禁用它吗?

标签: python tkinter tkinter-text


【解决方案1】:

这是你提供的代码,我把 Tk.text 改成了 tk.entry,你仍然可以通过 .configure 调整大小,本质上是一样的。

如果您要解决的问题是在字符可见之前将其删除,您需要使用 '''tk.END''' 在按下键时从本质上清除条目,如果您运行代码,则不会显示,但您仍会打印您按下的字符。

我还更改了绑定到实际窗口而不是条目,但它应该以任何方式工作

如果您有任何问题,请告诉我

import tkinter as tk

window = tk.Tk()

def handle_keypress(event):
    #capture character entered, print it, then empty the textfield
    print(event.char)
    input1.delete(0, tk.END)

#changed from tk.text to tk.entry, you can use .configure(textvariable) to have further control
input1 = tk.Entry()
input1.pack()

#binded to window    
window.bind("<Key>", handle_keypress)
window.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 2013-11-08
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多