Domanda

Sto cercando di mantenere le dipendenze al minimo per un programma a cui contribuisco, è un piccolo editor di testo.

GTK Textview non sembra avere una funzione di annullamento incorporata.C'è qualche implementazione di riferimento che mi è mancata finora?Tutti stanno scrivendo la propria funzione di annullamento per i propri widget TextView?

Sarò felice di qualsiasi codice di esempio, soprattutto del codice di esempio Python, poiché il nostro progetto è in Python.

È stato utile?

Soluzione

Per quanto ne so, GTK TextView non include una funzione di annullamento.Quindi, anche se non ho familiarità con la libreria GTK di Python, penso che non ne abbia una.

Il progetto Ruby-GNOME2 ha un file editor di testo di esempio che ha funzionalità di annullamento/ripetizione.Fondamentalmente si connettono ai segnali insert_text e delete_range del widget TextView e registrano gli eventi e i dati associati in un elenco.

Altri suggerimenti

come seguito:Ho portato il meccanismo di annullamento di gtksourceview su Python: http://bitbucket.org/tiax/gtk-textbuffer-with-undo/

funge da sostituto immediato per l'annullamento di gtksourceview

(OP qui, ma l'open-id del launchpad non funziona più)

A seconda di quanto sei avverso alla dipendenza e del tipo di editor di testo che stai creando, GtkSourceView aggiunge annulla/ripristina tra molte altre cose.Vale davvero la pena guardarlo se vuoi qualche altro caratteristiche offre.

Usa GtkSource

.

  • [Cmnd] + [Z] per annullare (impostazione predefinita)
  • [Cmnd] + [Shift] + [Z] per ripetere (predefinito)
  • [Cmnd] + [Y] per ripetere (aggiunto manualmente)

esempio:

#!/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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top