我的问题是一种后续行动这个问题 https://stackoverflow.com/questions/12014210/python-tkinter-app-adding-a-right-click-context-menu/23834156#23834156
我想获取已右键单击的小部件以对其执行操作。
状况 :
- 右键单击“我的标签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()
对当前代码进行尽可能少的更改,您需要做三件事:
创建一个全局变量来保存对当前选定标签的引用。
Inside popup
,将此变量设置为event.widget
,这将是当前选定的标签。
Inside print_label
,通过访问其打印该标签的文本"text"
key.
以下是您的程序的固定版本。我修改的内容在评论区:
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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)