Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Seleccionar ítem de treeview
#1
Buenas, comunidad. Estoy teniendo inconvenientes al seleccionar un ítem de un treeview y creo que todo pasa por el estilo.

El código de la vista es el siguiente:

Código:
import tkinter
from tkinter import ttk

import modelo


root=tkinter.Tk()
root.geometry("1200x660")

style = ttk.Style()
settings = {"TNotebook.Tab": {"configure": {"padding": [5, 1],
                                            "background": "deep pink"   
                                           },
                              "map": {"background": [("selected", "pink"),
                                                     ("active", "hot pink")],
                                      "foreground": [("selected", "gray26"),
                                                     ("active", "#ffffff")],
                                     }
                              }
           }

style.theme_create("mi_estilo", parent="alt", settings=settings)
style.theme_use("mi_estilo")

hojas = ttk.Notebook(root)
hojas.pack(fill="both", expand="yes")

pesta0 = tkinter.Frame(hojas, background="pink")

hojas.add(pesta0, text="Catálogo")

tree = ttk.Treeview(pesta0)
tree["columns"] = ("col1", "col2", "col3", "col4", "col5")

tree.column("#0", width=40)
tree.column("#1", width=420, anchor="center")
tree.column("#2", width=300, anchor="center")
tree.column("#3", width=250, anchor="center")
tree.column("#4", width=95, anchor="center")
tree.column("#5", width=65, anchor="center")


tree.heading("#0", text="Id #", anchor="center")
tree.heading("#1", text="COSA1", anchor="center")
tree.heading("#2", text="COSA2", anchor="center")
tree.heading("#3", text="COSA3", anchor="center")
tree.heading("#4", text="COSA4", anchor="center")
tree.heading("#5", text="COSA5", anchor="center")

tree.place(x=10, y=400, height=100)

consxest = tkinter.Button(pesta0, text="Estado", background="light pink", foreground="DeepPink4", font=("Courier", 11, "bold"), command= lambda: modelo.consxestado(tree))
consxest.place(x=240, y=270)

root.mainloop()

 Y el código del modelo es:
Código:
def consxestado(tree):
    tree.insert("", "end", text="0", values=("1", "2", "3", "4", "5"))
    tree.insert("", "end", text="6", values=("7", "8", "9", "10", "11"))


Me he dado cuenta que si comento la línea style.theme_use("mi_estilo") pierdo los estilos pero puedo seleccionar ítems del treeview. En cambio si la dejo tal y como está, no puedo.
Y no sé cómo solucionarlo. Espero me ayuden.
Gracias.
Responder
#2
Buenas, Diego.

Parecer ser algún problema con el estilo padre "alt". ¿Probaste con otro?

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
He probado con clam, classic, default, vista,  winnative,  xpnative que son los  built-in que saqué de aquí:  List of ttk Themes (tcl-lang.org).
Algunos modifican algo del diseño, otros nada, pero ninguno de ellos me permite seleccionar un elemento del tree.
Responder
#4
Se ve que hay algún problema al usar theme_create(). ¿Por qué no configurás directamente el estilo actual en lugar de crear uno nuevo?

Código:
root=tkinter.Tk()
root.geometry("1200x660")

style = ttk.Style()
style.configure("TNotebook.Tab", **{"padding": [5, 1],
                                    "background": "deep pink"})
style.map("TNotebook.Tab", **{"background": [("selected", "pink"),
                                             ("active", "hot pink")],
                              "foreground": [("selected", "gray26"),
                                             ("active", "#ffffff")]})
¡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
Intenté configurarlo pero no logro darle color a las pestañas sin crear un tema nuevo. Un intríngulis.
Responder
#6
(19-07-2023, 07:07 PM)Diego escribió: Intenté configurarlo pero no logro darle color a las pestañas sin crear un tema nuevo. Un intríngulis.

¿Que sistema operativo estás usando?.

Te comento que a mí, el diseño de los treeview me dió problemas en debian.(No me dejaba seleccionar un tema para el treeview. Ni fondo, ni estilo de letra etc etc. Encontré esta solución en internet. No sé si te servirá de algo.


def fixed_map(option):
     return [elm for elm in style.map('Treeview', query_opt=option) if elm[:2] != ('!disabled', '!selected')]


Poniendo esa función delante de cada treeview(Por desgracia no había otra forma) pude configurrar el treeview a mi gusto y seleccionar sin problemas.
Responder
#7
(24-08-2023, 07:27 AM)Myszowor escribió:
(19-07-2023, 07:07 PM)Diego escribió: Intenté configurarlo pero no logro darle color a las pestañas sin crear un tema nuevo. Un intríngulis.

¿Que sistema operativo estás usando?.

Te comento que a mí, el diseño de los treeview me dió problemas en debian.(No me dejaba seleccionar un tema para el treeview. Ni fondo, ni estilo de letra etc etc. Encontré esta solución en internet. No sé si te servirá de algo.


def fixed_map(option):
     return [elm for elm in style.map('Treeview', query_opt=option) if elm[:2] != ('!disabled', '!selected')]


Poniendo esa función delante de cada treeview(Por desgracia no había otra forma) pude configurrar el treeview a mi gusto y seleccionar sin problemas.

Estoy usando Windows. Voy a ver de probar esa función que dices. Gracias.
Responder
#8
(29-08-2023, 12:36 PM)Diego escribió:
(24-08-2023, 07:27 AM)Myszowor escribió:
(19-07-2023, 07:07 PM)Diego escribió: Intenté configurarlo pero no logro darle color a las pestañas sin crear un tema nuevo. Un intríngulis.

¿Que sistema operativo estás usando?.

Te comento que a mí, el diseño de los treeview me dió problemas en debian.(No me dejaba seleccionar un tema para el treeview. Ni fondo, ni estilo de letra etc etc. Encontré esta solución en internet. No sé si te servirá de algo.


def fixed_map(option):
     return [elm for elm in style.map('Treeview', query_opt=option) if elm[:2] != ('!disabled', '!selected')]


Poniendo esa función delante de cada treeview(Por desgracia no había otra forma) pude configurrar el treeview a mi gusto y seleccionar sin problemas.

Estoy usando Windows. Voy a ver de probar esa función que dices. Gracias.

Ostras, perdona pero no te envié la formula completa. Faltaban dos cosas joer joer.
La fórmula completa es esta:

def fixed_map(option):
      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'))
Responder


Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)