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

Tkinter Python Discussion :

Tkinter, Tix et NoteBook


Sujet :

Tkinter Python

  1. #1
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut Tkinter, Tix et NoteBook
    Je suis un peu dépité devant le peu d'exemples concrets qu'on trouve sur internet à propos de Tix, qui contient malgré tout de chouettes améliorations qui manquent à Tkinter.

    J'essaie donc de comprendre le widget NoteBook de Tix, et j'ai fait cet essai :

    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
    # -*- coding:utf-8 -*-
    import Tix
    import Tkinter as Tk
     
    root = Tix.Tk()
    root.geometry("600x400")
     
    nb = Tix.NoteBook(root)
    nb.add("page1", label="Onglet un")
    nb.add("page2", label="Onglet deux")
    nb.add("page3", label="Onglet trois")
    nb.add("page4", label="C'est la fête")
     
    p1 = nb.subwidget_list["page1"]
    p2 = nb.subwidget_list["page2"]
    p3 = nb.subwidget_list["page3"]
    p4 = nb.subwidget_list["page4"]
     
    cv1 = Tk.Canvas(p1, bg="tan")
    cv2 = Tk.Canvas(p2, bg="white")
    cv3 = Tk.Canvas(p3, bg="yellow")
    fra4 = Tk.Frame(p4)
     
    lab1 = Tk.Label(fra4, text="Label un")
    lab2 = Tk.Label(fra4, text="Label deux")
    lab3 = Tk.Label(fra4, text="Label trois")
    lab4 = Tk.Label(fra4, text="Label quatre")
     
    lab1.grid(row=0, column=0)
    lab2.grid(row=0, column=1)
    lab3.grid(row=1, column=0)
    lab4.grid(row=1, column=1)
     
    nb.pack(fill=Tix.BOTH, expand=1, padx=5, pady=5)
     
    cv1.pack(expand=1, fill=Tix.BOTH)
    cv2.pack(expand=1, fill=Tix.BOTH)
    cv3.pack(expand=1, fill=Tix.BOTH)
     
    root.mainloop()
    Deux questions :

    1) suis-je toujours obligé d'utiliser cette forme d'importation de Tix ? Qui m'oblige à toujours taper Tk.* devant l'instantiation d'un widget Tkinter, exemple : cv1 = Tk.Canvas(p1, bg="tan") . Ceci est assez embêtant, car quand je récupère d'autres bout de mes codes contenant du Tkinter, je suis obligé de rajouter ce petit suffixe embêtant...

    2) Pourquoi mes 4 labels que je décide de mettre dans la Frame fra4 avec le GridManager Grid ne s'affichent-ils pas dans le 4ème onglet ?

    Attention : ne me dites pas qu'on ne peut pas mélanger pack et grid dans une même application, car ceci n'est pas vrai (cf littérature "Tkinter programming" chez Manning)... C'est seulement au sein d'un même conteneur X qu'on doit rester dans le même GridManager pour placer tous les enfants directs de X...

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour calogerogigante,

    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
    # -*- coding:utf-8 -*-
    import Tix
    from Tkinter import *
     
    root = Tix.Tk()
    root.geometry("600x400")
     
    nb = Tix.NoteBook(root)
    nb.add("page1", label="Onglet un")
    nb.add("page2", label="Onglet deux")
    nb.add("page3", label="Onglet trois")
    nb.add("page4", label="C'est la fête")
     
    p1 = nb.subwidget_list["page1"]
    p2 = nb.subwidget_list["page2"]
    p3 = nb.subwidget_list["page3"]
    p4 = nb.subwidget_list["page4"]
     
    cv1 = Canvas(p1, bg="tan")
    cv2 = Canvas(p2, bg="white")
    cv3 = Canvas(p3, bg="yellow")
    fra4 = Frame(p4)
    fra4.pack()
     
    lab1 = Label(fra4, text="Label un")
    lab2 = Label(fra4, text="Label deux")
    lab3 = Label(fra4, text="Label trois")
    lab4 = Label(fra4, text="Label quatre")
     
    lab1.grid(row=0, column=0)
    lab2.grid(row=0, column=1)
    lab3.grid(row=1, column=0)
    lab4.grid(row=1, column=1)
     
    nb.pack(fill=Tix.BOTH, expand=1, padx=5, pady=5)
     
    cv1.pack(expand=1, fill=Tix.BOTH)
    cv2.pack(expand=1, fill=Tix.BOTH)
    cv3.pack(expand=1, fill=Tix.BOTH)
     
    root.mainloop()
    Pour ce qui est du Tk. je ne vois pas de contre indication puisque les widgets n'ont pas le même nom.
    De plus si tu regarde Tix.py tu trouve from Tkinter import *

    @+
    Merci d'utiliser le forum pour les questions techniques.

  3. #3
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Merci pour ta réponse, PauseKawa... Ce que tu proposes fonctionne parfaitement mais me laisse perplexe quand à ce que je croyais piger de pack()...

    J'ai pas beaucoup le temps maintenant, mais je reviens dans qques jours pour t'expliquer ce que ta réponse m'induit comme réflexion à ce propos...

  4. #4
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Bon, je viens de trouver le temps de terminer mes petits chipotages avec le notebook de Tix. J'ai essayé de faire une interface mélangeant Tix et Tkinter. Voici ce que cela donne :



    Le code de ce notebook suit ci-dessous.

    Ce que j'ai fait, c'est que j'ai relevé par des commentaires les widgets installés de manière traditionnelle avec Tkinter, et j'ai relevé dans d'autres commentaires ce qui est relatif au fait qu'on intègre un widget venant de Tix.

    Une autre particularité remarquée, suite à la question initiale que j'ai posée dans ce fil de discussion, c'est que le premier conteneur qui est placé dans un onglet du notebook doit absolument être placé avec Pack() (merci pausekawa). Pour les enfants directs de ce conteneur, on peut de nouveau choisir un autre Geometry Manager...

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    # -*- coding:utf-8 -*-
    import Tix
     
    # la ligne suivante est indispensable même si Tix l'importe également !!!
    from Tkinter import *
     
    # création de la fenêtre principale : pas comme avec Tkinter, car root = Tix.Tk()
    root = Tix.Tk()
    root.geometry("800x600")
     
    # création d'un menu (à la manière de Tkinter : ok)
    barredemenu = Menu(root)
    root.config(menu=barredemenu)
    menu1 = Menu(barredemenu, tearoff=0)
    barredemenu.add_cascade(label="Programme", menu=menu1)
    menu1.add_command(label="Quitter")
     
    # création de deux frames à gauche et en bas (à la manière de Tkinter : ok)
    frame_lateral = Frame(root, bg="red", width=150)
    frame_en_bas = Frame(root, bg="green", height=150)
     
    # création du notebook : à la manière de Tix, et c'est normal :
    monnotebook = Tix.NoteBook(root)
    monnotebook.add("page1", label="Onglet un")
    monnotebook.add("page2", label="Onglet deux")
    monnotebook.add("page3", label="Onglet trois")
    monnotebook.add("page4", label="C'est la fête")
     
    p1 = monnotebook.subwidget_list["page1"]
    p2 = monnotebook.subwidget_list["page2"]
    p3 = monnotebook.subwidget_list["page3"]
    p4 = monnotebook.subwidget_list["page4"]
     
    cv1 = Canvas(p1, bg="tan")
    cv2 = Canvas(p2, bg="white")
    cv3 = Canvas(p3, bg="yellow")
    fra4 = Frame(p4)
     
    # il semble que les premiers conteneurs qui sont placé dans un onglet DOIVENT
    # être positionné avec pack()
    cv1.pack(expand=1, fill=Tix.BOTH)
    cv2.pack(expand=1, fill=Tix.BOTH)
    cv3.pack(expand=1, fill=Tix.BOTH)
    fra4.pack()
     
    # créons deux sous-frames qui seront mis DANS fra4
    # cela se fait à la manière de Tkinter : ok !
    sous_fra1 = Frame(fra4, bg="black", width=200, height=300)
    sous_fra1.grid(row=0, column=0)
     
    sous_fra2 = Frame(fra4, bg="tan")
    sous_fra2.grid(row=0, column=1)
     
    # les enfants du sous-frame sous_fra2 sont placé à la manière de Tkinter : ok
    lab1 = Label(sous_fra2, text="Label un", bg="tan")
    lab2 = Label(sous_fra2, text="Label deux", bg="tan")
    lab3 = Label(sous_fra2, text="Label trois", bg="tan")
    lab4 = Label(sous_fra2, text="Label quatre", bg="tan")
    ent1 = Entry(sous_fra2)
    ent2 = Entry(sous_fra2)
    ent3 = Entry(sous_fra2)
    ent4 = Entry(sous_fra2)
     
    lab1.grid(row=0, column=0, padx=5, pady=5)
    lab2.grid(row=1, column=0, padx=5, pady=5)
    lab3.grid(row=2, column=0, padx=5, pady=5)
    lab4.grid(row=3, column=0, padx=5, pady=5)
    ent1.grid(row=0, column=1, padx=5, pady=5)
    ent2.grid(row=1, column=1, padx=5, pady=5)
    ent3.grid(row=2, column=1, padx=5, pady=5)
    ent4.grid(row=3, column=1, padx=5, pady=5)
     
    # les frames latéral et du bas sont placés à la manière de Tkinter : ok
    frame_en_bas.pack(side=BOTTOM, fill=X)
    frame_lateral.pack(side=LEFT, fill=Y)
    # le frame contenant le notebook est placé avec Tix : cf le "fill=Tix.BOTH"
    monnotebook.pack(side=LEFT, fill=Tix.BOTH, expand=1, padx=5, pady=5)
     
    root.mainloop()
    L'intégration d'un widget de Tix me semble bizarre, mais bon, c'est résolu, je crois que je vais pouvoir utiliser et intégrer le notebook de Tix dans mes prochaines petites applications, puisque l'impact sur le reste du code est minime (cf root = Tix.Tk() au lieu de root=Tk() )

    Je mets ce post en résolu...

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour calogerogigante,

    Citation Envoyé par calogerogigante Voir le message
    L'intégration d'un widget de Tix me semble bizarre, mais bon, c'est résolu
    Pourquoi ? Du moment que Tix utilise Tkinter.

    Ceci dit, merci.
    Personnellement je suis obligé de me restreindre strictement à Tkinter (Serveurs Linux avec le strict minimum) et le NoteBook Tix m'intéresse franchement dans le cadre d'un ancien projet (Un gestionnaire de fichier sécurisé avec des onglets pour aller du home de l'utilisateur au dossier de partage). Du coup je regarde à en faire une classe pour y mettre mes canvas.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  6. #6
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Citation Envoyé par PauseKawa Voir le message
    Pourquoi ? Du moment que Tix utilise Tkinter.
    Ben ce que je ne comprends pas, dans le mini programme que j'ai mis ci-dessus : pourquoi dois-je quand même mettre cette ligne :
    from Tkinter import *

    alors que Tix le fait préalablement ?

    Pas grave en tout cas, c'est des détails...

    Par contre, je cherche maintenant comment changer la police du label des onglets, car elle semble différente de la police system utilisé dans les widgets tkinter... Et c'est pas zoli quand c'est pas partout la même chose...

  7. #7
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Normal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> from Tix import *
    >>> f = Frame()
    >>> c = Canvas(f)
    Edit pour explication

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> from Tix import *
    >>> f = Frame()
    >>> f
    <Tkinter.Frame instance at 0xb7d0d50c>
    >>>
    Merci d'utiliser le forum pour les questions techniques.

  8. #8
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Janvier 2012
    Messages : 50
    Points : 45
    Points
    45
    Par défaut question
    et comment on fait pour modifier la couleur de font ou meme la police des onglets
    dans votre exemple les onglet sont :onglet un onglet deux etc....

  9. #9
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir houma2001,

    Ne pensez vous pas que cela ne correspond pas à la question d'origine ?
    Créez un sujet et c'est avec plaisir que nous vous répondrons.

    A très bientôt
    Merci d'utiliser le forum pour les questions techniques.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tix (Tkinter)
    Par forum dans le forum Téléchargez
    Réponses: 0
    Dernier message: 08/07/2011, 11h48
  2. Tkinter et Tix
    Par sasuk dans le forum Tkinter
    Réponses: 0
    Dernier message: 02/11/2009, 17h39
  3. Utilisé Tix dans une fenêtre crée avec Tkinter
    Par Jiyuu dans le forum Tkinter
    Réponses: 4
    Dernier message: 07/02/2008, 17h45
  4. [Tkinter - Tix] Maximize
    Par airod dans le forum Tkinter
    Réponses: 4
    Dernier message: 26/08/2006, 12h12
  5. [Tix] changer la page visualisée d'un notebook
    Par Guigui_ dans le forum Tkinter
    Réponses: 2
    Dernier message: 24/01/2006, 13h01

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