我想制作菜单项(在菜单栏中,而不是在右键单击弹出窗口中),可以剪切/复制/粘贴所选的任何文本.
等效的键盘命令已经工作,没有我做任何事情来启用它们.例如,我可以在输入框中输入文本,使用Control-X将其剪切,然后使用Control-C将其粘贴回(或其他地方).
关于我看到的主题的帖子归结为剪切/复制/粘贴各个小部件,但这已经有效.如何让菜单项激活它们?
谢谢.
编辑:只是要明确,问题是:
同样,执行此操作的关键命令(Control-x,Control-c,Control-v)已经可以在我没有做任何事情的情况下工作.我知道如何制作菜单 ; 问题是我应该将哪些命令附加到菜单项以获得所需的效果.
编辑2:好的,我有办法.由于关键命令已经起作用,我们可以生成它们.在我的情况下,一切都是一个名为noteBook的笔记本
lambda: self.noteBook.event_generate('<Control-x>')
根据需要削减.例如:
editmenu.add_command(label="Cut", accelerator="Ctrl+X", command=lambda: self.noteBook.event_generate('<Control-x>'))
使用中:https://github.com/lnmaurer/qubit-control-interface/commit/c08c10a7fbc4a637c1e08358fb9a8593dfdf116e
不过,可能还有一种更清洁的方法可以做到这一点; 如果你知道的话请回复.
Joh*_*ato 11
试试这个:来源
import Tkinter
def make_menu(w):
global the_menu
the_menu = Tkinter.Menu(w, tearoff=0)
the_menu.add_command(label="Cut")
the_menu.add_command(label="Copy")
the_menu.add_command(label="Paste")
def show_menu(e):
w = e.widget
the_menu.entryconfigure("Cut",
command=lambda: w.event_generate("<<Cut>>"))
the_menu.entryconfigure("Copy",
command=lambda: w.event_generate("<<Copy>>"))
the_menu.entryconfigure("Paste",
command=lambda: w.event_generate("<<Paste>>"))
the_menu.tk.call("tk_popup", the_menu, e.x_root, e.y_root)
t = Tkinter.Tk()
make_menu(t)
e1 = Tkinter.Entry(); e1.pack()
e2 = Tkinter.Entry(); e2.pack()
e1.bind_class("Entry", "<Button-3><ButtonRelease-3>", show_menu)
t.mainloop()
Run Code Online (Sandbox Code Playgroud)
小智 6
使用该focus_get()方法获取当前具有键盘焦点的窗口小部件,然后将事件发送到该窗口小部件.例如
editmenu = Menu(menubar, tearoff=0)
editmenu.add_command(label="Cut", \
accelerator="Ctrl+X", \
command=lambda: \
mywindow.focus_get().event_generate('<<Cut>>'))
Run Code Online (Sandbox Code Playgroud)
小智 3
玩得开心
from Tkinter import *
class Test(Text):
def __init__(self, master, **kw):
Text.__init__(self, master, **kw)
self.bind('<Control-c>', self.copy)
self.bind('<Control-x>', self.cut)
self.bind('<Control-v>', self.paste)
def copy(self, event=None):
self.clipboard_clear()
text = self.get("sel.first", "sel.last")
self.clipboard_append(text)
def cut(self, event):
self.copy()
self.delete("sel.first", "sel.last")
def paste(self, event):
text = self.selection_get(selection='CLIPBOARD')
self.insert('insert', text)
def test():
r = Tk()
t = Test(r)
t.pack(fill='both', expand=1)
r.mainloop()
if __name__ == '__main__':
test()
Run Code Online (Sandbox Code Playgroud)