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 :

Python Tkinter graphe


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Points : 20
    Points
    20
    Par défaut Python Tkinter graphe
    Bonjour a tous ,
    Je viens demander de l'aide en ce qui concerne Tkinter.
    Je voudrais realiser un graphe representant sommet ( point ) / Arete ( ligne)
    J'ai en fait des données du type :
    A B ( A interagit avec B : il y aura une arete entre A et B)
    A C
    B D
    B E
    Je me demande tout d'abord s'il est possible de realiser un tel graphe avec Tkinter ? J'aimerai qu'au dessus de chaque point modelisant mon sommet, il y ait le nom du sommet ? est ce possible ?
    Quelqu'un pourrait m'aider ?

    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    bonjour,

    si un graphe sous forme d'image te suffit, tu peux regarder du côté de graphviz dont il existe des bindings pour python.
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    Je ne pense pas que ceci puisse m'aider, il faut que je l'integre à mon interface ...

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonsoir,

    Le canvas avec line et text

    @+
    Merci d'utiliser le forum pour les questions techniques.

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    Pauskawa pourriez vous etre plus explicite svp , je suis desolée, je debute en python et encore plus sous Tkinter !

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Un exemple vite fais avant le taf

    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
    from Tkinter import *
     
    master = Tk()
     
    cv = Canvas(master, width=100, height=100)
    cv.pack()
     
    A = (50, 50)
    B = (10, 80)
    C = (75, 75)
     
    cv.create_line(A,B)
    cv.create_text(50, 40, text='AB') # A positionner suivant le sommet
    cv.create_line(A,C)
    cv.create_text(75, 85 , text='AC')
     
    mainloop()
    C'est ce que tu recherche ?

    @+
    Merci d'utiliser le forum pour les questions techniques.

  7. #7
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Et pour les points tu a le dico

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dicopoints = {A:(50, 50), B:(10, 80), C:(75, 75)}
    Comme cela tu utilise les keys pour le create_text
    Merci d'utiliser le forum pour les questions techniques.

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    je vais regarder, le probleme c'est que je n'ai pas les coordonnées de mes points ... Je vais essayer de modifier ce que vous avez mi.Merci

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    Il est aussi possible d'intégrer matplotlib à tkinter.

    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
     
    #!/usr/bin/env python
    import matplotlib
    matplotlib.use('TkAgg')
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
    from matplotlib.figure import Figure
     
    import Tkinter as Tk
     
    x = (1,2,3,4)
    y = (4,3,6,2)
     
    root = Tk.Tk()
    lbl = Tk.Label(root, text="Mon graph")
     
    fig = Figure((5,4), dpi=100)
    canvas = FigureCanvasTkAgg(fig, master=root)
    axes = fig.add_subplot(111)
     
    toolbar = NavigationToolbar2TkAgg(canvas, root)
     
    axes.plot(x,y)
     
    lbl.pack()
    canvas._tkcanvas.pack()
     
    Tk.mainloop()

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    Merci, je n'arrive pas a faire fonctionner ce que vous m'avez donné !
    j'ai trouvé un programme qui genère des graphe : Graphviz
    Est ce que quelqu'un sait si je peux, à partir d'une fonction ecrite sous python, faire en sorte de Graphviz me fasse le graphe que je souhaite, et afficher l'image qu'il me sort dans mon interface graphique ?
    J'ai regardé, apparement il faudrait que j'utilise os.system ? mais comment faire ?
    Merci d'avance pour votre aide.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 222
    Points : 290
    Points
    290
    Par défaut
    ça me semble bien compliqué pour ce que tu veux faire.
    Qu'est ce qui d'embête dans les exemples donnés?

    Sinon tu peux aller voir du coté de WCK.

    Tu peux aussi utiliser wxpython ou pyqt qui ont des widgets intégrés pour créer des graphs.

  12. #12
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Est il possible d'avoir la fonction en question ?
    Je suis sur qu'un 'simple' canvas fais l'affaire.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    J'ai reussi a faire fonctionner l'exemple avec matplotlib mais ce n'est pas ce que je recherche : je ne cherche pas a creer un graph avec des axes x et y, je veux plutot un graphe comme les fais graphviz ... est il possible de creer ce genre de graphe avec Tix ?

  14. #14
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    J'ai essayé de télécharger Graphviz, mais je ne trouve pas pour le Python... En fait, j'ai peut-être pas bien vu sur le site, mais est-ce que Graphviz est fait en Python ????

  15. #15
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    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
    from Tkinter import *
    from random import randint
     
    def tafonction():
        # juste pour simuler ta fonction : creation de x, y aleatoire avec randint
        x = randint(0, 800)
        y = randint(0, 600)
        return x, y
     
    def Traitement():
     
        listepoint = ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T')
     
        for point in listepoint:
            # Sauvegarde des points precedents
            try:
                if x: # Si x existe deja : donc pas le premier point
                    ancienx = x # On garde les x, y
                    ancieny = y # du point precedent
            except:
                pass # Sinon c'est le premier point
     
            x, y = tafonction() # Recuperation des nouveaux x, y suivant la fonction tafonction()
     
            # On trace les lignes
            try:
                if ancienx:
                    # Si ce n'est pas le premier point on trace une ligne
                    cv.create_line((ancienx, ancieny),(x,y))
                    # Mise en place du texte au dessu ou en dessou suivant if ancieny > y
                    if ancieny > y:
                        cv.create_text(x, y-10 , text=listepoint[listepoint.index(point)-1] + point)
                    else:
                        cv.create_text(x, y+10 , text=listepoint[listepoint.index(point)-1] + point)
                        print listepoint(listepoint.index(point)-1) + point
            except:
                pass # C'est le premier point
     
    # Interface
    master = Tk()
    cv = Canvas(master, width=800, height=600)
    cv.pack()
    Button(master, text="Quitter", command = master.destroy).pack()
    Traitement()
    mainloop()
    @+
    Merci d'utiliser le forum pour les questions techniques.

  16. #16
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    et bien je ne sais pas, j'ai trouvé ce lien, alors j'ai pensé qu"on pouvait faire des choses avec python : http://www.graphviz.org/Resources.php dans la rubrique 'language binding' et il y a python qui y figure ...

  17. #17
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Points : 20
    Points
    20
    Par défaut
    Merci pausekawa, je vais regarder en detail ce que vous avez mi !

  18. #18
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Pour aller plus loin le lien de calogerogigante est pas mal.

    @+
    Merci d'utiliser le forum pour les questions techniques.

Discussions similaires

  1. python tkinter et les classes
    Par surfing_lezard dans le forum Tkinter
    Réponses: 12
    Dernier message: 26/07/2012, 06h09
  2. Class Python Tkinter
    Par Keyve dans le forum Tkinter
    Réponses: 2
    Dernier message: 04/04/2012, 22h06
  3. La POO avec python Tkinter
    Par alberth dans le forum Tkinter
    Réponses: 2
    Dernier message: 06/05/2009, 14h53
  4. python, tkinter et les sockets (et les threads)
    Par bomberwaterman dans le forum Réseau/Web
    Réponses: 6
    Dernier message: 02/01/2009, 19h53
  5. Conteneurs en Python Tkinter ?
    Par tuxout dans le forum Tkinter
    Réponses: 2
    Dernier message: 09/04/2007, 18h46

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