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 :

Jouer avec les fenetres Tkinter [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Points : 130
    Points
    130
    Par défaut Jouer avec les fenetres Tkinter
    Bonjour,

    Je suis sur un programme qui me pose un certain nombres de problème et quand j'en résous un, un autre apparait..
    Je vous expliques : J'ai une fenetre de base avec un bouton qui lance une deuxieme fenetre avec une scrollbar et des chackbuton. Sur la deuxieme fenetre il y a un autre bouton qui commande la récupération des checkbuton, ferme cette fenetre et je voudrais continuer sur la premiere fenetre (où j'y rajouterai d'autres choses).
    L'erreur que j'ai ici (à ce stade) est qu'il me dit qu'un Tk() n'est pas callable par une fonction et ca m'embete...
    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
    import tkinter as tk
    column=[['', '', 'Vh inf', 'Vh inf avec insert surmoule', 'Vh inf avec joint', 'Vh inf avec insert surmoule visible']] # un exemple de liste que je peux utiliser
     
     
     
    def checkbox_get():
        global checklist                                                                                        #Globalise la liste checklist pour ne pas la mettre en argument pour le bouton
        checklist=[]
        for i in range(2,len(column[0])):
            print(globals()['var%s' % i].get())
            checklist.append(globals()['var%s' % i].get())                                                      #récupere les variable 0 ou 1 si la case est coché de toutes les variables
        fenetre.destroy()                                                                                       #ferme la fenetre
        fenetre_principale()
        return checklist
     
     
     
     
    def main():                                                                                                #Le main pour le VH inf pour l'instant qui permettera de choisir dans la liste.
        fenetre_principale.destroy()
        global fenetre,column                                                                                          #Permet de globaliser la fenetre pour l'utiliser dans la fonction checkbox_get sans la mettre en argument
        #sheet_function(i)                                                                                       #Instore la lecture dans la feuille 'i'
        #lire_colone(sheet, column,i)                                                                            #lis les valeurs de la colonne 'i'
        x=len(column[0])
        fenetre = tk.Tk()                                                                                       #Initialise la fenetre
        Frame1 = tk.Frame(fenetre)                                                                              #Instore 2 frame une pour la scrollbar et l'autre pour le bouton Lancer (get des value)
        Frame1.pack(side="left")
        Frame2 = tk.Frame(fenetre)
        Frame2.pack(side="right")
        vsb=tk.Scrollbar(Frame1,orient="vertical")                                                              #La scrollbar
        text=tk.Text(Frame1,width=40, height=20, yscrollcommand=vsb.set)                                        #Pour que les textes suivent la ScrollBar
        vsb.config(command=text.yview)
        vsb.pack(side="right", fill="y")
        text.pack(side="left", fill="both", expand=True)
        for i in range(2,len(column[0])):                                                                       #création des CheckButtons dans la ScrollBat
            globals()['var%s' % i]=tk.IntVar()                                                                  #créé une variable pour chaques i, ex : var2,var3,var4 ect ...
            bg = 'grey'
            if i % 2 == 0:
                bg='white'
            cb=tk.Checkbutton(Frame1,text=column[0][i],bg=bg,variable=globals()['var%s' % i])
            text.window_create("end", window=cb)
            text.insert("end", "\n")                                                                            #Pour avoir une CheckButton par ligne '\n'
        tk.Button(Frame2, text="Valider", command=checkbox_get).pack()                                          #Bouton avec la commande de get des checkbuttons
        fenetre.mainloop()
     
    def fenetre_principale():
        global fenetre_principale
        fenetre_principale=tk.Tk()
        tk.Button(fenetre_principale, text="Vh inf", command=main).pack()
        fenetre_principale.mainloop()
    Je vais me débrouiller pour que vous puissiez le faire tourner (je travails avec des tableurs excels)
    Merci d'avance.
    PS : excusez moi d'avance si il y a des fautes d'orthographes
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Il faut faire la différence et apprendre à utiliser Tk(), Toplevel() et Frame().
    Normalement, vous devez avoir un seul Tk() dans votre application: c'est la fenêtre principale. Lorsque vous la détruisez, votre application se termine. Toplevel permet de créer une fenêtre secondaire.
    Frame est un conteneur de widgets: il se place dans la fenêtre principale ou dans une fenêtre secondaire.

    Dans votre application, plutôt que de faire fenetre.destroy() pour vider la fenêtre principale, vous créez une Frame, vous placez des widgets dedans et si vous voulez tout détruire pour passer à autre chose: frame.destroy().

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

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Points : 130
    Points
    130
    Par défaut
    Ah oui merci @wiztricks je ne savais pas comment vous affichiez le code.

    Sinon j'ai oublié, il faut lancer le code avec fenetre_principale() dans le shell.

    Merci d'avance.

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Points : 130
    Points
    130
    Par défaut
    Merci pour votre réponse,

    Je vais aller plus loin dans mes explications :

    J'avais un problème car je créé des variables nommées var1,var2,var3 ... suivant le nombres d'indices dans ma liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(2,len(column[0]))#création des CheckButtons dans la ScrollBat
            globals()['var%s' % i]=tk.IntVar()
    Je veux ensuite récupérer les données des checkbuttons dans une fonction checkbox_get.
    Mais si j'ai ma fenetre principale avec un bouton qui ouvre la deuxieme fenetre où j'y sélectionne les checkbutton, et que je ne ferme pas la premiere, les variables sont comme misent à 0 automatiquement et je ne récupère donc rien... d'où la volonté de fermer la premiere fenetre ouvrir la deuxieme, puis rouvrir la premiere. Mais c'est là où ca bloc, pour la réouverture.

    Je ne sais pas si j'ai été très claire.

    Merci d'avance.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par StabiloHB Voir le message
    Ah oui merci @wiztricks je ne savais pas comment vous affichiez le code.

    Sinon j'ai oublié, il faut lancer le code avec fenetre_principale() dans le shell.
    Lancer votre code ne sert à rien tant qu'il reste aussi mal construit vs. Tk, Toplevel, Frame,...
    Sinon pour l'erreur, vous vous prenez les pieds entre fenetre_principale qui est fonction que vous écrasez avec fenetre_principale (instance de Tk): structurez votre code un peu plus en phase avec ce qu'attends tkinter et vous y arriverez sans soucis.

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

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 132
    Points : 130
    Points
    130
    Par défaut
    Je retire ce que j'ai dis,
    J'ai juste changé la deuxieme fenetre en fenetre secondaire et cela marche !
    Vous êtes formidable
    Merci beaucoup, cela faisait un moment que j'étais bloqué !

    Je vais pouvoir continuer à bosser, je vous recontacterai surement si j'ai un autre "gros" soucis.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/05/2009, 10h53
  2. Réponses: 1
    Dernier message: 02/02/2009, 14h11
  3. Jouer avec les chaines de caractères ?
    Par vr900 dans le forum C++Builder
    Réponses: 2
    Dernier message: 30/04/2007, 16h26
  4. jouer avec les couleur des lignes de diplaytable
    Par fouyou dans le forum Struts 1
    Réponses: 1
    Dernier message: 24/04/2007, 10h01
  5. [VBA-E]Jouer avec les chaines de caractere contenu ds cellu
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/02/2006, 13h15

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