GTK+ Textview selezioni in modo semplice

Scritto da Riccardo Attilio Galli

Questa libreria semplifica l'interazione con le selezioni in un GTK+ Textiview tramite l'aggiunta di alcuni segnali.

Per usarla è sufficiente ereditare una classe: darà accesso ai segnali seguenti

  • selection-toggle => textview,(bool)hasSelection
  • selection-change => textview,startIter,endIter,direction (0 unmoved, 1 left to right, -1 right to left)
  • selection-start => textview,startIter,endIter
  • selection-end => textview,startIter,endIter

selection-toggle non dà sorprese: semplicemente notifica se del testo è stato selezionato o ha perso la selezione. Può essere emesso più volte durante una selezione (considerate il caso in cui venga effettuata una selezione col mouse muovendosi prima in una direzione e poi in quella opposta).

selection-start e selection-end vengono emessi una sola volta durante una selezione, quindi quando un tasto del mouse viene premuto o rilasciato (ed è coinvolta una selezione) oppure ogni qual volta la selezione è modificata tramite uso della tastiera.

selection-change viene emesso ad ogni modifica della selezione col mouse, senza attendere il rilascio del tasto, od ogni volta che la selezione è modificata tramite tastiera. Questo segnale verrà emesso sempre tra un selection-start ed un selection-end.

startIter e endIter sono GtkTextIter o None.

È ereditato anche un metodo selecting(): esso ritorna un valore booleano per indicare che è in atto una selezione. Può tornare utile in caso dobbiate monitare una cosa del genere.

Segue un semplice esempio:

try: from gi.repository import Gtk as gtk
except ImportError:  import gtk
from easy_selection_textview import EasySelectionTextview

class TestTextview(EasySelectionTextview):
    def __init__(self):
        super(TestTextview,self).__init__()
        self.connect('selection-change',self.on_selection_changed)

    def on_selection_changed(self,textview,startIter,endIter,direction):
        print('Selection has changed!')
        if startIter:
            print('now is %s\n' % textview.get_buffer().get_text(startIter,endIter,False))

dialog = gtk.Dialog()
dialog.vbox.pack_start(TestTextview(),True,True,0)
dialog.show_all()
dialog.run()

Potete anche avviare il file principale (easy_selection_textview.py), farà partire un esempio ancora più interessante in cui viene monitorata qualunque attività sulle selezioni.

Supporta sia GTK+ 2.x sia GTK+ 3.x (utilizzando pygtk oppure pygobject) e python 2.5 o superiore.

A meno che abbia idee brillanti, questa librerià è considerata conclusa, quindi riceverà solo bugfix (speriamo nessuno).

Download

Il repository git è disponibile a https://github.com/riquito/EasySelectionTextview

Licenza

EasySelectionTextview è rilasciato sotto licenza GPLv3 (vedi file LICENSE)

blog comments powered by Disqus