如何添加右键菜单链接并带有多个小部件?

3
我的问题是一个类似于这个问题的后续:这个问题。我希望在右键单击小部件时对其执行操作。 条件:
  1. 右键单击“我的标签2”
  2. 选择“显示标签”
期望结果:

=> “my label 2”应该被打印出来

初始代码:
from Tkinter import * # Tkinter -> tkinter in Python 3

root = Tk()

def print_label():
    print "Please, help me to print the label which has been clicked !"

def popup(event):
    menu.post(event.x_root, event.y_root)


# create a popup menu
menu = Menu(root, tearoff=0)
menu.add_command(label="Display the label", command=print_label)


# create the 3 labels
label1_text=StringVar()
label2_text=StringVar()
label3_text=StringVar()

label1_text.set("my label 1")
label2_text.set("my label 2")
label3_text.set("my label 3")

label1=Label(root, textvariable=label1_text)
label2=Label(root, textvariable=label2_text)
label3=Label(root, textvariable=label3_text)

label1.pack()
label2.pack()
label3.pack()

# attach popup to frame
label1.bind("<Button-3>", popup)
label2.bind("<Button-3>", popup)
label3.bind("<Button-3>", popup)

root.mainloop()
1个回答

3
尽可能少地更改当前代码,您需要完成以下三个任务:
  1. 创建一个全局变量来保存当前选定标签的引用。

  2. popup 函数中,将此变量设置为 event.widget,它将是当前选定的标签。

  3. print_label 函数中,通过访问其 "text" 键来打印此标签的文本内容。

下面是您程序的修正版。我更改的内容在注释框中:
from Tkinter import * # Tkinter -> tkinter in Python 3

root = Tk()

#############################################################
selected = None  # This is the variable mentioned in step 1

def print_label():
    print selected["text"]  # This is step 3

def popup(event):
    global selected  # Tell Python that selected is global

    menu.post(event.x_root, event.y_root)

    selected = event.widget  # This is step 2
#############################################################

# create a popup menu
menu = Menu(root, tearoff=0)
menu.add_command(label="Display the label", command=print_label)


# create the 3 labels
label1_text=StringVar()
label2_text=StringVar()
label3_text=StringVar()

label1_text.set("my label 1")
label2_text.set("my label 2")
label3_text.set("my label 3")

label1=Label(root, textvariable=label1_text)
label2=Label(root, textvariable=label2_text)
label3=Label(root, textvariable=label3_text)

label1.pack()
label2.pack()
label3.pack()

# attach popup to frame
label1.bind("<Button-3>", popup)
label2.bind("<Button-3>", popup)
label3.bind("<Button-3>", popup)

root.mainloop()

1
非常感谢。我不知道 event.widget :) - sangorys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接