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

Python Discussion :

faire un lien entre fichiers python avec bouton tkinter [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Espagne

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Par défaut faire un lien entre fichiers python avec bouton tkinter
    Salut a tous et merci d’avance ; ça fait plus de deux semaines que je suis coincé pour résoudre un problème de mon projet interface tkinter…j’ai deux fichiers python, le premier nommé(fichier_test7) et le deuxième nommé(fichier_tests), quand j’execute sur pycharm le code du fichier_test7 ça marche tres bien( quand je coche les boutons a cocher la valeur est modifié en 1, la meme chose pour la valeur entry et spinbox) :
    Run affiche ça :
    la valeur de chkbutton 1 est: 1
    la valeur de chkbutton 2 est: 0
    la valeur de chkbutton 3 est: 1
    la valeur de chkbutton 4 est: 0
    la valeur de entry1 est: prend
    la valeur de entry5 est: s
    la valeur de entry11 est: poisson
    la valeur de spinbox1 est: 3
    Mais quand j’ouvre le fichier_test7 a partir de l’interface fichier_tests en cliquant sur un bouton nommé test7 les valeurs de checkbouton et Entry et spinbox ne change pas meme je coche et je fais entrer des mots et je valide par bouton valider rien ne change :
    Run affiche :
    la valeur de chkbutton 1 est: 0
    la valeur de chkbutton 2 est: 0
    la valeur de chkbutton 3 est: 0
    la valeur de chkbutton 4 est: 0
    la valeur de entry1 est:
    la valeur de entry5 est:
    la valeur de entry11 est:
    la valeur de spinbox1 est: 0
    voici un extrait de code du fichier_tests :
    j’ai essayé ce code 1 (n’affiche pas d’erreur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def ouvrir_fichier_test7():
        import fichier_test7[/B]
    le programme affiche toujors le message info[if ((val_chk1== 0  and val_chk2== 0 and val_chk3== 0 and val_chk4== 0) or (val_entry1=="" and val_entry2=="" and val_entry3=="" and val_entry4=="")or (val_entry5=="" and val_entry6=="" and val_entry7=="" and val_entry8=="" and val_entry9=="" and val_entry10=="") or (val_entry11=="" and val_entry12=="" and val_entry13=="" and val_entry14=="" and val_entry15=="") or (val_spinbox1 ==1 and val_spinbox2==1 and val_spinbox3==1)):
           showinfo("Important!","Tu dois répondre au moins une partie de question de chaque matière(Grammaire, Conjugaison...)")
    et avec le code 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def ouvrir_fichier_test7():
        fich = exec(io.open_code("fichier_test7.py").read())
    affiche l’erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    line 1884, in __call__
        return self.func(*args)
      File "<string>", line 59, in valider_test7
    NameError: name 'CheckValue1' is not defined
    le code du bouton valider :
    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
    def valider_test7():
     
        val_chk1 = CheckValue1.get()
        print("la valeur de chkbutton 1 est:",val_chk1)
        val_chk2 = CheckValue2.get()
        print("la valeur de chkbutton 2 est:", val_chk2)
        val_chk3 = CheckValue3.get()
        print("la valeur de chkbutton 3 est:", val_chk3)
        val_chk4 = CheckValue4.get()
        print("la valeur de chkbutton 4 est:", val_chk4)
        val_entry1 = value_entry_conjug1.get()
        print("la valeur de entry1 est:", val_entry1)
        val_entry2 = value_entry_conjug2.get()
        val_entry3 = value_entry_conjug3.get()
        val_entry4 = value_entry_conjug4.get()
        val_entry5 = value_entry_orthog5.get()
        print("la valeur de entry5 est:", val_entry5)
        val_entry6 = value_entry_orthog6.get()
        val_entry7 = value_entry_orthog7.get()
        val_entry8 = value_entry_orthog8.get()
        val_entry9 = value_entry_orthog9.get()
        val_entry10 = value_entry_orthog10.get()
        val_entry11 = value_entry_dict11.get()
        print("la valeur de entry11 est:", val_entry11)
        val_entry12 = value_entry_dict12.get()
        val_entry13 = value_entry_dict13.get()
        val_entry14 = value_entry_dict14.get()
        val_entry15 = value_entry_dict15.get()
        val_spinbox1 = value_spinbox1.get()
        print("la valeur de spinbox1 est:", val_spinbox1)
        val_spinbox2 = value_spinbox2.get()
        val_spinbox3 = value_spinbox3.get()
     
        if ((val_chk1== 0  and val_chk2== 0 and val_chk3== 0 and val_chk4== 0) or (val_entry1=="" and val_entry2=="" and val_entry3=="" and val_entry4=="")or (val_entry5=="" and val_entry6=="" and val_entry7=="" and val_entry8=="" and val_entry9=="" and val_entry10=="") or (val_entry11=="" and val_entry12=="" and val_entry13=="" and val_entry14=="" and val_entry15=="") or (val_spinbox1 ==1 and val_spinbox2==1 and val_spinbox3==1)):
           showinfo("Important!","Tu dois répondre au moins une partie de question de chaque matière(Grammaire, Conjugaison...)")
     
        else:

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

    Citation Envoyé par JuanGavira Voir le message
    Salut a tous et merci d’avance ; ça fait plus de deux semaines que je suis coincé pour résoudre un problème de mon projet interface tkinter…
    En 2 semaines, vous auriez pu/du réduire vos codes à un exemple minimal qui permette de reproduire le problème simplement.

    Çà a plusieurs avantages.

    Le premier est de pouvoir poster quelque chose qui permette de reproduire votre soucis sans avoir à fournir des extraits de code et des explications "techniques" incompréhensibles.

    Le second est qu'avant de poster vous auriez pu travailler sur cet exemple plus simple par vous même et peut être trouver une solution.

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Espagne

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Par défaut voici le code reduit
    Merci pour ton conseil je suis debutant en python et j'ai pas pensé a reduire le code car j'ai cru que le message etait clair. voici le code reduit:
    fichier 1 test7reduit:
    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
    # coding: utf-8
    from tkinter import *
    from tkinter.messagebox import *
    fenetre_test7 = Tk()
    checkvalue1 = IntVar()
    checkvalue2 = IntVar()
     
    def valider_test7():
        val_chk1 = checkvalue1.get()
        val_chk2 = checkvalue2.get()
        print("la valeur de chkbutton 1 est:", val_chk1)
        print("la valeur de chkbutton 2 est:", val_chk2)
        if (val_chk1 == 0 and val_chk2 == 0):
            showinfo("Important!", "Fais ton choix!")
        else:
     
            if val_chk1 == 1 and val_chk2 == 0:
                print("juste")
            elif (val_chk1 == 0 and val_chk2 ==1) or (val_chk1 ==1 and val_chk2 ==1):
                print("faux")
     
    def fermer_fichier_test7():
        fenetre_test7.quit()
     
    label_test7 = Label(fenetre_test7, text="-Test 7", font=("Courrier", 30), fg='black', bg='#e78ee8')
    label_test7.grid(row=0, column=0, pady=2)
    # label de grammaire:
    label_gram = Label(fenetre_test7, text="I-Grammaire:", font=("Courrier", 20), fg='black', relief=RAISED)
    label_gram.grid(row=1, column=0, pady=2, padx=12, sticky=W)
    # Label question Grammaire:
    label_question_gram = Label(fenetre_test7, text="-Coche la case qui correspond à la phrase exclamative:",
                                font=("Cursif", 20), fg='black', bg='#e78ee8')
    label_question_gram.grid(row=2, column=0, pady=2, padx=12, sticky=W)
     
    # Les checkbutons de Grammaire:
     
    chkbuton1_gram = Checkbutton(fenetre_test7, text="a-Quelle délicieuse pomme!", font=("Courrier", 15), fg='black',
                                 bg='#e78ee8', selectcolor='white', variable=checkvalue1,
                                 onvalue=1, offvalue=0, height=1, width=25, padx=3)
    chkbuton1_gram.grid(row=3, column=0, pady=2, sticky=W)
     
    chkbuton2_gram = Checkbutton(fenetre_test7, text="b-L'agriculteur sème le blé.", font=("Courrier", 15), fg='black',
                                 bg='#e78ee8', selectcolor='white', variable=checkvalue2,
                                 onvalue=1, offvalue=0, height=1, width=25, padx=1)
    chkbuton2_gram.grid(row=4, column=0, pady=2, sticky=W)
     
    #Button Valider:
     
    button_valider_test7= Button(fenetre_test7, text= "Valider",
                        font=("Courrier", 30),bg='#e78ee8',
                         fg='purple',command=valider_test7)
    button_valider_test7.grid(row =30, column=0, pady=50,padx= 300, sticky= W)
     
    #Button Fermer Test7:
    button_fermer_test7= Button(fenetre_test7, text= "Fermer",
                        font=("Courrier", 30),bg='#e78ee8',
                         fg='purple',command=fermer_fichier_test7)
    button_fermer_test7.grid(row =30, column=0, pady=50,padx= 550, sticky= W)
     
    fenetre_test7.mainloop()

    le code de fichier 2 testsreduit:
    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
    # coding: utf-8
    from tkinter import *
    import io
     
    def fermer_fichier_tests():
        fenetre_tests.quit()
     
     
    def ouvrir_fichier_test7():
        import test7reduit
        #fich = exec(io.open_code("test7reduit.py").read())
     
    # créer une première fenêtre:
    fenetre_tests = Tk()
     
    # personnaliser cette fenêtre:
    fenetre_tests.title("Tests")
    fenetre_tests.geometry("250x200")
     
    fenetre_tests.config(background='#e78ee8')
     
    #Créer button test 7:
    button_test7= Button(fenetre_tests, text= "Test 7",
                        font=("Courrier", 15),bg='#e78ee8',
                         fg='purple',command =ouvrir_fichier_test7)
    button_test7.grid(row=6, column=1,padx= 20,pady= 10)
    button_fermer_fen_tests =Button(fenetre_tests, text="Fermer", font=("Courrier", 15), bg='#e78ee8', fg='blue', command=fermer_fichier_tests)
    #button_fermer_fenetre_tests
    button_fermer_fen_tests.grid(row=10, column=2,padx= 20, pady= 10)
     
    # Afficher cette fenêtre:
    fenetre_tests.mainloop()
    Merci encore

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

    Beaucoup de lignes et pas la balise code pour qu'on puisse lire? Ca va pas vous aider.

    Réduisez encore:
    fichier1.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    from tkinter import *
    Tk()
    mainloop()
    puis dans le fichier "principal":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import fichier1
    print ('hello')
    A priori vous devriez constater que le "hello" ne s'affiche pas (mainloop() est "bloquant") tant que vous ne fermez pas la fenêtre (pour débloquer).

    Pour le reste, ben, si vous n'avez pas pris le temps d'ouvrir un tuto. et de tester que vos constructions fonctionnent dans des cas simples (comme le mien, c'est pas compliqué), c'est que vous avez écrit des trucs en espérant que çà fonctionne (sans même les tester).

    Ben çà ne fonctionne pas comme çà... et je ne peux pas vous dire grand chose de plus (il y a plein de chapitres dans les tutos que vous semblé avoir zappé...).

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Espagne

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Par défaut le meme problème
    Salut à tous, j'ai réduit le code pour qu'il soit compréhensible et pour copier coller et savoir le problème que je rencontre quand j’ai fini de créer le fichier test1, avec exec et import le programme ne fonctionne pas, mais quand j’exécute le fichier nommé test1 tout seul fonctionne parfaitement(quand je coche la réponse ça marche), mais quand j’essaye de l’ouvrir à partir du fichier nommé tests il y a des erreurs :

    Le code du fichier test1 :
    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
    # coding: utf-8
    from tkinter import *
    from tkinter.messagebox import *
     
    fenetre_test1 = Tk()
    fenetre_test1.title("Coche la phrase exclamative")
    fenetre_test1.minsize(400, 150)
    checkvalue1 = IntVar()
    checkvalue2 = IntVar()
     
     
    chkbuton1_gram = Checkbutton(fenetre_test1, text="a-Quelle délicieuse pomme!", variable = checkvalue1,
                                 onvalue=1, offvalue=0, height=1, width=25, padx=3)
    chkbuton1_gram.grid(row=3, column=0, pady=2, sticky=W)
     
    chkbuton2_gram = Checkbutton(fenetre_test1, text="b-L'agriculteur sème le blé.", variable = checkvalue2,
                                 onvalue=1, offvalue=0, height=1, width=25, padx=1)
    chkbuton2_gram.grid(row=4, column=0, pady=2, sticky=W)
    def valider_test1():
        print("la valeur de chkbutton 1 est:", checkvalue1.get())
        print("la valeur de chkbutton 2 est:", checkvalue2.get())
     
        if checkvalue1.get() == 0 and checkvalue2.get() == 0:
            showinfo("Important!", "Fais ton choix!")
        else:
     
            if checkvalue1.get() == 1 and checkvalue2.get() == 0:
                print("juste")
            elif (checkvalue1.get() == 0 and checkvalue2.get() == 1) or (checkvalue1.get() == 1 and checkvalue2.get() == 1):
                print("faux")
     
    # Button Valider:
     
    button_valider_test1 = Button(fenetre_test1, text="Valider", command=valider_test1)
    button_valider_test1.grid(row =30, column=0, sticky= W)
    fenetre_test1.mainloop()
    Le code du fichier tests :

    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
    # coding: utf-8
    from tkinter import *
    #from tkinter import *
    import io
    fenetre_tests = Tk()
    def ouvrir_fichier_test1():
       fich = exec(io.open_code("test7reduit.py").read())
       #import test7reduit
       #test7reduit.valider_test1()
     
     
     
    button_test1= Button(fenetre_tests, text="Test 1",
                          command =ouvrir_fichier_test1)
    button_test1.grid(row=6, column=1, padx= 20, pady= 10)
    fenetre_tests.mainloop()

    Avec (import) le message info : Fais ton choix ne cesse d’ apparaitre ;
    Avec (exec…) il y a des erreurs(Exception in Tkinter callback
    Traceback (most recent call last): return self.func(*args)
    File "<string>", line 20, in valider_test1
    NameError: name 'checkvalue1' is not defined)

    Alors quoi faire ? merci d’avance

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

    Citation Envoyé par JuanGavira Voir le message
    Alors quoi faire ? merci d’avance
    Vous débutez.

    Vous devez apprendre ce qu'est un "module" Python et comment l'exécuter en tant que script.

    Ce qui vous force à écrire dans le module des fonctions à appeler lorsqu'il sera importé (ce qui interdit l'usage d'exec dans ce cas).

    L'autre difficulté est que vous programmez avec tkinter.

    Par défaut, il n'y a qu'une seule instance de Tk (les autres fenêtres étant créées via Toplevel) et à priori un seul appel à .mainloop() dans votre programme (quelque soit le nombre de modules).

    Et, in fine, tout un travail de conception pour remettre tout çà à une sauce Python et tkinter plus orthodoxe.

    Bien sûr, ce n'est que de la programmation et on pourrait très bien faire fonctionner le code que vous êtes parti à coder.

    Mais, vous ne maîtriserez rien donc à la prochaine difficulté, pas grand monde voudra regarder ce qu'il se passe.

    Soit vous avez besoin d'utiliser de telles fonctionnalités avancées, extra-ordinaire et vous n'êtes plus débutant car vous savez pourquoi vous devez le faire ainsi plutôt que de façon plus conventionnelle.

    Soit vous vous lancez là dedans par ignorance de comment faire "proprement" faute d'avoir pris le temps d'apprendre (en ouvrant des tutos)...

    Quand c'est juste un problème de compréhension qui se résoud en quelques explications et quelques lignes de code, on peut vous aider mais si au départ vous n'avez même pas essayé de comprendre... à part tout recoder à votre place, on ne peut pas faire grand chose (les explications sont déjà dans les tutos que vous avez visiblement zappés ou choisi de très mauvais).

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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Espagne

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Par défaut ok
    salut; merci pour votre réponse, tout d'abord j'ai appris quelques notions en python sur youtube et en particulier Tkinter pour programmer une petite application aux élèves de primaire en basant sur ma connaissance du passé (2002) en Visual Basic mais je vais lire sur les modules... en espérant résoudre mon problème car je veux pas perdre beaucoup de temps que je consacre à écrire des romans et d'autres types de livres...merci encore pout tes conseils.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Espagne

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2021
    Messages : 5
    Par défaut Enfin
    Salut, enfin j'ai compris l'erreur que j'ai commise, maintenant l'application va bien merci pour tes remarques j'ai du utiliser une seule fenetre Tk() et plusieurs Toplevel(), maintenant j'ai résolu ce problème grace à toi; merci encore et à plutard.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/06/2010, 16h27
  2. [WD12] Lien entre fichiers sur etat avec requete integree
    Par L.Lemarchand dans le forum WinDev
    Réponses: 3
    Dernier message: 01/08/2008, 13h45
  3. Réponses: 3
    Dernier message: 20/06/2008, 16h37
  4. creer des liens entre les feuilles avec un bouton
    Par tomy7 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/03/2008, 13h31
  5. Faire le lien entre un fichier excel et BO
    Par PlisNuX dans le forum Deski
    Réponses: 1
    Dernier message: 29/05/2007, 13h33

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