Python .VBox() #菜单栏设置 menuBar=Gtk.menuBar() #设置加速器 agr=Gtk.AccelGroup() 自添加加速组(agr) #文件菜单 文件菜单下拉菜单=Gtk.MenuItem(“文件”) menuBar.append(文件

Python .VBox() #菜单栏设置 menuBar=Gtk.menuBar() #设置加速器 agr=Gtk.AccelGroup() 自添加加速组(agr) #文件菜单 文件菜单下拉菜单=Gtk.MenuItem(“文件”) menuBar.append(文件,python,clipboard,gtk3,pygtk,pygobject,Python,Clipboard,Gtk3,Pygtk,Pygobject,.VBox() #菜单栏设置 menuBar=Gtk.menuBar() #设置加速器 agr=Gtk.AccelGroup() 自添加加速组(agr) #文件菜单 文件菜单下拉菜单=Gtk.MenuItem(“文件”) menuBar.append(文件菜单下拉菜单) file_menu=Gtk.menu() 文件菜单下拉菜单。设置子菜单(文件菜单) #文件菜单项 文件_exit=Gtk.MenuItem(“退出”) 键,mod=Gtk.加速器解析(“Q”) 文件_exit.add_加速器(“

.VBox() #菜单栏设置 menuBar=Gtk.menuBar() #设置加速器 agr=Gtk.AccelGroup() 自添加加速组(agr) #文件菜单 文件菜单下拉菜单=Gtk.MenuItem(“文件”) menuBar.append(文件菜单下拉菜单) file_menu=Gtk.menu() 文件菜单下拉菜单。设置子菜单(文件菜单) #文件菜单项 文件_exit=Gtk.MenuItem(“退出”) 键,mod=Gtk.加速器解析(“Q”) 文件_exit.add_加速器(“激活”,agr,key,mod,Gtk.AccelFlags.VISIBLE) 文件_exit.connect(“激活”,self.quit) 文件菜单.append(文件退出) #编辑菜单 编辑菜单下拉菜单=Gtk.MenuItem(“编辑”) 菜单栏.附加(编辑菜单下拉菜单) 编辑菜单=Gtk.menu() 编辑菜单下拉菜单。设置子菜单(编辑菜单) #编辑菜单项 编辑_cut=Gtk.MenuItem(“剪切”) 键,mod=Gtk.加速器解析(“X”) 编辑剪切。添加加速器(“激活”,agr,键,mod,Gtk.AccelFlags.VISIBLE) 编辑切割连接(“激活”,在工具按钮上单击切割) 编辑_copy=Gtk.MenuItem(“复制”) 键,mod=Gtk.加速器解析(“C”) 编辑副本。添加加速器(“激活”,agr,键,mod,Gtk.AccelFlags.VISIBLE) 编辑\复制.连接(“激活”,在\工具上单击\复制\按钮) 编辑粘贴=Gtk.MenuItem(“粘贴”) 键,mod=Gtk.加速器解析(“V”) 编辑粘贴。添加加速器(“激活”、agr、键、mod、Gtk.AccelFlags.VISIBLE) 编辑粘贴连接(“激活”,点击工具按钮粘贴) 编辑_选择_全部=Gtk.MenuItem(“全部选择”) 键,mod=Gtk.加速器解析(“A”) 编辑\选择\全部。添加\加速器(“激活”,agr,键,mod,Gtk。AccelFlags.可见) 编辑\选择\全部连接(“激活”,在\工具按钮上\选择\全部\单击) 编辑菜单。附加(编辑选择全部) 编辑菜单。追加(编辑剪切) 编辑菜单。附加(编辑副本) 编辑菜单。附加(编辑粘贴) 框外部。包开始(菜单栏,假,假,0) entry=Gtk.entry() 外包装箱包装开始(输入,错误,错误,0) editor=GtkSource.View.new() 编辑器。设置显示线号(真) 编辑器。设置自动缩进(真) box\u outer.pack\u start(编辑器,真,真,0) self.clipboard=Gtk.clipboard.get(Gdk.SELECTION\u剪贴板) 自我添加(外框) def退出(自我,小部件=无): Gtk.main_quit() def on_toolbutton_select_all_clicked(self,widget): focusedWidget=self.get\u focus() 如果focusedWidget不是None: 如果focusedWidget.has_focus(): 如果str(type(focusedWidget))==“”: 聚焦Widget。选择_区域(0,-1) elif str(类型(focusedWidget))==“”: 编辑器\u buffer=focusedWidget.get\u buffer() 编辑器缓冲区。选择范围(编辑器缓冲区。获取开始缓冲区(),编辑器缓冲区。获取结束缓冲区() 其他: 通过 工具按钮上的def已单击(自我,小部件): focusedWidget=self.get\u focus() 如果focusedWidget不是None: 如果focusedWidget.has_focus(): 如果str(type(focusedWidget))==“”: focusedWidget.cut_剪贴板() elif str(类型(focusedWidget))==“”: 编辑器\u buffer=focusedWidget.get\u buffer() 编辑器缓冲区。剪切剪贴板(self.clipboard,编辑器缓冲区) 其他: 通过 工具按钮上的def_复制_单击(自我,小部件): focusedWidget=self.get\u focus() 如果focusedWidget不是None: 如果focusedWidget.has_focus(): 如果str(type(focusedWidget))==“”: focusedWidget.copy_剪贴板() elif str(类型(focusedWidget))==“”: 编辑器\u buffer=focusedWidget.get\u buffer() 编辑器\u缓冲区。复制\u剪贴板(self.clipboard) 其他: 通过 单击工具按钮上的def粘贴(自我,小部件): focusedWidget=self.get\u focus() 如果focusedWidget不是None: 如果focusedWidget.has_focus(): 如果str(type(focusedWidget))==“”: focusedWidget.paste_剪贴板() elif str(类型(focusedWidget))==“”: 编辑器\u buffer=focusedWidget.get\u buffer() 编辑器缓冲区。粘贴剪贴板(self.clipboard,None,编辑器缓冲区) 其他: 通过 win=MyWindow() win.connect(“破坏”,Gtk.main_退出) 赢,全力以赴 Gtk.main()
谢谢您的回答,部分有效。默认情况下,剪切/复制/粘贴可以跨不同的小部件工作(例如,假设gtksourceview旁边还有一个entry小部件)——在您的解决方案中,如果您将光标放在entry小部件内并按Ctrl+A,则会选择gtksourceview中的文本,而不是entry小部件中的文本。复制功能等也有同样的问题。。如果我建议的方法不起作用,你能分享一个示例代码吗?我会研究它,并尝试给出更好的解决方案。下面是代码的要点(包括你的建议):。例如,尝试在两个小部件(条目和源视图)中写入内容,然后(光标聚焦在条目中)按
Ctrl+A
预期的行为。。当您在gtkEntry中键入文本并单击菜单项“edit_select_all”时,它是在gtkEntry中还是在GtkSource视图中选择all?我不知道这是否有任何正确的解决方案。从我的搜索中,我没有得到任何合适的解决方案。但是我可以建议这样做的方法:-1)不要连接accel组,这将使默认功能可用2)在菜单项的相应回调函数中执行“is_focus”检查它,查看当前聚焦的小部件。然后进行相应的处理或只是尝试发射
    def on_toolbutton_select_all_clicked(self, widget):
    print("Select all")
    if self.editor.is_focus():
        self.editor_buffer.select_range(self.editor_buffer.get_start_iter(), self.editor_buffer.get_end_iter())
    else:
        self.entry.select_region(0,-1)
    return True

def on_toolbutton_cut_clicked(self, widget):
    print("Cut")
    if self.editor.is_focus():
        self.editor_buffer.cut_clipboard(self.clipboard,self.editor_buffer)
    else:
        self.entry.emit("cut-clipboard")
    return True

def on_toolbutton_copy_clicked(self, widget):
    if self.editor.is_focus():
        self.editor_buffer.copy_clipboard(self.clipboard)
    else:
        self.entry.emit("copy-clipboard")
    return True

def on_toolbutton_paste_clicked(self, widget):
    if self.editor.is_focus():
        self.editor_buffer.paste_clipboard(self.clipboard, None, self.editor_buffer)
    else:
        self.entry.emit("paste-clipboard")
    return True