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 :

Création d'un arc - Widget Canvas [Python 3.X]


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 67
    Par défaut Création d'un arc - Widget Canvas
    Bonjour à tous,

    Je cherche à créer, via le module tkinter et le widget Canvas, un grand rond divisé en 9 "parts de camemberts". Comme la roue de la fortune, par exemple.
    Pour cela, je souhaite créer 9 parts grâce à la fonction canvas.create_arc, ces 9 parts formeront ma roue. Mon problème : je ne comprends absolument pas les coordonnées de l'arc.

    Mon canevas fais 400*400. Voici l'extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    x0,y0,x1,y1 = 100, 100, 300, 300
    coord = x0, y0, x1, y1
    can.create_arc(coord,fill="yellow")
    J'ai cherché partout, on explique que : le point ( x0, y0 ) est le coin supérieur gauche et le point ( x1, y1 ) le coin inférieur droit d'un rectangle dans lequel l'ellipse est tracée.

    Hélas, quand je trace, malgré tous les essais que j'ai réalisé, cela ne correspond pas à la définition. Qu'est-ce exactement ?

    Si vous souhaitez le code en entier pour essayer :
    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
     
    from tkinter import*
     
    def Interface():
     
        global fen,can
        fen=Tk()
        fen.wm_title("La Roue de la Fortune")
        lrg=fen.winfo_reqwidth()
        htr=fen.winfo_reqheight()
        el=fen.winfo_screenwidth()
        eh=fen.winfo_screenheight()
        fen.geometry("%dx%d+%d+%d"%(6*lrg,3*htr,(el-6.08*lrg)/2,(eh-3.15*htr)/2))
     
        can=Canvas(fen,bg='light blue',height=400,width=400)
        coord = 100, 100, 300, 300
        can.create_arc(coord,fill="yellow")
        can.grid(row=0,column=0,padx=10,pady=10)
     
        Button(fen,text='Quitter',command=fen.destroy).grid(row=0,column=1,padx=400,pady=0)
     
     
    Interface()
    fen.mainloop()
    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Citation Envoyé par Leododo Voir le message
    Bonjour à tous,

    Je cherche à créer, via le module tkinter et le widget Canvas, un grand rond divisé en 9 "parts de camemberts". Comme la roue de la fortune, par exemple.
    Pour cela, je souhaite créer 9 parts grâce à la fonction canvas.create_arc, ces 9 parts formeront ma roue. Mon problème : je ne comprends absolument pas les coordonnées de l'arc.

    Mon canevas fais 400*400. Voici l'extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    x0,y0,x1,y1 = 100, 100, 300, 300
    coord = x0, y0, x1, y1
    can.create_arc(coord,fill="yellow")
    J'ai cherché partout, on explique que : le point ( x0, y0 ) est le coin supérieur gauche et le point ( x1, y1 ) le coin inférieur droit d'un rectangle dans lequel l'ellipse est tracée.

    Hélas, quand je trace, malgré tous les essais que j'ai réalisé, cela ne correspond pas à la définition. Qu'est-ce exactement ?

    Si vous souhaitez le code en entier pour essayer :
    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
     
    from tkinter import*
     
    def Interface():
     
        global fen,can
        fen=Tk()
        fen.wm_title("La Roue de la Fortune")
        lrg=fen.winfo_reqwidth()
        htr=fen.winfo_reqheight()
        el=fen.winfo_screenwidth()
        eh=fen.winfo_screenheight()
        fen.geometry("%dx%d+%d+%d"%(6*lrg,3*htr,(el-6.08*lrg)/2,(eh-3.15*htr)/2))
     
        can=Canvas(fen,bg='light blue',height=400,width=400)
        coord = 100, 100, 300, 300
        can.create_arc(coord,fill="yellow")
        can.grid(row=0,column=0,padx=10,pady=10)
     
        Button(fen,text='Quitter',command=fen.destroy).grid(row=0,column=1,padx=400,pady=0)
     
     
    Interface()
    fen.mainloop()
    Merci d'avance
    Bonjour,
    Les dimensions correspondent à l’ellipse complète, ou au cercle.
    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
    from tkinter import*
     
    def Interface():
     
        global fen,can
        fen=Tk()
        fen.wm_title("La Roue de la Fortune")
        lrg=fen.winfo_reqwidth()
        htr=fen.winfo_reqheight()
        el=fen.winfo_screenwidth()
        eh=fen.winfo_screenheight()
        fen.geometry("%dx%d+%d+%d"%(6*lrg,3*htr,(el-6.08*lrg)/2,(eh-3.15*htr)/2))
     
        can=Canvas(fen,bg='light blue',height=400,width=400)
        coord = 0, 0, 300, 300
        can.create_arc(coord,fill="yellow", extent=180)
        can.grid(row=0,column=0,padx=10,pady=10)
     
        Button(fen,text='Quitter',command=fen.destroy).grid(row=0,column=1,padx=400,pady=0)
     
     
    Interface()
    fen.mainloop()
    Pour comprendre, il faut essayer ceci (je n'ai modifié que x0, y0 et ajouté une option très importante ici: "extent" qui correspond à l'angle désiré).

    Clodion

    PS: pour être plus explicite: x0, y0, x1, y1 correspondent à l'ellipse complète (et est donc équivalente à ".create_oval" avec les paramètres supplémentaires d'angles et de type de style, ie: arc, corde ou secteur et bien sûr, "start").

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

    Il faut aussi jouer avec les paramètres "start", "extent" et probablement "style" décrits ici. Ce qui donne un truc comme çà:
    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
    >>> import tkinter as tk
    >>>
    >>> w = tk.Canvas()
    >>> w.pack()
    >>>
    >>> COLORS = ('red', 'blue', 'green', 'black', 'grey')
    >>> angle = 360//len(COLORS)
    >>> for x, color in enumerate(COLORS):
    ...     w.create_arc(10,10, 100, 100,
    ...            style='pieslice', fill=color,
    ...            start=x*angle, extent=angle)
    ...
    1
    2
    3
    4
    5
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 67
    Par défaut
    Merci à vous deux

    Clodion : J'ai compris, j'ai mis extend=359.9 (360 degrés en gros) et j'ai bien vu mon cercle, et le carré qui l'entoure va bien de 0,0 à 300,300, merci beaucoup !

    Wiztricks: J'ai testé ton code,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    fen=Tk()
    w=Canvas(fen,bg='light blue',height=400,width=400)
    w.pack()
     
    COLORS = ('red', 'blue', 'green', 'black', 'grey')
    angle = 360//len(COLORS)
    for x, color in enumerate(COLORS):
        w.create_arc(10,10, 300, 300,style='pieslice', fill=color,start=x*angle, extent=angle)
    C'est ce que je cherchais à faire oui, l'idée que j'avais aurait pris quelques lignes de plus, merci pour cette aide

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/05/2014, 13h18
  2. Réponses: 18
    Dernier message: 05/06/2013, 12h12
  3. [QtGui] Création et réutilisation de widget
    Par black-falco dans le forum PyQt
    Réponses: 6
    Dernier message: 09/05/2011, 16h10
  4. Demande aide pour evenement sur widget Canvas
    Par prolog22000 dans le forum Tkinter
    Réponses: 10
    Dernier message: 19/03/2010, 06h34
  5. création d'un custom widget
    Par telemarker05 dans le forum Qt
    Réponses: 4
    Dernier message: 25/10/2009, 18h22

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