Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python/Tkinter制作菜单栏剪切/复制/粘贴_Python_Tkinter - Fatal编程技术网

如何使用Python/Tkinter制作菜单栏剪切/复制/粘贴

如何使用Python/Tkinter制作菜单栏剪切/复制/粘贴,python,tkinter,Python,Tkinter,我想制作菜单项(在菜单栏中,而不是在右键单击弹出窗口中),可以剪切/复制/粘贴所选的任何文本 等效的键盘命令已经可以工作了,而我没有做任何事情来启用它们。例如,我可以在输入框中输入文本,使用Control-X剪切文本,然后使用Control-C将其粘贴回(或其他位置) 我看到的关于这个主题的帖子可以归结为针对单个小部件的剪切/复制/粘贴,但这已经奏效了。如何使菜单项激活它们 谢谢 编辑: 需要明确的是,问题是: 如何使剪切/复制的菜单项作用于任何小部件中选择的任何文本 如何让“粘贴”菜单项在文

我想制作菜单项(在菜单栏中,而不是在右键单击弹出窗口中),可以剪切/复制/粘贴所选的任何文本

等效的键盘命令已经可以工作了,而我没有做任何事情来启用它们。例如,我可以在输入框中输入文本,使用Control-X剪切文本,然后使用Control-C将其粘贴回(或其他位置)

我看到的关于这个主题的帖子可以归结为针对单个小部件的剪切/复制/粘贴,但这已经奏效了。如何使菜单项激活它们

谢谢

编辑: 需要明确的是,问题是:

  • 如何使剪切/复制的菜单项作用于任何小部件中选择的任何文本
  • 如何让“粘贴”菜单项在文本光标所在的位置粘贴文本
同样,执行此操作的关键命令(Control-x、Control-c、Control-v)在我没有做任何事情的情况下已经可以工作了。我知道如何制作菜单;问题是我应该向菜单项附加什么命令才能达到预期效果

编辑2: 好的,我有一个办法。由于关键命令已经起作用,我们可以直接生成它们。在我的情况下,一切都是一个笔记本名为笔记本所以

lambda:self.noteBook.event_生成(“”)

根据需要切割。例如:

编辑菜单。添加命令(label=“Cut”,accelerator=“Ctrl+X”,command=lambda:self.noteBook.event\u generate(“”))

使用中:

不过,可能有一种更干净的方法可以做到这一点;如果您知道,请回复。

玩得开心

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()
从Tkinter导入*
班级考试(课文):
def _初始功率(自功率、主功率,**kw):
文本。\uuuuu初始值(自、主、**kw)
self.bind(“”,self.copy)
自我绑定(“”,自我剪切)
self.bind(“”,self.paste)
def副本(自身,事件=无):
self.clipboard_clear()
text=self.get(“sel.first”、“sel.last”)
self.clipboard\u append(文本)
def切断(自身、事件):
self.copy()
自我删除(“选择第一个”、“选择最后一个”)
def粘贴(自身、事件):
text=self.selection\u get(selection='CLIPBOARD')
self.insert('insert',text)
def test():
r=Tk()
t=试验(r)
t、 打包(填充=、扩展=1)
r、 mainloop()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
测试()
试试这个:

导入Tkinter
def make_菜单(w):
全局菜单
_menu=Tkinter.menu(w,tearoff=0)
添加命令(label=“Cut”)
添加命令(label=“Copy”)
添加命令(label=“粘贴”)
def显示菜单(e):
w=e
_menu.entryconfigure(“剪切”,
命令=lambda:w.event_generate(“”)
_menu.entryconfigure(“复制”,
命令=lambda:w.event_generate(“”)
_menu.entryconfigure(“粘贴”,
命令=lambda:w.event_generate(“”)
调用(“tk_弹出窗口”,即_菜单,e.x_根,e.y_根)
t=Tkinter.Tk()
制作菜单(t)
e1=Tkinter.Entry();e1.pack()
e2=Tkinter.Entry();e2.pack()
e1.绑定类(“条目”,“显示”菜单)
t、 mainloop()

我刚刚晚了九个月才遇到你的问题(这是否意味着这是怀孕的暂停?)。此代码适用于我:

    editmenu = Menu(menubar, tearoff=0)
    editmenu.add_command(label="Cut", \
                         accelerator="Ctrl+X", \
                         command=lambda: \
                                 self.editor.event_generate('<<Cut>>'))
    editmenu.add_command(label="Copy", \
                         accelerator="Ctrl+C", \
                         command=lambda: \
                                 self.editor.event_generate('<<Copy>>'))
    editmenu.add_command(label="Paste", \
                         accelerator="Ctrl+V", \
                         command=lambda: \
                                 self.editor.event_generate('<<Paste>>'))
    menubar.add_cascade(label="Edit", menu=editmenu)
editmenu=菜单(菜单栏,tearof=0)
编辑菜单。添加命令(label=“Cut”\
加速器=“Ctrl+X”\
命令=lambda:\
self.editor.event_generate(“”))
编辑菜单。添加命令(label=“Copy”\
加速器=“Ctrl+C”\
命令=lambda:\
self.editor.event_generate(“”))
编辑菜单。添加命令(label=“粘贴”\
加速器=“Ctrl+V”\
命令=lambda:\
self.editor.event_generate(“”))
菜单栏.add_级联(label=“Edit”,menu=editmenu)
使用
focus\u get()
方法获取当前具有键盘焦点的小部件,然后将事件发送到该小部件。例如

editmenu = Menu(menubar, tearoff=0)
editmenu.add_command(label="Cut", \
                     accelerator="Ctrl+X", \
                     command=lambda: \
                             mywindow.focus_get().event_generate('<<Cut>>'))
editmenu=菜单(菜单栏,tearof=0)
编辑菜单。添加命令(label=“Cut”\
加速器=“Ctrl+X”\
命令=lambda:\
mywindow.focus_get().event_generate(“”))

John,正如本文所述,代码所做的只是将内容打印到stdout以供演示。它没有解决我的问题。在哪里?我搜索了“粘贴”这个词(使用左边的小输入区域),它出现了4次。他们都没有回答我的问题。“切”也是如此。如果你指出这一页,我相信我要找的信息就在那里;它肯定不在你链接的页面上。pyGTK有一个剪贴板功能,可能值得一看。@JohnRiselvato:pyGTK中的函数如何帮助使用Tkinter的人?或者你建议他们在另一个工具包中重写整个应用程序?看起来你所做的是将关键命令绑定到小部件的操作。正如我所说的,在我没有做任何事情的情况下,这已经起作用了。问题是如何使剪切/复制菜单项作用于任何小部件中选择的任何文本,以及如何使粘贴菜单项将文本粘贴到文本光标所在的位置is@BryanOakley-是的,他应该为此受到惩罚(讽刺)这并没有解决被问到的问题——这个问题涉及到任何小部件的剪切/复制/粘贴工作。您所做的只是将剪切/复制/粘贴操作绑定到一个小部件上;干杯这与我在编辑2中发布的代码有什么不同吗?编辑2中的代码会生成一个事件。你要求一个更干净的方法。此代码生成一个事件并将其发送到任何具有键盘焦点的小部件。因此,是的,这是有意义的不同和清洁的IMO。
editmenu = Menu(menubar, tearoff=0)
editmenu.add_command(label="Cut", \
                     accelerator="Ctrl+X", \
                     command=lambda: \
                             mywindow.focus_get().event_generate('<<Cut>>'))