IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GUI Python Discussion :

tkinter taille diférentes pour chaque onglet du notebook


Sujet :

GUI Python

  1. #1
    Membre averti
    Homme Profil pro
    manutentionnaire
    Inscrit en
    Décembre 2020
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : manutentionnaire

    Informations forums :
    Inscription : Décembre 2020
    Messages : 31
    Par défaut tkinter taille diférentes pour chaque onglet du notebook
    bonjour,

    après plusieurs tentatives infructueuse, pour obtenir des onglets à tailles différentes d'un notebook, j'ai besoin d'aide.
    j'ai trouvez ceci écrit avec un classe.
    Ne connaissant pas les classes, je souhaite l'écriture simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
     
    # coding:utf-8
    #version 3.x python
     
    from tkinter import *
    import tkinter as tk
    from tkinter import ttk
     
    # ==================================================
    #                                  Fenêtre Principal - Configuration
    # ==================================================
    root = tk.Tk()                                                                                                    # Crée une instance Tk class
    root.title("GUI")
    root.resizable(False, False)                                                                                 # Fenêtre verrouillée
     
    window_height = 800
    window_width = 1200
     
    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()
     
    x_cordinate = int((screen_width/2) - (window_width/2))
    y_cordinate = int((screen_height/2) - (window_height/2))
     
    root.geometry("{}x{}+{}+{}".format(window_width, window_height, x_cordinate, y_cordinate))
     
    # ==================================================
    #                                  Frames
    # ==================================================
     
    # --- Frame gauche ---
    RightFrame = tk.LabelFrame(root, text="[TEXTE]", font=('verdana', 8, ''), foreground="blue", relief=SOLID, borderwidth=0)
    RightFrame.place(x=130, y=5, width=900, height=900)
    RightFrame.anchor(anchor="center")
     
    # Notebook
    style = ttk.Style(RightFrame)
    style.configure("PositionOnglet.TNotebook", tabposition="nw")
     
    def AutoRisze(notebook):
        print("OK", notebook.winfo_children())
     
        def tab_changed(event):
            print("----------")
            event.widget.update_idletasks()
     
            tab = event.widget.nametowidget(event.widget.select())
            event.widget.configure(height=tab.winfo_reqheight())
     
        notebook.bind("<<NotebookTabChanged>>", lambda event: tab_changed(event))
     
    notebook = ttk.Notebook(RightFrame, style="PositionOnglet.TNotebook")               # Création du système d'onglets
     
    NB1 = AutoRisze(RightFrame)
     
    notebook.add(Frame(NB1, width=400, height=200, name="a"),text="++++++++")
    notebook.add(Frame(NB1, width=200, height=400, name="b"),text="-----------")
     
    notebook.place(x=5, y=5)
     
    root.mainloop()
    merci pour l'aide

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Salut,

    Pour faire la chose sans classes, çà pourrait donner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    from tkinter.ttk import Notebook
     
    def _on_tab_changed(event):
        nb = event.widget
        nb.update_idletasks()
     
        tab = nb.nametowidget(nb.select())
        nb.configure(height=tab.winfo_reqheight())
     
    def create_notebook(master=None, **kw):
     
        nb = Notebook(master, **kw)
        nb.bind("<<NotebookTabChanged>>", _on_tab_changed)
        return nb 
     
    if __name__== "__main__":
        from tkinter import Frame, Tk
        root = Tk()      
     
        notebook = create_notebook(root)    
        notebook.add(Frame(notebook, width=400, height=200, name="a"),text="TAB 1")
        notebook.add(Frame(notebook, width=400, height=300, name="b"),text="TAB 2")
        notebook.add(Frame(notebook, width=400, height=100, name="c"),text="TAB 3")
     
        notebook.pack()
    Votre code n'a pas que ce problème, mais je ne vais pas le corriger.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Homme Profil pro
    manutentionnaire
    Inscrit en
    Décembre 2020
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : manutentionnaire

    Informations forums :
    Inscription : Décembre 2020
    Messages : 31
    Par défaut
    bonjour,

    pour ajouter un widget tel un Label, faut-il le faire comme ceci? en identifiant par winfo_children puis ajouter les widgets désirés dans cette fonction?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    def _on_tab_changed(event):
    	nb = event.widget
    	nb.update_idletasks()
    	print("nb", nb)
    	print(nb.winfo_children())
     
    	tab = nb.nametowidget(nb.select())
    	print("tab", tab)																								# ex : .!labelframe.!notebook.a   --  .!labelframe.!notebook.b  --  .!labelframe.!notebook.c
    	nb.configure(height=tab.winfo_reqheight())
     
    	lb = tk.Label(nb.winfo_children()[0], text="LABEL_TAB0")
    	lb.place(x=20, y=20)
     
    	lb = tk.Label(nb.winfo_children()[1], text="LABEL_TAB1")
    	lb.place(x=60, y=20)

    merci

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Salut,

    Citation Envoyé par LS_Soleil Voir le message
    pour ajouter un widget tel un Label, faut-il le faire comme ceci? en identifiant par winfo_children puis ajouter les widgets désirés dans cette fonction?
    Le notebook affiche des tabs qui peuvent être "Frame" et contenir/afficher ce que vous voulez (ou d'autres widgets).

    Naviguer/identifier dans les différents "tabs" d'un notebook est un sujet (voir la documentation du Notebook)
    Comment faire avec le widget associé au tabs en est un autre.

    Eviter de mélanger les 2...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre averti
    Homme Profil pro
    manutentionnaire
    Inscrit en
    Décembre 2020
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : manutentionnaire

    Informations forums :
    Inscription : Décembre 2020
    Messages : 31
    Par défaut
    donc comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    # --- Frame gauche ---
    RightFrame = tk.LabelFrame(root, text="[TEXTE]", font=('verdana', 8, ''), foreground="blue", relief=SOLID, borderwidth=1)
    RightFrame.place(x=130, y=5, width=900, height=900)
    RightFrame.anchor(anchor="center")
     
    # Notebook
    notebook = Create_notebook(RightFrame)
    notebook.add(Frame(notebook, width=400, height=40, name="a"), text="TAB1")
    notebook.add(Frame(notebook, width=400, height=60, name="b"), text="TAB2")
    notebook.add(Frame(notebook, width=400, height=80, name="c"), text="TAB3")
    notebook.place(x=5, y=5)
     
    lb = tk.Label(notebook.winfo_children()[0], text="LABEL_TAB1")
    lb.place(x=20, y=20)
     
    lb = tk.Label(notebook.winfo_children()[1], text="LABEL_TAB2")
    lb.place(x=20, y=40)
     
    lb = tk.Label(notebook.winfo_children()[2], text="LABEL_TAB3")
    lb.place(x=20, y=60)

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Citation Envoyé par LS_Soleil Voir le message
    donc comme ceci

    Créer une Frame pour en faire un tabs d'un notebook, peut se faire avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          notebook.add(Frame(notebook, width=400, height=40, name="a"), text="TAB1")
    Si vous devez accèder ensuite à la Frame, soit vous vous débrouillez avec le notebook soit vous créez une variable qui permettra d'avoir votre chemin à vous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        frame_a = Frame(notebook, width=400, height=40, name="a")
        notebook.add(frame_a, text="TAB1")
    Il n'y a pas une solution mais des solutions plus ou moins adaptées à ce que vous cherchez à faire...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. ECLIPSE RCP : Régler une taille minimum pour les onglets
    Par JM12345 dans le forum Eclipse Platform
    Réponses: 0
    Dernier message: 07/08/2009, 10h13
  2. créer des groupes de lignes pour chaque onglet de façon automatique
    Par cindy1808 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/07/2009, 19h50
  3. [VB.NET] Taille differente pour chaque colonne dans DATAGRID
    Par stephane93fr dans le forum Windows Forms
    Réponses: 14
    Dernier message: 12/01/2005, 16h50
  4. Réponses: 3
    Dernier message: 23/01/2004, 21h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo