Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[Tkinter][Python3.6] Cambiar color celda TreeView
#1
Hola buenas, se puede cambiar el color de fondo de una celda en concreto de un treeview según la información que contenga ?? En plan que si contiene un 0 el fondo sea verde, si contiene un 1 el fondo sea naranja y si contiene un 2 el fondo sea rojo
Responder
#2
Hola, acá tenés un código de ejemplo sobre cómo aplicar estilos sobre una celda: https://riptutorial.com/tkinter/example/...a-treeview.

En tu caso deberías, además, atender al evento disparado cuando el contenido de una celda cambia, para poder también actualizar el estilo.

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
(12-11-2018, 11:45 PM)Francisco escribió: Hola, acá tenés un código de ejemplo sobre cómo aplicar estilos sobre una celda: https://riptutorial.com/tkinter/example/...a-treeview.

En tu caso deberías, además, atender al evento disparado cuando el contenido de una celda cambia, para poder también actualizar el estilo.

Saludos


Buenas siento reabrir este tema pero me ocurre algo curioso:



Con este código:

Código:
from tkinter import *

import tkinter as tk

from tkinter import ttk

from datetime import *

import time

import calendar



class Treeviewr:


    def __init__(self):


        # MAIN WINDOW



        self.root = Tk()

        self.root.title("PRUEBAS")

        self.root.geometry()



    # PANEL 1



        self.caj1 = ttk.Frame(self.root)

        self.caj1.grid(row=0, column=0)



    # PANEL 2



        self.caj2 = ttk.Frame(self.root)

        self.caj2.grid(row=1, column=1)



    #STYLES TREEVIEW



        self.styletree= ttk.Style()

        self.styletree.configure('T.Treeview')



    # TREEVIEW



        self.info = ttk.Treeview(self.caj1, style='T.Treeview', columns=('col1', 'col2', 'col3', 'col4'))

        self.info.grid(row=0, column=0, ipadx=200)



        self.info.insert("", tk.END, text='Prueba0', values=('18', 'Juan'), tags=('prob',))

        self.info.insert("", tk.END, text='Prueba1', values=('20', 'Adrián'), tags=('prob',))

        self.info.insert("", tk.END, text='Prueba2', values=('23', 'Felipe', '3'), tags=('prob',))



        self.info.tag_configure('prob', background='black', foreground='red')





        self.info.heading("#0", text='COLUMNA1')

        self.info.heading('col1', text='COLUMNA2')

        self.info.heading('col2', text='COLUMNA3')

        self.info.heading('col3', text='COLUMNA4')

        self.info.heading('col4', text='COLUMNA5')

        self.info.column("#0", minwidth=0, width=5)

        self.info.column('col1', minwidth=25, stretch=0, anchor='center')

        self.info.column('col2', minwidth=25, stretch=0, anchor='center')

        self.info.column('col3', minwidth=25, stretch=0, anchor='center')

        self.info.column('col4', minwidth=25, stretch=0, anchor='center')



        self.root.mainloop()



def main():

my_app = Treeviewr()





if __name__ == '__main__':

main()

A mí no me aparece el estilo de las celdas ¿Por qué?. Lo he metido tal cual en otro ordenador con Ubuntu (En el pc de sobremesa tengo Debian 10) y funciona perfectamente. Puede haber algo mal configurado o instalado de python3? o el código es incorrecto?.

Muchas gracias.
Responder
#4
El código parece correcto. Puede que tengas una versión antigua de Tk en tu Debian que no soporte estilos.

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
#5
(14-12-2019, 07:26 PM)Francisco escribió: El código parece correcto. Puede que tengas una versión antigua de Tk en tu Debian que no soporte estilos.

Saludos!
Muchas gracias Francisco. Pues nada. Va siendo hora de hacer una nueva instalación limpia de Debian.
Responder
#6
(17-12-2019, 03:28 PM)Myszowor escribió:
(14-12-2019, 07:26 PM)Francisco escribió: El código parece correcto. Puede que tengas una versión antigua de Tk en tu Debian que no soporte estilos.

Saludos!
Muchas gracias Francisco. Pues nada. Va siendo hora de hacer una nueva instalación limpia de Debian.
Siento tardar en reabrir el tema, pero me ha costado encontrar la solución.
Al parecer es un problema de actualizar tk a la version 8.6.9.

Os remito a esta web https://bugs.python.org/issue36468 donde indican como solucionarlo. Al menos provisionalmente ya que espero que Tk los solucionen en un futuro. Mientras tanto si alguien tiene el mismo problema os dejo la solución aquí.

Así queda el código y funciona correctamente:

Código:
from tkinter import *

import tkinter as tk

from tkinter import ttk

from datetime import *

import time

import calendar



class Treeviewr:


    def __init__(self):


        # MAIN WINDOW



        self.root = Tk()

        self.root.title("PRUEBAS")

        self.root.geometry()



    # PANEL 1



        self.caj1 = ttk.Frame(self.root)

        self.caj1.grid(row=0, column=0)



    # PANEL 2



        self.caj2 = ttk.Frame(self.root)

        self.caj2.grid(row=1, column=1)



    #STYLES TREEVIEW



        self.styletree= ttk.Style()

        self.styletree.configure('T.Treeview')

        def fixed_map(option): # Esto justo antes del Treeview y funciona todo perfectamente.
             return [elm for elm in style.map('Treeview', query_opt=option) if elm[:2] != ('!disabled', '!selected')]

        style = ttk.Style()
        style.map('Treeview', foreground=fixed_map('foreground'), background=fixed_map('background'))

    # TREEVIEW



        self.info = ttk.Treeview(self.caj1, style='T.Treeview', columns=('col1', 'col2', 'col3', 'col4'))

        self.info.grid(row=0, column=0, ipadx=200)



        self.info.insert("", tk.END, text='Prueba0', values=('18', 'Juan'), tags=('prob',))

        self.info.insert("", tk.END, text='Prueba1', values=('20', 'Adrián'), tags=('prob',))

        self.info.insert("", tk.END, text='Prueba2', values=('23', 'Felipe', '3'), tags=('prob',))



        self.info.tag_configure('prob', background='black', foreground='red')





        self.info.heading("#0", text='COLUMNA1')

        self.info.heading('col1', text='COLUMNA2')

        self.info.heading('col2', text='COLUMNA3')

        self.info.heading('col3', text='COLUMNA4')

        self.info.heading('col4', text='COLUMNA5')

        self.info.column("#0", minwidth=0, width=5)

        self.info.column('col1', minwidth=25, stretch=0, anchor='center')

        self.info.column('col2', minwidth=25, stretch=0, anchor='center')

        self.info.column('col3', minwidth=25, stretch=0, anchor='center')

        self.info.column('col4', minwidth=25, stretch=0, anchor='center')



        self.root.mainloop()



def main():

my_app = Treeviewr()





if __name__ == '__main__':

main()
Responder
#7
Gracias por el aporte!

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


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)