首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加一个带有多个小部件链接的右键上下文菜单?

添加一个带有多个小部件链接的右键上下文菜单?
EN

Stack Overflow用户
提问于 2014-05-23 17:26:17
回答 1查看 3.3K关注 0票数 3

我的问题是对this question的跟进

我想要得到的小部件,它是正确的点击来做它的动作。

条件:

  1. 右击“我的标签2”
  2. 选择“显示标签”

预期结果:

=>“我的标签2”应该打印出来

要解决的初始代码:

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-23 18:12:48

尽可能少地更改当前代码,您需要做三件事:

  1. 创建一个全局变量以保存对当前选定标签的引用。
  2. popup内部,将此变量设置为event.widget,这将是当前选定的标签。
  3. print_label内部,通过访问标签的"text"键打印该标签的文本。

下面是您程序的固定版本。我更改的内容在评论框中:

代码语言:javascript
复制
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()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23835154

复制
相关文章

相似问题

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