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 :

faire cohabiter turtle et tkinter


Sujet :

Tkinter Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut faire cohabiter turtle et tkinter
    Bonjour/Hello

    Alors voila je fais un petit projet que je vais tacher de vous expliquer. Dans un premier temps j'ai créé un programme qui ouvre une page tk avec 2 boutons, l'un qui lancera un programme (pour l'instant juste une page google et l'autre qui lance une carte qui affiche l'itinéraire d'une liste. Cependant le bouton du programme de la page google fonctionne mais lorsque je clique sur le programme pour lancer l'itinéraire ( je precise que lorsque j'execute ce programme seul, sans passer par le programme avec le bouton , il fonctionne parfaitement. Or lorsque je le lance avec le bouton, celui-ci m'affiche l'erreur suivante :"
    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
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "c:\users\bastient\appdata\local\programs\python\python37-32\lib\tkinter\__init__.py", line 1705, in __call__
        return self.func(*args)
      File "C:\Users\bastient\Desktop\info\big.py", line 33, in map
        fortify.screen.bgpic("C:/Users/bastient/Desktop/info/planisphere.gif")
      File "c:\users\bastient\appdata\local\programs\python\python37-32\lib\turtle.py", line 1482, in bgpic
        self._setbgpic(self._bgpic, self._bgpics[picname])
      File "c:\users\bastient\appdata\local\programs\python\python37-32\lib\turtle.py", line 738, in _setbgpic
        self.cv.itemconfig(item, image=image)
      File "<string>", line 1, in itemconfig
      File "c:\users\bastient\appdata\local\programs\python\python37-32\lib\tkinter\__init__.py", line 2578, in itemconfigure
        return self._configure(('itemconfigure', tagOrId), cnf, kw)
      File "c:\users\bastient\appdata\local\programs\python\python37-32\lib\tkinter\__init__.py", line 1476, in _configure
        self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
    _tkinter.TclError: image "pyimage2" doesn't exist
    pourtant lorsque je lance le programme en mettant la ligne de code qui va chercher l'image en commentaire, tout fonctionne bien. Mais je ne comprends par car le chemin et le bon puisque le programme fonctionne lorsque je l'execute seul ...?

    voici mon code complet :
    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    import tkinter as tk
        import webbrowser
     
     
        window=tk.Tk() #on créé une fenetre
        window.title("Application exportation")
        window.geometry("900x1800")
        window.config(background='#9ACDE8')
     
     
        frame=tk.Frame(window, bg='#9ACDE8', bd=1, relief=tk.SUNKEN)
     
        label_title=tk.Label(frame, text="Exporter vos produits", font=("Courrier", 40), background='#303C43', foreground='white')
        label_title.pack()
     
        def google():
            webbrowser.open_new("http://google.com")
     
     
        def map():
     
            #mise en place de turtle
            import random
            import turtle
            fortify = turtle.Turtle()
     
            fortify.hideturtle()
     
            turtle.hideturtle()
     
            fortify.screen.bgpic("C:/Users/bastient/Desktop/info/planisphere.gif")
     
            turtle.setup (width=1220, height=710)
     
            turtle.clear()
     
     
     
     
            turtle.penup()
     
     
     
            #position des villes
            Astana = [197,87,"Astana"]
            Buenos_Aires = [-235,-240,"Buenos_Aires"]
            Canberra = [457,-243,"Canberra"]
            Copenhague = [6,110,"Copenhague"]
            Johannesburg = [57,-204,"Johannesburg"]
            Lagos = [-26,-93,"Lagos"]
            Los_Angeles = [-430,0,"Los_Angeles"]
            Mexico = [-370,-45,"Mexico"]
            Moscou = [90,105,"Moscou"]
            Mumbai = [205,-52,"Mumbai"]
            New_York = [-290,30,"New_York"]
            Ottawa = [-290,55,"Ottawa"]
            Paris = [-30,68,"Paris"]
            Pekin = [350,28,"Pekin"]
            Perth = [347,-216,"Perth"]
            Tokyo = [425,10,"Tokyo"]
            Zagreb = [18,56,"Zagreb"]
     
            #on créé la liste puis on la mélange
            List = [Ottawa,Los_Angeles,Mexico,New_York,Buenos_Aires,Paris,Copenhague,Zagreb,Moscou,Lagos,Johannesburg,Astana,Mumbai,Pekin,Tokyo,Perth,Canberra]
            random.shuffle(List)
            #on créé les procédures qui permettront le bon tracé
            def gauche():
                import turtle
                turtle.goto(-596,(List[i-1][1]+List[i][1])/2)
                turtle.penup()
                turtle.goto(596,(List[i-1][1]+List[i][1])/2)
                turtle.pendown()
     
            def droite():
                import turtle
                turtle.goto(596,(List[i-1][1]+List[i][1])/2)
                turtle.penup()
                turtle.goto(-596,(List[i-1][1]+List[i][1])/2)
                turtle.pendown()
     
            #ici commence le programme
            turtle.pensize(2)
            turtle.pencolor("red")
            message = "Départ : "
            for i in range(0,len(List)):
                print(message + List[i][2])
                message = "Escale " + str(i+1) + " : "
                if i > 0:
                    #Si la ville dont on part est dans la partie gauche et la ville d'arrivé dans la partie droite
                    if List[i-1][0] < 0 and List[i][0] > 0:
     
                        #et qu'il est plus rapide de passer par l'exterieur du globe pour y parvenir
                        if abs(List[i-1][0]) + abs(List[i][0]) > (596-abs(List[i-1][0])+596-abs(List[i][0])) :
                            #gauche pour faire le tour du planisphere par la gauche
                            gauche()
     
                    #Si la ville dont on part est dans la partie droite et la ville d'arrivé dans la partie gauche
                    elif List[i-1][0] > 0 and List[i][0] < 0:
     
                        #et qu'il est plus rapide de passer par l'exterieur du globe pour y parvenir
                        if abs(List[i-1][0]) + abs(List[i][0]) > (596-abs(List[i-1][0])+596-abs(List[i][0])) :
                            #droite pour faire le tour du planisphere par la droite
                            droite()
     
                #Sinon on emprunte le chemin normal (pas besoin d'autre car si vous etes déja arrivé, le chemin qui suit ne se verra pas)
                turtle.goto(List[i][0],List[i][1])
                #Enfin on s'occupe du design et des messages dans la console
                if i == len(List)-2:
                    message = "Arrivé : "
                if i == len(List)-1:
                    turtle.pencolor("red")
                turtle.write(List[i][2], font= ("Arial",15,'bold'))
                turtle.pencolor("black")
                turtle.pendown()
     
        container_button=tk.Button(frame, text="1. Remplir le container",font=("Courrier", 40), background='white', foreground='#303C43', command=google )
        container_button.pack(pady=25, fill=tk.X)
     
        carte_button=tk.Button(frame, text="2. Afficher l'itinéraire",font=("Courrier", 40), background='white', foreground='#303C43', command=map )
        carte_button.pack(pady=25, fill=tk.X)
     
     
        frame.pack(expand=tk.YES)
        window.mainloop()
    je sais que cette erreur est déjà survenue mais soit je n'ai pas compris comment la résoudre soit ca ne fonctionne pas pour mon code par exemple puisque j'utilise turtle, les moyens d'importer l'image en background de turtle sont limites, je m'en remet donc a vous en espérant que vous pourrez m'aider.

  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,

    Citation Envoyé par Blorne Voir le message
    je sais que cette erreur est déjà survenue mais soit je n'ai pas compris comment la résoudre soit ca ne fonctionne pas pour mon code par exemple puisque j'utilise turtle, les moyens d'importer l'image en background de turtle sont limites, je m'en remet donc a vous en espérant que vous pourrez m'aider.
    Si vous voulez utiliser turtle avec tkinter, il faut utiliser un RawTurtle.

    Le problème étant que fait comme çà, vous avez deux instances de Tk (celle que vous créez et celle créée par turtle) et aucune possibilité pour dire à Turtle laquelle utiliser...

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

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Si vous voulez utiliser turtle avec tkinter, il faut utiliser un RawTurtle.

    Le problème étant que fait comme çà, vous avez deux instances de Tk (celle que vous créez et celle créée par turtle) et aucune possibilité pour dire à Turtle laquelle utiliser...

    - W
    Merci pour votre réponse rapide, cependant pouvez-vous m'apporter un peu plus de précision sur la démarche à effectuer ? Dois-je écrire du code avec un canvas ? Et sommes-nous d'accord que seul le code de la fonction "map" est à modifier ?

    Désolé pour ces questions mais j'ai tout appris seul et j'ai surement sauté beaucoup d'étapes. Lorsque je recherche des exemples avec un raw turtle il m'envoie sur du code un peu de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def main():
        root = TK.Tk()
        cv1 = TK.Canvas(root, width=300, height=200, bg="#ddffff")
        cv2 = TK.Canvas(root, width=300, height=200, bg="#ffeeee")
        cv1.pack()
        cv2.pack()
     
        s1 = TurtleScreen(cv1)
        s1.bgcolor(0.85, 0.85, 1)
        s2 = TurtleScreen(cv2)
        s2.bgcolor(1, 0.85, 0.85)
     
        p = RawTurtle(s1)
        q = RawTurtle(s2)[/B]
    Est-ce que je dois coder quelque chose comme ça ?

    Merci encore.

  4. #4
    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,

    Citation Envoyé par Blorne Voir le message
    Est-ce que je dois coder quelaue chose comme ca ?
    par exemple.

    Desoler pour ces questions mais j'ai tout appris seul et j'ai surement saute beaucoup d'etapes.
    Je n'utilise pas le module turtle (et probable que ce soit le cas de beaucoup de developpeurs).
    Je comprends que çà puisse avoir un intérêt pédagogique mais pour afficher une carte avec des points/label qu'on reliera par des lignes ou des courbes, autant utiliser le Canvas directement.

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

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    par exemple.



    Je n'utilise pas le module turtle (et probable que ce soit le cas de beaucoup de developpeurs).
    Je comprends que çà puisse avoir un intérêt pédagogique mais pour afficher une carte avec des points/label qu'on reliera par des lignes ou des courbes, autant utiliser le Canvas directement.

    - W
    Bonjour,

    et bien je ne comprend pas comment resoudre mon probleme et je ne connais pas du tout canvas donc ca serait repartir de zero avec ni code ni connaissances...

  6. #6
    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,

    Citation Envoyé par Blorne Voir le message
    et bien je ne comprend pas comment resoudre mon probleme et je ne connais pas du tout canvas donc ca serait repartir de zero avec ni code ni connaissances...
    Si vous ne connaissez pas le Canvas, passer par RawTurtle/TurtleScreen (parce que c'est le passage obligé pour mélanger du tkinter avec turtle) est une solution.
    Reste à apprendre à l'utiliser (et/ou à trouver des exemples).

    Je vous disais juste que les développeurs (et moi en particulier) connaissent ce module de nom et s'ils ont joué un peu avec, ils sont rarement allé plus loin par manque d'intérêt.

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

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Si vous ne connaissez pas le Canvas, passer par RawTurtle/TurtleScreen (parce que c'est le passage obligé pour mélanger du tkinter avec turtle) est une solution.
    Reste à apprendre à l'utiliser (et/ou à trouver des exemples).

    Je vous disais juste que les développeurs (et moi en particulier) connaissent ce module de nom et s'ils ont joué un peu avec, ils sont rarement allé plus loin par manque d'intérêt.

    - W
    Bonjour,

    Pourriez vous me donner un exemple de ce a quoi mon code pourrait ressembler avec votre méthode ? J'ai vraiment cherché encore et encore pour turtlescreen mais rien y faire je comprends pas ou ca ne fonctionne pas je désespère...

  8. #8
    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 Blorne Voir le message
    Pourriez vous me donner un exemple de ce a quoi mon code pourrait ressembler avec votre méthode ? J'ai vraiment cherché encore et encore pour turtlescreen mais rien y faire je comprends pas ou ca ne fonctionne pas je désespère...
    Pour le fabriquer, c'est un travail de compréhension de votre code, de lecture de la documentation, de recherche d'exemples sur Internet...
    Tout çà prend du temps, beaucoup trop de temps...

    J'ai modifié le titre de la discussion pour permettre au gens que le sujet intéresse d'y prêter un peu d'attention. Il vous reste à attendre qu'une âme charitable veuille bien se manifester. C'est tout ce que je peux faire pour vous.

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

Discussions similaires

  1. _tkinter.TclError: image "pyimage2" doesn't exist"
    Par KROCLARYS dans le forum Tkinter
    Réponses: 5
    Dernier message: 20/05/2018, 10h48
  2. _tkinter.TclError: image "pyimage2" doesn't exist"
    Par KROCLARYS dans le forum Général Python
    Réponses: 4
    Dernier message: 20/05/2018, 10h39
  3. Tkinter et images
    Par magicvinni dans le forum Tkinter
    Réponses: 1
    Dernier message: 31/12/2017, 18h31
  4. Réponses: 3
    Dernier message: 29/07/2012, 21h03
  5. Réponses: 1
    Dernier message: 30/10/2010, 16h38

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