Mensajes: 64
Temas: 28
Registro en: Apr 2018
Reputación:
0
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
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
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
Mensajes: 108
Temas: 27
Registro en: Feb 2019
Reputación:
0
(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.
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
El código parece correcto. Puede que tengas una versión antigua de Tk en tu Debian que no soporte estilos.
Saludos!
Mensajes: 108
Temas: 27
Registro en: Feb 2019
Reputación:
0
(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.
Mensajes: 108
Temas: 27
Registro en: Feb 2019
Reputación:
0
(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()
Mensajes: 1.300
Temas: 3
Registro en: Feb 2016
Reputación:
71
Gracias por el aporte!
Saludos
|