【问题标题】:Python: Hide / Delete label when I click on the entryboxPython:单击输入框时隐藏/删除标签
【发布时间】:2021-07-20 15:05:11
【问题描述】:

当我点击输入框时,我试图隐藏用 Canvas 制作的标签

不是在我写的时候,而是在点击时 我该如何继续?

提前致谢

import tkinter as tk

def handle_click():

    mainCanvas.itemconfig(1, state='hidden')


window = tk.Tk()
window.geometry("500x300")
window.title("window")
mainCanvas = tk.Canvas(window, width = 500, height = 300)
mainCanvas.pack(fill = "both", expand = True)


text_input_name = tk.Entry(window, width = 25)
text_input_name_canvas = mainCanvas.create_window(250, 100, window = text_input_name)
text_input_name.bind("<1>", handle_click)

mainCanvas.create_text(250, 200, text="text", font=("Helvetica", 18), fill="red")


if __name__ == "__main__":
    window.mainloop()

【问题讨论】:

  • 为什么要在画布上创建小部件?其次,您可以在画布上标记对象的id,然后将标记绑定到隐藏或...
  • 您想仅在点击时隐藏它,还是想在小部件获得焦点时隐藏它?

标签: python python-3.x tkinter label


【解决方案1】:

您已经有了解决方案。您需要传递文本的tag/id,而不是传递1。如果要删除,请使用canvas.delete(tag_or_id)

这是一个例子。

import tkinter as tk

def handle_click(event):

    mainCanvas.itemconfig(text, state='hidden')
    #mainCanvas.delete(text)


window = tk.Tk()
window.geometry("500x300")
window.title("window")
mainCanvas = tk.Canvas(window, width = 500, height = 300)
mainCanvas.pack(fill = "both", expand = True)


text_input_name = tk.Entry(window, width = 25)
text_input_name_canvas = mainCanvas.create_window(250, 100, window = text_input_name)
text_input_name.bind("<1>", handle_click)

text = mainCanvas.create_text(250, 200, text="text", font=("Helvetica", 18), fill="red")


if __name__ == "__main__":
    window.mainloop()

【讨论】:

  • 理论上你可以传入 2,在这种情况下也是一样的,但为简单起见,最好像你有(id)一样传递它
  • 同样,如果你不喜欢全局变量,你可以使用.create_text(..., tags=("entry_1", )),然后使用.itemconfig("entry_1", state="hidden")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 2021-08-02
  • 2020-04-07
相关资源
最近更新 更多