我正在尝试将依赖关系保持在我所贡献的程序的最小值,它是一个小文本编辑器。
GTK Textview似乎没有内置的撤消功能。到目前为止,我有没有参考实现?每个人都为自己的TextView小部件编写自己的撤销功能吗?
我会对任何示例代码感到高兴 - 对python示例代码最开心,因为我们的项目是在python中。
答案 0 :(得分:5)
作为一个例子:我将gtksourceview的撤消机制移植到python:http://bitbucket.org/tiax/gtk-textbuffer-with-undo/
是gtksourceview的撤消
的替代品(此处为OP,但启动板open-id不再起作用)
答案 1 :(得分:4)
根据您的厌恶程度,以及您正在构建的文本编辑器类型,GtkSourceView在许多其他内容中添加了undo / redo。非常值得一看,如果你想要它提供的其他features。
答案 2 :(得分:3)
据我所知,GTK TextView不包含撤销功能。因此,虽然我不熟悉Python的GTK库,但我认为它没有。
Ruby-GNOME2项目有sample text editor,具有撤消/重做功能。基本上,它们连接到TextView小部件的insert_text和delete_range信号,并在列表中记录事件和相关数据。
答案 3 :(得分:0)
#!/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()