首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别事件处理程序中Python选项卡上的标签

如何识别事件处理程序中Python选项卡上的标签
EN

Stack Overflow用户
提问于 2022-02-09 12:28:02
回答 2查看 237关注 0票数 0

我在Tkinter的标签上加上一个for循环。如何在事件处理程序中识别单击了哪个标签(或其循环索引)?我想它在功能上类似于一个ListBox,但没有格式限制。我可能想把标签圈在一起,或者把它们对角线放置。我试图找到标签的坐标,但是只有当标签是第一个可见的,或者当标签被激活时重新绘制时,这些坐标才可用。在事件处理程序中传递的x,y也是标签中的x,y,它无助于标识标签。

我可以复制标签代码约10次,并有大约10个事件处理程序。这是可行的,但现在已经不是1970年了!

也许我可以将处理程序绑定到选项卡画布,并从它的坐标中识别标签。标签需要在第一个选项卡上或在活动时绘制的选项卡上。

也许我可以通过将事件处理程序保存在数组中为每个标签创建不同的事件处理程序。我需要为每个标签设置一个事件处理程序。如果标签数量发生变化,则代码将需要更改。

我目前正在尝试一个带有“”的标签。使用带有命令的按钮会更容易吗?

我错过了Python的哪个简单部分?我不能成为第一个需要这个的人!如有任何帮助或建议,将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2022-02-09 15:12:13

您可以在dict中为每个标签小部件保存对label文本的引用。

代码语言:javascript
复制
import tkinter as tk
from tkinter import ttk
 
root = tk.Tk()
root.geometry('+800+50')

notebook = ttk.Notebook(root, width=300, height=200, padding=[10,10,10,10])
notebook.pack()
tab_one = tk.Frame(notebook, bg='wheat')
notebook.add(tab_one, text='Cheese', padding=[10,10,10,10])
tab_two = tk.Frame(notebook, bg='mint cream')
notebook.add(tab_two, text='Misc.', padding=[10,10,10,10])

def clicked(event):
    print('Clicked:', name_dict[event.widget])

# Populating Cheese tab with clickable Labels
name_list = ['Cheddar', 'Ilchester', 'Limburger']
name_dict = {}
for index, name in enumerate(name_list):
    a = tk.Label(tab_one, width=10, text=name, bg='peru')
    a.grid(row=index, column=0, padx=5, pady=5)
    name_dict[a] = name     # Save references in a dict
    a.bind('<Button-1>', clicked)

tk.Label(tab_two, text='Just some text...', bg='powder blue').pack(anchor='nw')

root.mainloop()

你就是这么想的吗?

票数 1
EN

Stack Overflow用户

发布于 2022-02-09 16:14:09

绑定事件时,函数接收一个对象,该对象包含对接收事件的小部件的引用。在下面的示例中,请注意它如何使用event.widget引用单击的小部件。

代码语言:javascript
复制
import tkinter as tk

def update_label(event):
    event.widget.configure(text="You clicked me")

root = tk.Tk()

for i in range(10):
    l = tk.Label(root, text="Click me", width=20)
    l.pack()
    l.bind("<1>", update_label)

root.mainloop()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71049636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档