Problème avec Tkinter : le style ne s'applique pas

Signaler
Messages postés
45
Date d'inscription
lundi 20 avril 2020
Statut
Membre
Dernière intervention
7 juillet 2021
-
 joieyeux -
Bonjour bonjour,
Je suis en train de créer un moteur 3D sur python, mais un truc me chiffonne avec l'interface.
J'utilise 2 fois des onglets à l'intérieur (des onglets principaux et des sous-onglets dans la barre d'action), mais comme la place leur étant dévolue n'est pas la même, j'utilise un style pour changer leur largeur. Problème, je n'arrive pas à faire s'appliquer le style à mes tabs.
(extrait du code)
fenetre = Tk()
fenetre.title("Moteur 3D : création et exploration")
fenetre.geometry("600x600")


style = ttk.Style(fenetre)
style.configure('W.Tab', width=100)


Conteneur_tabs = ttk.Notebook(fenetre)
Crea = ttk.Frame(Conteneur_tabs, style='W.Tab')
Conteneur_tabs.add(Crea, text='Création')
Visu = ttk.Frame(Conteneur_tabs, style='W.Tab')
Conteneur_tabs.add(Visu, text='Visualisation')
Aide = ttk.Frame(Conteneur_tabs, style='W.Tab')
Conteneur_tabs.add(Aide, text='Aide et développement')
Conteneur_tabs.pack(expand=1, fill="both")


Les onglets sont ratatinés car il n'obtiennent pas la bonne largeur.
Par contre, quand je remplace "W.Tab" par "Tab", mes autres onglets sont impactés aussi !
Comment régler ce problème ?

Merci sincèrement pour votre aide !

1 réponse

Bonsoir,

Perso, je n'ai rien compris, si l'objectif est de faire que tes 3 onglets occupent la largeur totale du notebook en 3 parts de largeurs égales, cela n'a pas l'air possible.

Un simple
print(Conteneur_tabs.tab(0))
confirme cela en montrant quelles sont les options des onglets.

{'padding': ['10i', '30i'], 'sticky': 'ew', 'state': 'normal', 'text': 'Création', 'image': '', 'compound': 'none', 'underline': -1}


Ce qui est également confirmé dans la doc :
https://www.tcl.tk/man/tcl8.5/TkCmd/ttk_notebook.html

Dans ton code, tu n'appliques pas ton style aux onglets, mais aux Frames, forcément ça ne fonctionne pas, et comme dit précédemment, les onglets ont très peu d'options.

Si tu as vraiment nécessité absolue de faire que ces 3 onglets occupent toute la largeur disponible, il va falloir que tu crées toi-même ton propre Notebook, ça ne doit pas être bien compliqué à faire, après tout, label + frame + text (enfin un mix de plusieurs widgets) devrait produire un peu la même chose
ttk, c'est sympa, mais ça reste très limité dès lors où on a besoin de faire des choses un peu plus complexe.