es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma en Tkinter de alinear a la izquierda las pestañas de un Notebook?

Utilizo ttk.Notebook para crear diferentes pestañas. El notebook se coloca en el lado izquierdo.
Las etiquetas de las pestañas no deben estar alineadas a la derecha, sino a la izquierda.
¿Se puede configurar esto?

Pestañas alineadas a la derecha:

Código:

import tkinter as tk
from ttkthemes import ThemedTk
import tkinter.ttk  as ttk

class MyApp(ThemedTk):
    def __init__(self, theme="arc"):
        ThemedTk.__init__(self, fonts=True, themebg=True)
        self.set_theme(theme)

        self.style = ttk.Style()
        self.style.configure('lefttab.TNotebook', tabposition='wn')
        current_theme = self.style.theme_use()
        self.style.theme_settings(current_theme, {"TNotebook.Tab": {"configure": {'background':'white', "padding": [10, 8]}}})

        self.nb = ttk.Notebook(self, style='lefttab.TNotebook')
        self.nb.grid(row=0, column=0, sticky='w')

        self.page0 = ttk.Frame(self.nb, width=500, height=300)
        self.page1 = ttk.Frame(self.nb, width=500, height=300)
        self.page2 = ttk.Frame(self.nb, width=500, height=300)

        self.style.configure("TFrame", background='white')

        self.nb.add(self.page0, text='Allgemein', sticky="nsew")
        self.nb.add(self.page1, text='Wand leicht', sticky="nsew")
        self.nb.add(self.page2, text='Wand schwer', sticky="nsew")

        self.ok = ttk.Button(self.page1)
        self.ok["text"] = "Button"
        self.ok["command"] = self.handler
        self.ok.grid(row=0, column=0)

    def handler(self):
        print("Button clicked")

if __name__ == "__main__":
    app = MyApp()
    app.geometry("500x300")
    app.mainloop()

“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, las etiquetas en las pestañas se pueden configurar para alinearse a la izquierda en lugar de a la derecha utilizando la opción tabmargins en el estilo TNotebook.Tab, de esta manera:

    self.style.configure("lefttab.TNotebook.Tab",
                         background="white",
                         padding=[10, 8],
                         tabmargins=[0, 0, 0, 0],
                         )
    

    La opción tabmargins establece los márgenes para la etiqueta de la pestaña, de izquierda a derecha y de arriba a abajo, respectivamente. Al establecer todos los márgenes en 0, la etiqueta se alinea a la izquierda. El fragmento de código completo con esta modificación se muestra a continuación:

    import tkinter as tk
    from ttkthemes import ThemedTk
    import tkinter.ttk  as ttk
    
    class MyApp(ThemedTk):
        def __init__(self, theme="arc"):
            ThemedTk.__init__(self, fonts=True, themebg=True)
            self.set_theme(theme)
    
            self.style = ttk.Style()
            self.style.configure("lefttab.TNotebook", tabposition="wn")
            self.style.configure("lefttab.TNotebook.Tab",
                                 background="white",
                                 padding=[10, 8],
                                 tabmargins=[0, 0, 0, 0],
                                 )
    
            self.nb = ttk.Notebook(self, style="lefttab.TNotebook")
            self.nb.grid(row=0, column=0, sticky="w")
    
            self.page0 = ttk.Frame(self.nb, width=500, height=300)
            self.page1 = ttk.Frame(self.nb, width=500, height=300)
            self.page2 = ttk.Frame(self.nb, width=500, height=300)
    
            self.style.configure("TFrame", background="white")
    
            self.nb.add(self.page0, text="Allgemein", sticky="nsew")
            self.nb.add(self.page1, text="Wand leicht", sticky="nsew")
            self.nb.add(self.page2, text="Wand schwer", sticky="nsew")
    
            self.ok = ttk.Button(self.page1)
            self.ok["text"] = "Button"
            self.ok["command"] = self.handler
            self.ok.grid(row=0, column=0)
    
    
        def handler(self):
            print("Botón presionado")
    
    
    if __name__ == "__main__":
        app = MyApp()
        app.geometry("500x300")
        app.mainloop()
    

Comments are closed.