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 :

Cercle et curseur


Sujet :

Tkinter Python

  1. #1
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut Cercle et curseur
    Bonjour,

    Tout est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # exo 13.20 : écrivez une petite application qui fait apparaître une fenêtre
    # avec un canevas et un widget curseur(Scale). Dans le canevas, dessinez un 
    # cercle, dont l'utilisateur pourra faire varier la taille à l'aide du curseur.
    Je suppose que je devrai savoir faire ça, puisque l'exercice m'est proposé, mais ce n'est pas le cas.
    Je commence à me demander si j'ai vraiment les capacités nécessaires pour apprendre à programmer. En clair, je ne suis pas loin de me décourager.
    J'ai quand même tenté...ceci :
    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
    from tkinter import*
     
     
    def cercle(can,x,y,r) :
        "fonction qui permet de dessiner un cercle de centre x,y et de rayon r"
        can.create_oval(x-r,y-r,x+r,y+r)
     
    class Rond(Frame) :
        "classe qui permet d'instancier des ronds"
        def __init__(self,larg=400,haut=400) :
            Frame.__init__(self)
            self.curs = Scale(self,length=300,orient=HORIZONTAL,label='Rayon :',
                  troughcolor='pink',sliderlength=25,showvalue=0,from_=50,
                  to=400,tickinterval=25,command=self.valeur)
            self.curs.pack(side=BOTTOM)
     
            self.can = Canvas(self,bg='ivory',width=larg,height=haut)
            self.can.pack()
     
            self.larg,self.haut = larg,haut
            self.x,self.y = self.larg/2,self.haut/2
     
            self.master.bind('<Control-M>',self.dessine)
            self.pack()
     
     
        def dessine(self) :
            "pour dessiner un cercle dans le canevas"
     
            self.r = self.valeur
            self.can.delete('ALL')
            self.cer = cercle(self.can,self.x,self.y,self.r)
     
     
        def valeur(self,event) :
            """méthode qui récupère la valeur du rayon définie par l'utilisateur
    à l'aide du curseur"""
            self.r = int(r)
            self.event_generate('<Control-M>')
     
     
     
     
    ## Test Programme ##
     
    if __name__ == "__main__" :
        root = Tk()
        ce = Rond(root)
     
     
        ce.mainloop()
    en sachant que là-dedans, il y a des choses que j'ai recopié sans vraiment les comprendre.
    Bref. Donc à mon avis déjà, il faudrait "prendre" la valeur fixée par l'utilisateur, mais je ne sais pas comment on fait ça.
    J'ai tenté d'exécuter le code pour essayer, selon les codes erreurs qu'il me donne, de trouver progressivement les solutions, mais là j'ai une erreur que je n'ai jamais eu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     File "F:/Python/Exercices/chapitre 13/13 20.py", line 51, in <module>
        ce = Rond(root)
      File "F:/Python/Exercices/chapitre 13/13 20.py", line 21, in __init__
        self.can = Canvas(self,bg='ivory',width=larg,height=haut)
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 2405, in __init__
        Widget.__init__(self, master, 'canvas', cnf, kw)
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 2299, in __init__
        (widgetName, self._w) + extra + self._options(cnf))
    _tkinter.TclError: bad screen distance "."

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

    Citation Envoyé par RowanMayfair Voir le message
    progressivement les solutions, mais là j'ai une erreur que je n'ai jamais eu :
    Dans ce fatras de messages, il faut regarder la dernière chose exécutée par votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     File "F:/Python/Exercices/chapitre 13/13 20.py", line 51, in <module>
        ce = Rond(root)
      File "F:/Python/Exercices/chapitre 13/13 20.py", line 21, in __init__
        self.can = Canvas(self,bg='ivory',width=larg,height=haut)
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 2405, in __init__
        Widget.__init__(self, master, 'canvas', cnf, kw)
      File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 2299, in __init__
        (widgetName, self._w) + extra + self._options(cnf))
    _tkinter.TclError: bad screen distance "."
    et si çà plante lors de la création du Canvas, il faut regarder ce que sont les paramètres passés et vérifier que çà correspond à quelque chose.

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

  3. #3
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    self.can = Canvas(self,bg='ivory',width=larg,height=haut)
            self.can.pack()
    c'est larg et haut qui posent problèmes ?
    parce qu'ils sont en paramètres init :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def __init__(self,larg=400,haut=400)
    donc je dois pouvoir les utiliser non ?

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

    Citation Envoyé par RowanMayfair Voir le message
    parce qu'ils sont en paramètres init :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def __init__(self,larg=400,haut=400)
    donc je dois pouvoir les utiliser non ?
    Dans __init__(self, larg=400, haut=400), larg=... et haut=... définissent des valeurs par défaut pour... les 2 premiers arguments lorsque l'appelant ne les précise pas.

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

  5. #5
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    je ne comprends pas.
    Je pensais que quand on plaçait des variables en paramètres, qu'il y ait ou non des valeurs par défaut, cela permettait justement d'utiliser ces variables.
    Là, je ne peux pas utiliser larg et haut. Alors que j'aurai voulu que l'utilisateur puisse les définir, le canevas aurait été adapté, et j'aurai même voulu évidemment que ces variables déterminent la graduation de mon curseur.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par RowanMayfair Voir le message
    je ne comprends pas.
    Je pensais que quand on plaçait des variables en paramètres, qu'il y ait ou non des valeurs par défaut, cela permettait justement d'utiliser ces variables.
    Et que se passe-t-il lorsque ligne 48, Python exécute: ce = Rond(root).

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

  7. #7
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    et bien je pensais justement que dans ce cas il prenait les valeurs par défaut de mes variables, partout où je les ait mises, comme par exemple pour la taille du canevas.
    Mais ça ne se passe pas comme ça, et j'ignore pourquoi.

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par RowanMayfair Voir le message
    et bien je pensais justement que dans ce cas il prenait les valeurs par défaut de mes variables, partout où je les ait mises, comme par exemple pour la taille du canevas.
    Pourquoi penser alors que vous pourriez déjà tester:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> def f(a=1, b=2):
    ...     print(a, b)
    ...
    >>> f()
    1 2
    >>> f('toto')
    toto 2
    >>>
    histoire de voir comment çà fonctionne...

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

  9. #9
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    OK. Donc le 'root' prenait la place d'un paramètre.
    Alors que je pensais qu'il prenait la place du "self".

    Un problème d'éliminé....on peut passer aux choses sérieuses, c'est à dire mon rayon.
    Qui doit être déterminé par l'utilisateur, grâce au curseur. J'en suis donc là :
    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
    def cercle(can,x,y,r) :
        "fonction qui permet de dessiner un cercle de centre x,y et de rayon r"
        can.create_oval(x-r,y-r,x+r,y+r)
     
    class Rond(Frame) :
        "classe qui permet d'instancier des ronds"
        def __init__(self,larg=400,haut=400) :
            Frame.__init__(self)
            self.curs = Scale(self,length=300,orient=HORIZONTAL,label='Rayon :',
                  troughcolor='pink',sliderlength=25,showvalue=0,from_=50,
                  to=larg/2,tickinterval=larg/2/10,command=self.valeur)
            self.curs.pack(side=BOTTOM)
     
            self.can = Canvas(self,bg='ivory',width=larg,height=haut)
            self.can.pack()
     
            self.larg,self.haut = larg,haut
            self.x,self.y = self.larg/2,self.haut/2
     
            self.master.bind('<Control-M>',self.dessine)
            self.pack()
     
     
        def dessine(self) :
            "pour dessiner un cercle dans le canevas"
     
            self.r = self.valeur
            self.can.delete('ALL')
            cercle(self.can,self.x,self.y,self.r)
     
     
        def valeur(self,r) :
            """méthode qui récupère la valeur du rayon définie par l'utilisateur
    à l'aide du curseur"""
            self.r = int(r)
            self.event_generate('<Control-M>')
     
     
     
     
    ## Test Programme ##
     
    if __name__ == "__main__" :
        ce = Rond()
     
     
        ce.mainloop()
    Donc ... déjà je ne sais pas où et comment je peux l'initialiser. Ni si c'est nécessaire.
    Et puis comment je le relie au curseur ?
    Il faut une variable ?

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par RowanMayfair Voir le message
    on peut passer aux choses sérieuses, c'est à dire mon rayon.
    Mais c'est une chose sérieuse, car si votre programme ne fonctionne toujours pas, c'est que vous avez des opérations qui vous imposent une interface que vous ne respectez pas (et qui sont signalées par des messages d'erreurs différents mais qui ont tous cette même cause).

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

  11. #11
    Membre éclairé Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    Mars 2019
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : Mars 2019
    Messages : 247
    Par défaut
    si je ne respecte pas, c'est parce que je ne comprends pas tkinter.
    Ce n'est pas de la mauvaise volonté. En gros, à chaque fois, je fais des trucs, et je tripote le code jusqu'à ce qu'il n'y ait plus de message d'erreur. Ce qui fonctionnait au départ mais de moins en moins au fur et à mesure que ça se complique. Forcément.

    En résumé, j'ai de grosses lacunes avec tkinter, il y a des tas de choses de bases que je ne comprends pas, en tout cas pas au point d'être capable de manipuler.

    Je pensais en être sortie en passant au chapitres suivants, mais nous y voilà de nouveau.

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Citation Envoyé par RowanMayfair Voir le message
    si je ne respecte pas, c'est parce que je ne comprends pas tkinter.
    Avant d'aborder tkinter, vous savez ce qu'est une fonction et que pour l'appeler, il faut lui passer des paramètres et que çà vous retourne un résultat (ou None).
    Et cette fonction/interface soit c'est vous qui l'avez écrite (et vous savez comment l'utiliser) soit, c'est tkinter qui vous la propose et vous devez lire la documentation pour apprendre à l'utiliser.
    Et si çà ne fonctionne pas, il faut juste relire la documentation et essayer de coder des exemples pour s'assurer que vous avez bien compris sinon comment çà marche au moins comment l'utiliser.

    Il n'y a rien à comprendre: c'est juste appliquer méthode, rigueur et cohérence.

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

Discussions similaires

  1. Récupérer les coordonnées du curseur pour tracer une ligne ou un cercle
    Par benyouyou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/08/2015, 16h38
  2. Comment limiter les mouvements du curseur??
    Par scorpiwolf dans le forum C++Builder
    Réponses: 9
    Dernier message: 07/07/2002, 22h09
  3. Comment masquer le curseur de la souris ?
    Par benj63 dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/06/2002, 18h54
  4. Position du curseur dans Edit
    Par MrJéjé dans le forum C++Builder
    Réponses: 3
    Dernier message: 20/06/2002, 17h09
  5. savoir si 1 point est a l'intérieur d'un cercle ...
    Par skarladevobsy dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/05/2002, 18h14

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