我试图将依赖关系保持在我所贡献的程序的最小值,它是一个小文本编辑器。

GTK Textview似乎没有内置的撤消功能。 到目前为止,我有没有参考实现? 每个人都为自己的TextView小部件编写自己的撤消功能吗?

我会对任何示例代码感到高兴 - 对python示例代码最开心,因为我们的项目是在python中。

===============>>#1 票数:5

作为一个结论:我将gtksourceview的撤消机制移植到python: http ://bitbucket.org/tiax/gtk-textbuffer-with-undo/

作为gtksourceview撤消的替代品

(OP在这里,但启动板open-id不再起作用)

===============>>#2 票数:4

根据您的厌恶程度以及您正在构建的文本编辑器类型, GtkSourceView会在许多其他方面添加undo / redo。 非常值得一看,如果你想要它提供的其他一些功能

===============>>#3 票数:3 已采纳

据我所知,GTK TextView不包含撤消功能。 因此,虽然我不熟悉Python的GTK库,但我认为它没有。

Ruby-GNOME2项目有一个示例文本编辑器 ,具有撤消/重做功能。 基本上,它们连接到TextView小部件的insert_text和delete_range信号,并在列表中记录事件和相关数据。

===============>>#4 票数:0

使用GtkSource

  • 撤消[Cmnd] + [Z](默认)
  • 重做[Cmnd] + [Shift] + [Z](默认)
  • 重做[Cmnd] + [Y](手动添加)

例:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk
gi.require_version('GtkSource', '3.0')
from gi.repository import GtkSource

import os


class TreeviewWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="TreeviewWindow")
        self.set_size_request(300, 300)
        self.connect("key-press-event", self._key_press_event)
        self.mainbox = Gtk.VBox(spacing=10)
        self.add(self.mainbox) 

        self.textbuffer = GtkSource.Buffer()
        textview = GtkSource.View(buffer=self.textbuffer)
        textview.set_editable(True)
        textview.set_cursor_visible(True)
        textview.set_show_line_numbers(True)
        self.mainbox.pack_start(textview, True, True, 0)
        self.show_all()  

    def _key_press_event(self, widget, event):
        keyval_name = Gdk.keyval_name(event.keyval)
        ctrl = (event.state & Gdk.ModifierType.CONTROL_MASK)
        if ctrl and keyval_name == 'y':
            if self.textbuffer.can_redo():
                self.textbuffer.do_redo(self.textbuffer)

    def main(self):
        Gtk.main()

if __name__ == "__main__":
    base = TreeviewWindow()
    base.main()

  ask by Florian Heinle translate from so

未解决问题?本站智能推荐:

1回复

在选择范围内撤消?

有没有办法在Visual Studio中获得“在选择中撤消”功能? 如果没有,是否有任何具有此功能的编辑器? 这似乎异常有用,不需要多次撤消x,复制,重做x多次并粘贴。 取而代之的是,只需突出显示感兴趣的区域并在该位置撤消即可。
8回复

如何在文本编辑器中设计撤消和重做?

我的项目的一部分是编写一个文本编辑器,该文本编辑器用于键入一些规则,编译我的应用程序并运行它。 编写编译器已结束并发布beta版。 在最终版本中,我们必须将撤消和重做添加到文本编辑器中。 我使用一个文件,并定期将其保存为文本编辑器。 如何设计文本编辑器的撤消和重做? 文件的持久性结构发
1回复

浏览器中用于撤消的事件侦听器

为了提供上下文,我的团队正在浏览器中构建一个富文本编辑器 ,该文本编辑器需要在会话之间将状态持久化到服务器。 编辑者的状态显然可以从对包含keydown事件的文档更新进行更改,但是我们还应该考虑由undo / redo事件触发的对编辑器阶段的更新 。 不幸的是,浏览器没有本地撤消/重做事
1回复

如何撤消已经在emacs中键入的快捷方式?

假设您在emacs中键入了一个快捷键(例如Mx ),并且您意识到自己不想这样做。 如何撤消已经输入的快捷方式? 我已经尝试过Esc-d但这似乎并没有满足我的要求。 输入错误后键入Cg表示未定义快捷方式。 我想要的是一种立即从所有键入的快捷方式中脱颖而出并立即执行新的快捷方式的方法
1回复

在Eclipse TextEditor中执行“撤消”操作后,将文档重新设置为干净

我正在Eclipse中构建一个自定义文本编辑器,并且我注意到JFace TextEditor希望本机处理该行为。 修改文档后,此文档将设置为脏文件。 在使用“撤消”功能返回到初始状态之后,我希望脏状态将被重置,以便用户知道他不必保存它。 事实并非如此:文档仍被标记为脏文件。 我搜
1回复

在GTK + 3 C中创建菜单时不显示菜单

输出屏幕截图 我是gtk +的新手。 当学习在gtk +中创建菜单时,我只是复制粘贴以下代码,然后在我运行它时....我不知道这是什么问题,只显示窗口。 它不显示任何菜单或菜单栏...如果有人遇到过此问题,请帮助我...
1回复

Python gtk TextView边框无法在CSS中使用

我真的很奇怪。 从gtk css样式,我可以应用例如背景颜色,阶数半径,但是我无法使边框可见。 该文件非常简单: 我究竟做错了什么 ?
2回复

在gtk textview中使用系统monospace字体

我希望在我的(Python)程序中有一个GtkTextView,它显示系统等宽字体的文本。 我找到了很多使用expicit字体系列名称和大小的方法。 但是,我想使用系统指定的等宽字体(例如来自ubuntu字体首选项面板)。 我的程序应该能够在Windows和Linux上运行而无需修改,
1回复

在Gtk.TextView中使用标记

我一直在试图找到一种在Python GObject Gtk.TextView Pango标记与Gtk.TextView和Gtk.TextBuffer一起使用的方法,但似乎此功能仅适用于工具提示和标签。 Gtk.TextBuffer具有insert_markup方法,但需要Gtk.TextIte
3回复

如何使用Python / Django实现“撤消”功能

我有一个Django应用程序,我允许用户导入带有联系人数据的CSV文件(成员资格#,名字,姓氏等)。 当他们导入文件时,应用程序会检查数据库是否有匹配的记录,并且:1)如果不存在匹配则插入新记录,或者2)使用新数据更新现有数据。 我的问题是:使用Django或直接Python实现撤销