문제

난을 유지하려고 종속성을 최소화를 위한 프로그램에 기여하는,그것은 작은 텍스트 편집기입니다.

GTK 뷰하지 않는 것으로 올 내장 취소 기능입니다.어떤 참조 구현 나는 누락에 지금까?은 모든 사람을 쓰는 자신의 취소 기능을 위해 자신의 텍스트 뷰 위젯?

나는 행복에 대한 모든 샘플 코드가 가장 행복에 대한 python 샘플 코드,우리의 프로젝트에서는 python.

도움이 되었습니까?

해결책

내가 알기로서,사용자 인터페이스 그리고 스트링이 포함되지 않는 취소 기능입니다.하는 동안 그래서 나는 익숙하지 않 Python 의 프로그램 라이브러리,내가 생각하는 것 중 하나를 가지고 있지 않.

Ruby-GNOME2 프로젝트 샘플 텍스트 편집기 는 취소/다시 기능이 있습니다.기본적으로 그들은 연결하 insert_text 및 delete_range 신호의 뷰 위젯과 기록한 이벤트와 연결된 데이터에서는 목록이다.

다른 팁

로 follwow-up:이식 gtksourceview 의 취소 메커니즘을 python: http://bitbucket.org/tiax/gtk-textbuffer-with-undo/

를 제공합으로 대체하는 gtksourceview 의 실행 취소

(OP 여기에,하지만 실행 패드 오픈 id 더 이상 작동하지 않습니다)

에 따라 얼마나 종속성을 싫고,당신이 어떤 종류의 텍스트 편집기를 구축, GtkSourceView 추가/취소 사이에 다른 많은 것들입니다.매우 가치가있는 경우에 당신은 몇 가지의 다른 특징 그것을 제공합니다.

사용 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()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top