如何在 tkinter 中读取可点击的标签

How to read clickable labels in tkinter

我昨天问了这个问题很长一段时间。我现在将代码简化为真正的问题。 当我单击 window 中的 link 时,我想要读取 pos_num。这样我就可以从完整代码中的其他列表中获取信息。

如果我能让以下内容起作用,我就可以在我的工具中实现它。

import tkinter as tk


def track_and_trace(pos_num):
    print(pos_num)


# Create list
test_list = ["link1", "link2", "link3", "link4"]

# Create a UI window
window = tk.Tk()

# Check how many rows the window will get
number_of_rows = len(test_list)

# Add values from list to the tkinter window
row_number = 1
while row_number <= number_of_rows:
    label_link = tk.Label(window, text=test_list[row_number - 1], width=13, cursor="hand2")
    label_link.grid(row=row_number, column=1, sticky='ew')
    label_link.bind("<Button-1>", lambda pos_num=test_list[row_number - 1]: track_and_trace(pos_num))

    row_number += 1

# Start the window loop
window.mainloop()

您可以使用如下事件访问文本 属性:

import tkinter as tk


def track_and_trace(e:tk.Event):
    print(e.widget["text"])


# Create list
test_list = ["link1", "link2", "link3", "link4"]

# Create a UI window
window = tk.Tk()

# Check how many rows the window will get
number_of_rows = len(test_list)

# Add values from list to the tkinter window
row_number = 1
while row_number <= number_of_rows:
    label_link = tk.Label(window, text=test_list[row_number - 1], width=13, cursor="hand2")
    label_link.grid(row=row_number, column=1, sticky='ew')

    label_link.bind("<Button-1>", lambda e: track_and_trace(e))

    row_number += 1

# Start the window loop
window.mainloop()

ps:我建议使用 for 而不是 while