gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 17:41:15 25 4
gpt4 key购买 nike

我的问题是对 this question 的一种跟进

我想获取已被右键单击以对其执行操作的小部件。

条件:

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

预期结果:

=> 应打印“我的标签 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. 创建一个全局变量来保存对当前选定标签的引用。

  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()

关于python - 添加带有多个小部件链接的右键单击上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23835154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com