Sucede que estoy haciendo una practica con PyGObject para aprender desarrollar apps con él. Estoy armando una aplicación que ejecute una expresión regular y marque las condiciones en el texto que el usuario ingreso anteriormente, algo sencillo y que también necesito, así luce:
Ahora, cuando tengo coincidencias conforme a la expresión regular, me interesa recoger la tupla m.span()
que me la sección dentro del texto a la que corresponde la coincidencia. Sin embargo, al usar el método para aplicar un tag al texto, digamos Gtk.TextIter.apply_tag(tag, 0, 10)
, me indica la siguiente excepción:
1 2 3 4 5 6 | Traceback (most recent call last): File "coders/desarrollo/regextrainer/main.py", line 124, in on_txtbff_datos_changedself.txtbff_datos.apply_tag(self.tag_bold,start,end) File "/usr/lib/python2.7/site-packages/gi/types.py", line 113, in functionreturninfo.invoke(*args,**kwargs)TypeError: argument start: Expected Gtk.TextIter, but got int |
Entonces, parece que necesito un objeto Gtk.TextIter
y no un objeto int
. El problema es que ya le he dado vueltas a la documentación y no veo como pueda crear un objeto Gtk.TextIter
a partir de un objeto integer de python :(
acá el código fuente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | #!/usr/bin/env python2# coding: utf-8fromgi.repositoryimportGtk,Pango,GdkimportreimportosUI_PATH=os.path.dirname(__file__)classRegextrainer(object):""""""def__init__(self,):""""""## Banderasself.I=Noneself.L=Noneself.M=Noneself.S=Noneself.U=Noneself.builder=Gtk.Builder()self.builder.add_from_file(os.path.join(UI_PATH,"ui","interfaz.glade"))self.builder.connect_signals(self)self.cregex=re.compile("",self.__flags())self.rregex=Noneself.window=self.builder.get_object("window")self.window.show_all()self.txtentr_regex=self.builder.get_object("txtentr_regex")self.txtvw_datos=self.builder.get_object("txtvw_datos")self.txtbff_datos=self.builder.get_object("txtbff_datos")self.txtvw_datos.set_buffer(self.txtbff_datos)## Pangoself.tag_bold=self.txtbff_datos.create_tag("bold",weight=Pango.Weight.BOLD)def__flags(self):""" Retorna la sumatoria de las banderas activadas"""returnsum([re.Iifself.Ielse0,re.Lifself.Lelse0,re.Mifself.Melse0,re.Sifself.Selse0,re.Uifself.Uelse0],0)defon_ckb_ignorecase_toggled(self,checkbutton):""" Arguments: - `self`: - `checkbutton`:"""self.I=notself.Idefon_ckb_locale_toggled(self,checkbutton):""" Arguments: - `self`: - `checkbutton`:"""self.L=notself.Ldefon_ckb_multiline_toggled(self,checkbutton):""" Arguments: - `self`: - `checkbutton`:"""self.M=notself.Mdefon_ckb_dotall_toggled(self,checkbutton):""""""self.S=notself.Sdefon_ckb_unicode_toggled(self,checkbutton):""""""self.U=notself.Udefdestroy(self,window):""" Arguments: - `self`: - `window`:"""Gtk.main_quit()defon_txtentr_regex_changed(self,textentry):""" Arguments: - `self`:"""# debemos recibir la cadena con la expresión regular# y luego usarla sobre el texto en la caja de textoregex=self.txtentr_regex.get_text()self.cregex=re.compile(regex,self.__flags())defon_txtbff_datos_changed(self,textbuffer):""""""start=self.txtbff_datos.get_start_iter()end=self.txtbff_datos.get_end_iter()self.rregex=self.cregex.finditer(self.txtbff_datos.get_text(start,end,True))# Borramos todos los tags dentro del texto,# suponiendo que encontráramos algo...ifself.rregex:self.txtbff_datos.remove_all_tags(start,end)# repasamos todas las coincidenciasformatobjinself.rregexifself.rregexelse[]:start,end=matobj.span()self.txtbff_datos.apply_tag(self.tag_bold,start,end)defmain():""""""app=Regextrainer()Gtk.main()if__name__=="__main__":main() |
alguna ayuda? :)