2010-01-08 5 views
0

J'essaie d'afficher la "sélection" d'une certaine sous-chaîne dans un gtk.TextView en traçant une bordure autour du mot. La seule façon de marquer le texte dans un TextView que j'ai trouvé jusqu'à présent est de placer TextTags avec propriétés modifiées. Cela ne semble pas offrir un moyen de dessiner une bordure, mais , est-ce que GTK supporte cela ou est-ce un problème avec PYGTK ONLTDessiner des lignes sur gtk.TextView

Répondre

1

J'ai compris comment dessiner sur une vue de texte !!! Pour commencer, supposons que la référence à votre gtk.TextView se trouve dans une variable appelée visualiseur. Dans l'une des classes ur La fonction draw doit également être appelée avec un événement appelé event-event sinon les dessins seront actualisés et ne restera pas à l'écran

la partie suivante est la gtk.TextView se compose de 7 types de gtk.gdk.windows sur lequel u peut tirer

gtk.TEXT_WINDOW_WIDGET 
gtk.TEXT_WINDOW_TEXT 
gtk.TEXT_WINDOW_LEFT - not displayed by default 
gtk.TEXT_WINDOW_RIGHT - not displayed by default 
gtk.TEXT_WINDOW_TOP - not displayed by default 
gtk.TEXT_WINDOW_BOTTOM 
gtk.TEXT_WINDOW_PRIVATE 

pour le dessin à apparaître sur gtk.TextView Nous devons tirer sur gtk.TEXT_WINDOW_TEXT

Un exemple de code est comme illustré ci-dessous

if(viewer!=None):   
    viewer.connect("expose-event", expose_view) 
     self.drawable=viewer.get_window(gtk.TEXT_WINDOW_TEXT) 

def expose_view(self,window,event): 
    if(self.drawable!=None):    
    self.drawable.draw_line(self.drawable.new_gc(),1,1,30,30) 
    # (1,1) and (30,30) are the coordinates and u can give the values accordingly 
+0

Bien que le code ci-dessus a quelques problèmes mineurs, cela a fonctionné pour moi aussi. Je ne dessine pas de lignes (comme du papier ligné) sur le 'fond'. Voir: http://code.google.com/p/key-train/source/browse/keytrain_textview.py –

0

Dans gtk.TextBuffer balises sont utilisées pour définir un ou plusieurs attributs de texte prédéfini. Sans sous-classe, ceci est limité aux propriétés d'un gtk.TextTag, et n'inclut rien de semblable à une propriété border ou outline. Il n'y a aucune différence entre PyGTK et GTK + simple à cet égard.

Bien qu'un peu hacky, la meilleure façon de faire ce que vous voulez faire est de se connecter au expose-event de votre gtk.TextView, obtenir les coordonnées de votre chaîne et d'en tirer le event.window, qui est le gdk.Window de l'événement prévu dans l'exposé rappeler. (Notez que vous n'avez pas besoin d'extraire et de stocker la fenêtre gtk.TEXT_WINDOW_TEXT, il vous suffit de vérifier dans quelle fenêtre l'événement expose est dans le rappel, ignorant probablement l'exposer s'il ne s'agit pas de la fenêtre de texte. Au lieu de cela, vous pourriez probablement sous-classer un ou plusieurs éléments de TextBuffer/TextView/TextTag pour ajouter une balise border, mais la question est de savoir s'il est raisonnable de le faire.

Questions connexes