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 :

Problème de Classe


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Par défaut Problème de Classe
    Bonjour,

    J'essaye de réaliser un petit code permettant de faire des dessins sur un canevas en me servant des Clasees, à l'aide de Tkinter.

    J'ai donc crée un script, qui permet de choisir une couleur en Hexadécimal et un autre qui permet de dessiner dans un canvas avec une couleur choisie avant.

    J'ai donc voulu utiliser les deux ensemble pour pouvoir changer la couleur et écrire en même temps.

    Voici le code du fichier 1:
    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
    # -*- coding: cp1252 -*-
    from Tkinter import *
     
     
    class ChoixCouleur():
        def __init__(self):
            self.fen = Tk()
     
            self.coul= "#000000"
            self.can = Canvas(self.fen,height=250,width=25000)
            self.can.pack()
     
            self.rectangle = self.can.create_rectangle(85,105,155,175,fill="#000000")
     
            Scale(self.fen, length=500, orient=HORIZONTAL,
          troughcolor ='dark grey', sliderlength =20,
          showvalue =1, from_=0, to=16777215,
          command=self.change_couleurH).pack(side=BOTTOM)
     
            self.fen.mainloop()
     
        def change_couleurH(self,x):
            coul= hex(int(x))
            self.coul = "#"+ "0"*(8-len(coul)) + coul[2:]
            self.can.itemconfigure(self.rectangle,fill=self.coul)
     
     
    if __name__ == '__main__':
        t = ChoixCouleur()
    et du fichier 2:
    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
    from Tkinter import *
    from 1 import *
     
    class Paint():
        def __init__(self):
     
            self.coul=ChoixCouleur()
     
            self.fen1= Tk()
            self.can1 = Canvas(self.fen1,width=200,height=200,bg="white")
     
            self.coul='#fffff0"
     
            self.can1.bind('<B1-Motion>',self.modif)
            self.can1.bind('<ButtonPress-1>',self.clic)
     
            self.can1.pack()
            self.fen1.mainloop()
     
        def clic(self,event):
            self.x=event.x
            self.y=event.y
     
        def modif(self,event):
            x=event.x
            y=event.y
     
            self.can1.create_line(x,y,self.x,self.y,fill=self.coul)#,outline="red")
     
            self.x=event.x
            self.y=event.y
     
     
     
    if __name__ == '__main__':
        Paint().mainloop()
    Seulement lorsque je lance le fichier 2 , je peux uniquement choisir la couleur et je ne peux donc pas dessiner, si vous pouviez me dire ce qui cloche dans mon programme, cela m'aiderait beaucoup.

    Merci d'avance Elnabo

  2. #2
    Membre Expert 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
    Par défaut
    Bonsoir,

    Dans un premier temps : Jamais deux fenêtres Tk, du Toplevel.

    Cela ne te dérange pas le self.fen = Tk()/self.fen.mainloop() dans l'__init__ de ChoixCouleur() ?

    @+

    Note : from 1 import * : Pas bien

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Par défaut
    Merci pour la réponse, mais comme je débute un peu j'aimerais avoir quelque explication.

    Citation Envoyé par PauseKawa Voir le message
    Bonsoir,

    Dans un premier temps : Jamais deux fenêtres Tk, du Toplevel.
    Le toplevel est une autre sorte de fenêtre Tk c'est bien ca?
    Les Canvas fonctionnent-t-ils dessus aussi?


    Sinon pour les fen =Tk() // fen.mainloop(), il faudrait plutôt les mettre dans le if __name__== '__main__' ?


    Et sinon, je ne comprends pas pourquoi from 1 import * n'est pas bien car après tout il n'y a qu'une seule chose à importer, ça ne devrait rien changer?

    Sinon encore merci pour la réponse rapide

  4. #4
    Membre Expert 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
    Par défaut
    Bonjour,

    Le Toplevel est un widget de style Frame qui s'affiche dans une autre fenetre, avec les décorateurs du WM.
    Le fait d'utiliser plusieurs Tk est problèmatique car le premier deviens le root... Donc si tu utilise un widget ou autre (PhotoImage surtout) dans le second et que celui ci fais référence au root... Il arrive que tu ne puisse pas dessiner par exemple

    Pour le mainloop :

    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
    from Tkinter import *
     
    class Paint(Tk):
        def __init__(self,parent):
            Tk.__init__(self,parent)
            self.parent = parent
     
            self.coul=ChoixCouleur()
     
            self.can1 = Canvas(self,width=200,height=200,bg="white")
     
            self.coul="#fffff0"
     
            self.can1.bind('<B1-Motion>',self.modif)
            self.can1.bind('<ButtonPress-1>',self.clic)
     
            self.can1.pack()
     
        def clic(self,event):
            self.x=event.x
            self.y=event.y
     
        def modif(self,event):
            x=event.x
            y=event.y
     
            self.can1.create_line(x,y,self.x,self.y,fill=self.coul)#,outline="red")
     
            self.x=event.x
            self.y=event.y
     
    if __name__ == '__main__':
        app=Paint(None)
        app.mainloop()
    Et tu integre le reste du code (ou inversement si tu utilise choix couleur pour main) avec un Toplevel.

    Pourquoi pas import 1 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      File "2.py", line 2
        from 1 import *
             ^
    SyntaxError: invalid syntax
    @+

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 12
    Par défaut
    C'est bon j'ai trouvé et du coup j'ai aussi réussi à avoir une changement de couleur efficace!!

Discussions similaires

  1. Problème de classe.
    Par maminova77 dans le forum Langage
    Réponses: 5
    Dernier message: 30/01/2006, 21h39
  2. Problème sur classe Transformer avec les <!--
    Par tykool dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 10/01/2006, 10h20
  3. Problème de classe
    Par DeusXL dans le forum DirectX
    Réponses: 15
    Dernier message: 04/12/2005, 14h37
  4. Problème de classe
    Par tidou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/10/2005, 17h49
  5. [FLASH MX2004] Problème de classe
    Par JulPoWeR dans le forum Flash
    Réponses: 1
    Dernier message: 10/07/2005, 22h51

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