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 :

switcher d'une frame à une autre


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Août 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2015
    Messages : 4
    Par défaut switcher d'une frame à une autre
    Bonjour,

    Je découvre les joies de tkinter. C'est génial mais...

    J'aimerais savoir comment passer d'une frame à l'autre. Il me semblait que tkraise() était la solution. Malheureusement il ne se passe rien.

    J'ai mon code simplifié. Par défaut l'objet frame frame_mode_1 est utilisé, mais je voudrais que lorsque j'appui sur le bouton go, on switch sur frame_mode_2. C'est possible?

    Avez-vous une idée?

    Merci à vous

    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
     
     
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    #
    import Tkinter as tk
     
    class Frame_mode_1(tk.Frame):
     
      def __init__(self,master):
     
        tk.Frame.__init__(self,master)
     
        self.txt   = tk.Label(self, text = 'FRAME MODE 1',width=25)
        self.txt.pack()
     
    class Frame_mode_2(tk.Frame):
     
      def __init__(self,master):
     
        tk.Frame.__init__(self,master)
     
        self.txt   = tk.Label(self, text = 'FRAME MODE 2',width=25)
        self.txt.pack()
     
    class simpleapp_tk(tk.Tk):
     
      #constructor
      def __init__(self,parent):
     
        tk.Tk.__init__(self,parent)
        self.parent = parent
     
        self.mode = tk.IntVar()
        self.mode.set(0)
     
        self.initialize()
     
      def initialize(self):    
     
        self.Frame_b = tk.Frame(self,borderwidth=0,width=800,height=200)
        self.Frame_b.pack(side=tk.BOTTOM)
     
        self.Frame_1 = Frame_mode_1(self)
        self.Frame_2 = Frame_mode_2(self)
        self.Frame_main = self.Frame_1
        self.Frame_main.pack()
     
        self.b_launch = tk.Button(self.Frame_b,text='Go',width = 25,command=self.calculations)
        self.b_launch.pack()
        self.b_quit   = tk.Button(self.Frame_b,text='Quit',width = 25,command=self.close_windows)
        self.b_quit.pack()
     
      def close_windows(self):
        self.destroy()
     
      def calculations(self):
        self.Frame_main = self.Frame_2
        self.Frame_main.tkraise()
        print 'Go'
     
    ###############################################################
     
    ###############################################################
     
    ###############################################################
     
    if __name__ == "__main__":
     
        app = simpleapp_tk(None)
        app.title('test')
        app.mainloop()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Citation Envoyé par halleck314 Voir le message
    J'aimerais savoir comment passer d'une frame à l'autre. Il me semblait que tkraise() était la solution. Malheureusement il ne se passe rien.
    "raise" permet de placer "devant" (ou au-dessus) un widget qui serait masqué par un autre.
    On pourrait avoir ce cas là en affichant les deux widgets avec .place (à la même position par exemple).

    Un gestionnaire de géométrie comme "pack" essaie de "disposer" les widgets pour qu'ils apparaissent tous complètement. Impossible de dire affiche celui là au dessus de...

    Citation Envoyé par halleck314 Voir le message
    Par défaut l'objet frame frame_mode_1 est utilisé, mais je voudrais que lorsque j'appui sur le bouton go, on switch sur frame_mode_2. C'est possible?
    Si on affiche un widget avec .pack, on peut le "masquer" avec .pack_forget() et faire .pack() d'un autre widget.
    Le soucis sera de gérer la séquence a.pack(), b.pack(), on aura "ab". a.pack_forget(), on n'aura plus que "b". c.pack() affichera "bc" et non "cb".
    Vous avez des "options" dans la commande .pack pour dire "avant" ou "après" b.
    Ou plus simple, utilisez .grid/.grid_forget: dans ce cas vous précisez la "case" où afficher le widget.

    Donc c'est possible et vous avez autant de solutions que de "geometry managers" qu'il faut un minimum connaître (cliquez sur les URL données dans le texte).

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Doctorant
    Inscrit en
    Août 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2015
    Messages : 4
    Par défaut
    C'est parfait, une séquence .pack_forget() puis .pack() pourrait suffire pour le moment.

    Il faudra que j'essaie avec grid car ça à l'air effectivement assez puissant.

    "raise" permet de placer "devant" (ou au-dessus) un widget qui serait masqué par un autre.
    Je comprend mieux. Merci beaucoup.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/08/2016, 11h40
  2. exécuter dans une frame une fonction js
    Par laurentSc dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 20/03/2011, 15h19
  3. Réponses: 21
    Dernier message: 20/09/2009, 10h50
  4. Envoi de variable d'une Frame à une autre
    Par CYCLOPE91440 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 02/02/2007, 19h37
  5. Passage d'une frame à l'autre
    Par souliersantoine dans le forum wxPython
    Réponses: 4
    Dernier message: 03/08/2006, 10h54

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