Partage
  • Partager sur Facebook
  • Partager sur Twitter

Stringvar code d'erreur tkinter

Sujet résolu
    29 mai 2023 à 13:13:51

    Bonjour tous le monde,

    C'est la première fois que je poste ici, je m'entraine à tkinter pour un projet où l'utilisateur devrait donner un nombre (spinbox)

    pour la recevoir j'utilise ça  :

    mais voilà j'ai ça comme erreur : 

    Traceback (most recent call last):

      File "C:\Users\arthu\Documents\Intervallomètre (prise de photos automatiques)\programme\camera shootingVer1.0.1.py", line 63, in <module>

        value = StringVar()

    Donc si vous avez des idées et aussi si vous pouvez me dire comment la valeur que l'utilisateur à choisis je peux la mettre dans une variable .

    Merci d'avance

    def recupere_Temps_entre_chaques_photos():
    showinfo("temps de pose entre chaques photos", Temps_entre_chaques_photos.get())

    def recupere_Dark():
    showinfo("Dark", dark.get())


    def recupere_Offset():
    showinfo("Offsets", OFfset.get())


    def recupere_Photo():
    showinfo("photos", Photo.get())

    def Temps_de_pose():
    showinfo("Pose de chaques photos", Temps_de_pose_de_chaque_photos.get())


    time.sleep(5)

    value = StringVar()
    value.set("Nombre de photos")
    entree = Entry(fenetre, textvariable=value, width=30)
    entree.pack()

    FlaT = Button(fenetre, text="valider", command=recupere_Flat())
    FlaT.pack()

    PhotO = Button(fenetre, text="valider", command=recupere_Photo())
    PhotO.pack()

    offseT = Button(fenetre, text="valider", command=recupere_Offset())
    offseT.pack()

    darK = Button(fenetre, text="valider", command=recupere_Dark())
    darK.pack()

    Pose = Button(fenetre, text="valider", command=Temps_de_pose())
    Pose.pack()

    Temps_entre_chaques_photos = Button(fenetre, text="valider", command= recupere_Temps_entre_chaques_photos())
    Temps_entre_chaques_photos.pack

    fenetre.mainloop()

    -
    Edité par arthur111a 30 mai 2023 à 19:28:37

    • Partager sur Facebook
    • Partager sur Twitter
      29 mai 2023 à 14:13:29

      N'avez vous pas remarqué que le code Python est indenté et que sans indentation, il est illisible?

      Normalement, aborder tkinter n'est pas la première étape d'un apprentissage: vous avez du déjà rencontré des erreurs (en essayant de faire des exercices) et constater que le message d'erreur se composait de plusieurs lignes. Celle qui donne le type de l'erreur n'est pas la moins importante.

      Reste que lorsqu'on commence, on ne sait pas raconter ce qu'il se passe... poster un code qui permet de reproduire le problème permet à ceux qui voudraient vous aider de comprendre ce qu'il se passe.

      • Partager sur Facebook
      • Partager sur Twitter
        29 mai 2023 à 16:15:00

        Bonjour,

        ton code n'est pas complet, et il faut l'afficher avec l'icône prévu à cet effet dans la barre

        au dessus de la fenêtre de messages

        Visuellement, ca doit ressembler à ça:

        def test():
            print('test')
        
        test()
        



        -
        Edité par Phil_1857 29 mai 2023 à 16:17:04

        • Partager sur Facebook
        • Partager sur Twitter
          30 mai 2023 à 18:53:39

          Je m'excuse
          import time
          from tkinter import *
          from tkinter.messagebox import showinfo
          import requests
          from tkinter import StringVar
          
          
          window = Tk()
          fenetre = Tk()
          window.title("Combien voulez vous de photos")
          window.geometry('1500x500')
          
          #information pour ne pas se tromper de ligne
          Demande_photos = Label(window,
                                 text="choisisez si vous voulez c'est photos de calibration et si oui combien en voulez vous. En premier les Flats, en deuxièmes les darks en troisième les offsets, en quatrième les photos classique, en cinquième le temps de chaques poses et en sixième, le temps entre chaques photos",
                                 bg="yellow")
          Demande_photos.pack()
          Attention = Label(window,
                            text="Faites bien attention de choisir la bonne ligne pour ne pas ce tromper dans le nombre de photos !!!",
                            bg="red")
          Attention.pack()
          
          # demande pour prise de photos:
          FlAT = Spinbox(window, from_=0, to=1000)
          FlAT.pack()
          
          dark = Spinbox(window, from_=0, to=1000)
          dark.pack()
          
          OFfset = Spinbox(window, from_=0, to=1000)
          OFfset.pack()
          
          Photo = Spinbox(window, from_=0, to=100000)
          Photo.pack()
          
          Temps_de_pose_de_chaque_photos = Spinbox(window, from_=0, to=10000)
          Temps_de_pose_de_chaque_photos.pack()
          
          Temps_entre_chaques_photos = Spinbox(window, from_=0, to=100000)
          Temps_entre_chaques_photos.pack()
          
          bouton = Button(window, text="fermer", command=window.quit)
          window.mainloop()
          #récupération des choix de l'utilisateur
          
          def recupere_Flat():
              showinfo("Flat", FlAT.get())
          
          def recupere_Temps_entre_chaques_photos():
              showinfo("temps de pose entre chaques photos", Temps_entre_chaques_photos.get())
          
          def recupere_Dark():
              showinfo("Dark", dark.get())
          
          
          def recupere_Offset():
              showinfo("Offsets", OFfset.get())
          
          
          def recupere_Photo():
              showinfo("photos", Photo.get())
          
          def Temps_de_pose():
              showinfo("Pose de chaques photos", Temps_de_pose_de_chaque_photos.get())
          
          
          time.sleep(0.5)
          
          value = StringVar()
          value.set("Nombre de photos")
          entree = Entry(fenetre, textvariable=value, width=30)
          entree.pack()
          
          FlaT = Button(fenetre, text="valider", command=recupere_Flat())
          FlaT.pack()
          
          PhotO = Button(fenetre, text="valider", command=recupere_Photo())
          PhotO.pack()
          
          offseT = Button(fenetre, text="valider", command=recupere_Offset())
          offseT.pack()
          
          darK = Button(fenetre, text="valider", command=recupere_Dark())
          darK.pack()
          
          Pose = Button(fenetre, text="valider", command=Temps_de_pose())
          Pose.pack()
          
          Temps_entre_chaques_photos = Button(fenetre, text="valider", command= recupere_Temps_entre_chaques_photos())
          Temps_entre_chaques_photos.pack
          
          fenetre.mainloop()
          
          # définitions des variables
          autofocus = {
              "af": False
          }
          Temps_de_chaque_pose = {
              "value": 200,
              "ability": [30, 40, 50, 60, 80, 100, 120, 150, 180, 200]
          }
          Wifi = {
              "action": "disconnect"
          }
          increments = {
              "value": "1/3"
          }
          Off_display = {
              "value": "0"
          }
          Off_value = {
              "value": "enable",
              "ability": ["10", "20"]
          }
          OFF = {
              "value": "10"
          }
          Ip_maison = "http://192.168.68.118:8080/ccapi/ver100"
          # nombre de photos dans chaque catégorie.
          take_a_photo = PhotO
          Dark = darK
          offset = offseT
          Flat = FlaT
          
          # commencement des requests d'information de l'appareil
          print("information appareil photo : ")
          time.sleep(0.5)
          Propriétaire = requests.get("http://192.168.68.118:8080/ccapi/ver100/functions/registeredname/copyright")
          print(Propriétaire.text)
          Information_Canon = requests.get("http://192.168.68.118:8080/ccapi/ver100/deviceinformation")
          print(Information_Canon.text)
          Storage = requests.get("http://192.168.68.118:8080/ccapi/ver100/contents/sd")
          print(Storage.text)
          battery = requests.get("http://192.168.68.118:8080/ccapi/ver100/devicestatus/battery")
          print(battery.text)
          Objectif_information = requests.get("http://192.168.68.118:8080/ccapi/ver100/devicestatus/lens")
          print(Objectif_information)
          print(
              "---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------")
          time.sleep(2)
          
          # informations des prises de vues
          Information_paramètre_prise_de_vue = requests.get("http://192.168.68.118:8080/ccapi/ver100/shooting/settings")
          print(Information_paramètre_prise_de_vue.text)
          Temp = requests.get("http://192.168.68.118:8080/ccapi/ver100/devicestatus/temperature")
          print(Temp.text)
          Pose = requests.get("http://192.168.68.118:8080/ccapi/ver100/shooting/settings/drive/customhighspeedcont/shootingspeed",
                              json=Temps_de_chaque_pose)
          print(Pose)
          print(Pose.text)
          Iso = requests.get("http://192.168.68.118:8080/ccapi/ver100/customfunctions/isoincrements", json=increments)
          print(Iso)
          print(Iso.text)
          time.sleep(3)
          Display = requests.put("http://192.168.68.118:8080/ccapi/ver100/functions/displayoff", json=Off_display)
          print("ecran eteint")
          print(Display.text)
          
          # prise des photos
          print("commencement de la prise de photos dans 5s")
          time.sleep(5)
          print("Commencement de la prise des photos ")
          
          nombre_photos = Photo.get
          for _ in range(1):
              take_a_photo = requests.post("http://192.168.68.118:8080/ccapi/ver100/shooting/control/shutterbutton",
                                           json=autofocus)
              print("photo prise")
              time.sleep(1)
              Temp = requests.get("http://192.168.68.118:8080/ccapi/ver100/devicestatus/temperature")
              print(Temp.text)
              print(take_a_photo.text)
          print("Prise des photos terminé")
          time.sleep(1)
          
          print("Prise des Darks dans 5mins, veuillez préparez votre matériel")
          time.sleep(300)
          for _ in range(Dark):
              Dark = requests.post("http://192.168.68.118:8080/ccapi/ver100/shooting/control/shutterbutton", json=autofocus)
              print("photo prise")
              time.sleep(1)
              Temp = requests.get("http://192.168.68.118:8080/ccapi/ver100/devicestatus/temperature")
              print(Temp.text)
              print(Dark.text)
          print("prise des darks terminé")
          time.sleep(1)
          
          print("prise des offset dans 5mins, veuillez préparez votre appareil")
          time.sleep(300)
          for _ in range(offset):
              Offset = requests.post("http://192.168.68.118:8080/ccapi/ver100/shooting/control/shutterbutton", json=autofocus)
              print("photo prise")
              time.sleep(1)
              Temp = requests.get("http://192.168.68.118:8080/ccapi/ver100/devicestatus/temperature")
              print(Temp.text)
              print(offset.text)
          print("prise des offset terminé")
          time.sleep(1)
          
          print("prise des flats dans 5mins, veuillez préparez votre appareil")
          time.sleep(300)
          for _ in range(Flat):
              Flat = requests.post("http://192.168.68.118:8080/ccapi/ver100/shooting/control/shutterbutton", json=autofocus)
              print("photo prise")
              time.sleep(1)
              Temp = requests.get("http://192.168.68.118:8080/ccapi/ver100/devicestatus/temperature")
              print(Temp.text)
              print(Flat.text)
          print("prise des Flats terminé, prise des photos terminées")
          time.sleep(1)
          # fin des prises de photos
          
          print("arrêt de l'appareil dans 5s, arrêtez le programme si vous ne le voulez pas ")
          time.sleep(1)
          print("5s")
          time.sleep(1)
          print("3s")
          time.sleep(1)
          print("2s")
          time.sleep(1)
          print("1s")
          Wifi_stop = requests.post("http://192.168.68.118:8080/ccapi/ver100/functions/networkconnection", json=Wifi)
          print("wifi deconnecté")
          print("appareil arrêté")
          OFF_camera = requests.put("http://192.168.68.118:8080/ccapi/ver100/functions/autopoweroff", json=OFF)
          print(OFF_camera)
          print(OFF_camera.text)
          

          voilà le programme
          • Partager sur Facebook
          • Partager sur Twitter
            31 mai 2023 à 11:18:38

            Bonjour,

            Pourquoi 2 fenêtres principales ?

            window = Tk()
            fenetre = Tk()


            Le problème avec cette ligne:

            value = StringVar()

            c'est qu'elle est placée après la boucle de gestion des interruptions:

            window.mainloop()

            donc value n'est rattachée à aucune fenêtre

            Et tous ces time.sleep(), c'est utile ?

            Ne pas utiliser time.sleep() dans le même thread que Tkinter, voir plutôt la méthode after()

            -
            Edité par Phil_1857 31 mai 2023 à 11:32:47

            • Partager sur Facebook
            • Partager sur Twitter
              31 mai 2023 à 11:40:21

              Merci de ta réponse 

              2 fenêtres principales car si j'en met une seul les fenêtres suivantes vont s'ouvrirent avant même que je puisse remplir le nombre et je serai obligé de les fermer pour pouvoir choisir le nombre de photos ce qui ferait qu'elles ne serviraient à rien.

              Bonne journée 

              -
              Edité par arthur111a 31 mai 2023 à 11:42:06

              • Partager sur Facebook
              • Partager sur Twitter
                31 mai 2023 à 13:05:29

                "2 fenêtres principales car si j'en met une seule les fenêtres suivantes vont s'ouvrir"

                bizarre, quelles fenêtres suivantes ?

                Et ma remarque à propos de time.sleep () ?

                A mon avis, il y a surement une autre façon plus simple de faire, tu devrais nous expliquer

                ce que tu veux obtenir exactement

                Ton code est un peu brouillon ...

                -
                Edité par Phil_1857 31 mai 2023 à 13:12:51

                • Partager sur Facebook
                • Partager sur Twitter
                  31 mai 2023 à 13:54:56

                  Quand je disais les fenêtres suivantes je parlais de la deuxième (celle qui a fenetre à la place de windows).

                  Je n'ai pas pus encore tester after mais j'ai un petit peux chercher et en effet on dirait que cela sois la même méthode que time.sleep (), je ne comprends pas la différence en dehors du fait que time.sleep soit en s et l'autre en ms 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    31 mai 2023 à 16:43:23

                    La différence entre sleep et after n'est pas dans les secondes et millisecondes, on fait ce qu'on veut dans les 2 cas

                    En fait, Tkinter exécute ses traitements dans une boucle d'évènements, et en utilisant time.sleep à l'intérieur, on bloque cette boucle

                    il faut utiliser after() qui est fait pour ça et ne bloque pas la boucle d'évènements

                    Ceci dit, Je ne comprends toujours pas pourquoi il y a plusieurs fenêtres

                    Il fait quoi ton code exactement ?

                    -
                    Edité par Phil_1857 31 mai 2023 à 16:51:00

                    • Partager sur Facebook
                    • Partager sur Twitter
                      31 mai 2023 à 17:58:51

                      Phil_1857 a écrit:

                      La différence entre sleep et after n'est pas dans les secondes et millisecondes, on fait ce qu'on veut dans les 2 cas

                      En fait, Tkinter exécute ses traitements dans une boucle d'évènements, et en utilisant time.sleep à l'intérieur, on bloque cette boucle

                      il faut utiliser after() qui est fait pour ça et ne bloque pas la boucle d'évènements

                      Ceci dit, Je ne comprends toujours pas pourquoi il y a plusieurs fenêtres

                      Il fait quoi ton code exactement ?

                      -
                      Edité par Phil_1857 il y a environ 1 heure

                      Mon code sert à envoyer une demande à l'appareil photo pour qu'il prenne un certains nombre de photos après avoir envoyé ces informations (cela fonctionne) mais le nombre de photos doit être choisi par l'utilisateur (j'y arrive) mais j'aimerais que le nombre choisi sois le nombre envoyé (qu'il soit mis dans une variable)

                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 juin 2023 à 11:00:38

                        Bonjour,

                        OK, mais je persiste avec ma fenêtre unique

                        Exemple court avec juste le traitement du nb de photos et comment boucler sur le nb de photos saisi pour les prendre:

                        # -*- coding:Utf-8 -*-
                        
                        from tkinter import *
                        
                        def show_photos_nb():
                            global nb_photos
                        
                            nb_photos = s1.get()
                            L2['text'] = str(nb_photos)
                        
                        def get_photos():
                            global nb_photos
                        
                            for _ in range(nb_photos):
                                take_a_photo = requests.post("http://192.168.68.118:8080/ccapi/ver100/shooting/control/shutterbutton",
                                                             json=autofocus)
                                Temp = requests.get("http://192.168.68.118:8080/ccapi/ver100/devicestatus/temperature")
                                L3['text'] = Temp.text
                                L4['text'] = take_a_photo.text
                        
                        WIDTH, HEIGHT = 400, 200
                        
                        main_win = Tk()
                        main_win.title('Prendre des photos')
                        main_win.geometry(str(WIDTH)+'x'+str(HEIGHT)+'+400+100')
                        
                        L1 = Label(main_win, text = 'Combien de photos ?')
                        L1.place(x = 10, y = 10)
                        
                        L2 = Label(main_win, text = '>')
                        L2.place(x = 10, y = 50)
                        
                        L3 = Label(main_win, text = '>')
                        L3.place(x = 10, y = 70)
                        
                        L4 = Label(main_win, text = '>')
                        L4.place(x = 10, y = 90)
                        
                        s1 = Spinbox(main_win, from_=0, to=100000, command = show_photos_nb)
                        s1.place(x = 150, y = 10)
                        
                        b1 = Button(main_win, text="valider", command=get_photos)
                        b1.place(x = 300, y = 10)
                        
                        main_win.mainloop()
                        



                        • Partager sur Facebook
                        • Partager sur Twitter
                          1 juin 2023 à 15:36:31

                          Merci j'essaye ça dès que je suis rentré du collège.

                          Bonne journée 

                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 juin 2023 à 17:16:16

                            Merci, alors j'ai testé (tous en enlevant mes autres fenêtres) et j'ai une erreur, j'ai aussi essayé juste ton code et toujours la même erreur. 

                            bonne journée 

                            Traceback (most recent call last):
                              File "C:\Users\arthu\Documents\Intervallomètre (prise de photos automatiques)\programme\camera shootingVer1.0.1.py", line 125, in <module>
                                for _ in range(nb_photos):
                            TypeError: 'str' object cannot be interpreted as an integer
                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 juin 2023 à 18:34:35

                              nb_photos vient d'un Spinbox.get() à convertir en entier avant de l'utiliser avec range.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 juin 2023 à 18:51:33

                                Mais oui, j'ai écrit

                                nb_photos = s1.get()

                                au lieu de 

                                nb_photos = int(s1.get())

                                Quel ballot !


                                • Partager sur Facebook
                                • Partager sur Twitter
                                  4 juin 2023 à 19:35:02

                                  Merci de ta réponse, J'ai essayé et cela fonctionne, merci je le modifierais juste pour mon besoin et je te dirais si cela fonctionne ou pas .

                                  bonne soirée

                                  -
                                  Edité par arthur111a 4 juin 2023 à 19:38:38

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    13 juillet 2023 à 15:08:49

                                    Bon je reviens tard, merci j'ai résolut mon problème. Merci à vous

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      13 juillet 2023 à 16:42:43

                                      arthur111a a écrit:

                                      Bon je reviens tard, merci j'ai résolut mon problème. Merci à vous

                                      Bonjour,

                                      Sujet résolu

                                      Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        14 juillet 2023 à 20:04:59

                                        OK merci et bonne journée .
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Stringvar code d'erreur tkinter

                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                        • Editeur
                                        • Markdown