【问题标题】:How can I keep track of which text entry is clicked?如何跟踪单击了哪个文本条目?
【发布时间】:2018-02-28 12:36:47
【问题描述】:

如果我有一个 Tkinter Text 小部件,其文本绑定到鼠标单击,我如何跟踪用户单击的文本?我希望该函数返回单击的标签的编号,但就目前而言,它只打印 n 的最后一个值,即 5。例如,如果用户单击“名称 1”,我希望它打印“1”,如果用户点击“名称 2”,我希望它返回“2”。

代码如下:

import tkinter as tk

def prt(num):
    print(num)

root = tk.Tk()

t = tk.Text(root, height=20, width=50)
t.pack()
for n in range(1, 6):
    t.insert(tk.END, "%s %d\n" % ("Name", n), "label")
    t.tag_bind("label", "<Button-1>", lambda event, num = n: prt(num))

root.mainloop()

任何帮助表示赞赏。

【问题讨论】:

  • 您所有的文本插入都使用完全相同的标签名称,因此只创建了一个标签 - 您多次覆盖其点击处理程序。改变循环中的名称("label%d" % n,也许),我认为它会起作用。
  • 是的,你是对的,它有效。谢谢

标签: python tkinter


【解决方案1】:

感谢 jasonharper 提供答案。这是工作代码。

import tkinter as tk

def prt(num):
    print(num)

root = tk.Tk()

t = tk.Text(root, height=20, width=50)
t.pack()
for n in range(1, 6):

    t.insert(tk.END, "%s %d\n" % ("Name", n), "label%d" % n)

    t.tag_bind("label%d" % n, "<Button-1>", lambda event, num = n: prt(num))

root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 2018-02-08
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多