【问题标题】:How to read clickable labels in tkinter如何在 tkinter 中读取可点击标签
【发布时间】:2022-01-15 03:56:30
【问题描述】:

我昨天以一种很长的方式问了这个问题。我现在将代码简化为真正的问题。 当我单击窗口中的链接时,我想读取 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()

【问题讨论】:

    标签: python tkinter label


    【解决方案1】:

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

    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

    【讨论】:

    • 谢谢佩德罗。这对我有用。为什么在这种情况下 for 循环比 while 循环更好?
    • @Pascal For 循环更容易使用
    • 更快更简单,因为我在 test_list
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    相关资源
    最近更新 更多