我正在尝试创建一个弹出菜单,该菜单仅在某些小部件(在本例中为文本和条目)内右键单击时打开,但在根窗口内的其他任何地方都没有。当用户在其中一个小部件内右键单击并选择“复制”时,该小部件内的文本选择应复制到剪贴板。
照原样,下面的代码仅在明确引用某个小部件时才有效,但我想概括该copyToClipboard
功能以从用户右键单击的小部件中复制文本选择。
相反,从下面的代码中运行注释掉的行会产生以下错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\...\...\lib\tkinter\__init__.py", line 1702, in __call__
return self.func(*args)
TypeError: <lambda>() missing 1 required positional argument: 'e'
如何在copyToClipboard
函数中访问适当的(右键单击)小部件?
def copyToClipboard():
#def copyToClipboard(event):
#value = event.widget.get(SEL_FIRST,SEL_LAST)
value = inputText.get(SEL_FIRST,SEL_LAST)
pyperclip.copy(value)
print(value)
def showMenu(event):
popup.post(event.x_root, event.y_root)
inputEntry = ttk.Entry(root)
inputText = Text(root)
popup = Menu(root)
popup.add_command(label="Copy", command=copyToClipboard)
#popup.add_command(label="Copy", command=lambda e: copyToClipboard(e))
inputText.bind("<Button-3>", showMenu)
inputEntry.bind("<Button-3>", showMenu)
inputText.pack()
inputEntry.pack()
mainloop()