如何在 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
我昨天问了这个问题很长一段时间。我现在将代码简化为真正的问题。 当我单击 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