Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Conseguir texto treview tkinter
#1
Buenas:

Estoy intentando conseguir el texto de los "items" de un treeview que posteriormente incluiré en un pdf.

Después de muchas vueltas lo máximo que he conseguido es esto.

Código:
self.items_ab0 = self.treeviewcs05_ab0.get_children()

for ele in self.items_ab0 :
     self.pdfcanvasccpcs_ab0.drawString(150, 330, str(self.treeviewcs05_ab0.item(ele)['values']))

En principio el código funciona y me añade el texto del item en el pdf, el problema es que no lo hace como yo quiero ya que lo que me añade es una lista con los elementos del treeview entre corchetes y cada elemento como una cadena entre comillas. Ejemplo:

['Hola', 'Así', 'me','muestra el texto del treeview']

y lo que yo busco sería:

Hola así me muestra el texto del treeview

¿Alguna idea?.

Muchas Gracias.
Responder
#2
Hola. Supongamos que hacés esta asignación:

Código:
item = self.treeviewcs05_ab0.item(ele)

item va a ser un diccionario. En item["text"] tenés el valor de la primera columna del ítem (o de la fila). En item["values"] tenés una lista con los textos de las columnas a partir de la segunda hasta el número de columnas que haya. Si querés mandar todos los elementos de item["values"] al PDF, tenés que unirlos en una cadena. Haciendo un simple str(item["values"]) te devuelve una cadena con los corchetes y las comas y comillas (si los elementos son cadenas) incluidas. Podrías usar el método join() de las cadenas para unir todos los elementos en una cadena usando el separador que vos quieras. Algunos ejemplos:

Código:
>>> values = ["Hola", "Así", "me", "muestra el texto del treeview"]
>>> str(values)  # Esto sería lo que tenés ahora.
"['Hola', 'Así', 'me', 'muestra el texto del treeview']"
>>> " ".join(values)  # Juntar los elementos en una cadena, separados por espacios.
'Hola Así me muestra el texto del treeview'
>>> ", ".join(values)  # O separados por comas
'Hola, Así, me, muestra el texto del treeview'
>>> " - ".join(values)  # O por guiones, o lo que quieras.
'Hola - Así - me - muestra el texto del treeview'

Entonces, siguiendo tu código, podrías usar:

Código:
self.items_ab0 = self.treeviewcs05_ab0.get_children()

for ele in self.items_ab0:
    item = self.treeviewcs05_ab0.item(ele)
    self.pdfcanvasccpcs_ab0.drawString(150, 330, " - ".join(item["values"]))

Acá podés ver una explicación de join() y otros métodos de las cadenas: https://recursospython.com/guias-y-manua...s-cadenas/. Y también te dejo esto: https://micro.recursospython.com/recurso...hetes.html.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(20-04-2022, 07:18 PM)Francisco escribió: Hola. Supongamos que hacés esta asignación:

Código:
item = self.treeviewcs05_ab0.item(ele)

item va a ser un diccionario. En item["text"] tenés el valor de la primera columna del ítem (o de la fila). En item["values"] tenés una lista con los textos de las columnas a partir de la segunda hasta el número de columnas que haya. Si querés mandar todos los elementos de item["values"] al PDF, tenés que unirlos en una cadena. Haciendo un simple str(item["values"]) te devuelve una cadena con los corchetes y las comas y comillas (si los elementos son cadenas) incluidas. Podrías usar el método join() de las cadenas para unir todos los elementos en una cadena usando el separador que vos quieras. Algunos ejemplos:

Código:
>>> values = ["Hola", "Así", "me", "muestra el texto del treeview"]
>>> str(values)  # Esto sería lo que tenés ahora.
"['Hola', 'Así', 'me', 'muestra el texto del treeview']"
>>> " ".join(values)  # Juntar los elementos en una cadena, separados por espacios.
'Hola Así me muestra el texto del treeview'
>>> ", ".join(values)  # O separados por comas
'Hola, Así, me, muestra el texto del treeview'
>>> " - ".join(values)  # O por guiones, o lo que quieras.
'Hola - Así - me - muestra el texto del treeview'

Entonces, siguiendo tu código, podrías usar:

Código:
self.items_ab0 = self.treeviewcs05_ab0.get_children()

for ele in self.items_ab0:
    item = self.treeviewcs05_ab0.item(ele)
    self.pdfcanvasccpcs_ab0.drawString(150, 330, " - ".join(item["values"]))

Acá podés ver una explicación de join() y otros métodos de las cadenas: https://recursospython.com/guias-y-manua...s-cadenas/. Y también te dejo esto: https://micro.recursospython.com/recurso...hetes.html.

Saludos

Muchísimas gracias Francisco. (Voy a echar un vistazo a ese tema porque me interesa bastante).
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)