我試圖保持的依賴降到最低的程序我貢獻,這是一個小的文本編輯器。撤消了GTK的TextView
GTK TextView中似乎沒有拿出一個內置的撤消功能。到目前爲止,我有沒有參考實現?每個人都爲自己的TextView小部件編寫自己的撤消功能嗎?
我會很高興的任何代碼示例 - 最高興的事情Python示例代碼,爲我們的項目是蟒蛇。
我試圖保持的依賴降到最低的程序我貢獻,這是一個小的文本編輯器。撤消了GTK的TextView
GTK TextView中似乎沒有拿出一個內置的撤消功能。到目前爲止,我有沒有參考實現?每個人都爲自己的TextView小部件編寫自己的撤消功能嗎?
我會很高興的任何代碼示例 - 最高興的事情Python示例代碼,爲我們的項目是蟒蛇。
據我所知,GTK TextView中不包括撤銷功能。所以雖然我不熟悉Python的GTK庫,但我認爲它沒有。
紅寶石GNOME2項目有sample text editor具有撤銷/重做功能。基本上,它們連接到TextView小部件的insert_text和delete_range信號,並將事件和關聯數據記錄在列表中。
根據多麼依賴厭惡你,什麼樣的你正在構建的文本編輯器,GtkSourceView增加撤消/在許多其他事情重做。非常值得一看,如果你想要一些其他的features它提供。
爲follwow追問:我移植gtksourceview的撤銷機制,蟒蛇:http://bitbucket.org/tiax/gtk-textbuffer-with-undo/
作爲一個下拉更換爲gtksourceview的撤消
(OP在這裏,但啓動板開-ID不起作用再)
。
#!/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()