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 :

Probleme avec ScrolledCanvas


Sujet :

Tkinter Python

  1. #1
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut Probleme avec ScrolledCanvas
    Bonjour,

    je suis en train de faire un petit programme pour faire des dessins, (style paint).

    J'utilise ScrolledCanvas(Pmw) comme Canvas.

    Seulement, lorsque je déplace les barres de défilement, le trait ne se positionne pas la ou je clique mais décalé.


    Je pense que si je clique sur la partie visible du Canvas ,après avoir bouger la barre de défilement, au pixel x =50 et y = 50

    Il créera le trait/point au pixel, x = 50, y = 50 du Canvas entier au lieu du pixel x= 50 et y =50 du Canvas visible.


    J'aimerais savoir comment, on peut calculer le nombre de pixel décalé à chaque défilement, ou bien une autre méthode pour que le pixel se place bien.

    Edit: Le script
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    from Tkinter import *
    import Pmw
     
    Pmw.initialise()
     
     
    class Paint(Pmw.ScrolledCanvas,Frame):
        def __init__(self,fen=None):
     
            Frame.__init__(self)
            self.master.title('Paint v1.4')
     
     
            Pmw.ScrolledCanvas.__init__(self,
                     usehullsize = 1, hull_width =500, hull_height =300,
                     canvas_bg ='white', canvasmargin =10,
                     borderframe =1,
                     borderframe_borderwidth =3)
     
     
            self.configure(vscrollmode ='dynamic', hscrollmode ='dynamic')        
            self.pack(side = BOTTOM,padx =5, pady =5, expand =YES, fill =BOTH)
     
     
     
            self.can = self.interior()
     
            self.can.create_rectangle(0,0,0,0,fill='white',width=0)
            self.can.create_rectangle(501,301,501,301,fill='white',width = 0)
     
     
            self.can.bind('<B1-Motion>',self.modif)
            self.can.bind('<ButtonPress-1>',self.clic)
            self.can.bind('<B3-Motion>',self.modif2)
            self.can.bind('<ButtonPress-3>',self.clic)
     
            self.can.focus_set()
            self.resizescrollregion()
     
            self.grandeListe=[]
            self.epaisseur=1
     
     
     
     
        def clic(self,event):
            self.x=event.x
            self.y=event.y
            self.l=[]
     
            try:
                self.epaisseur = self.epaisseur2.choix()
            except:
                1
     
     
        def modif(self,event):
            try:
                self.coul= self.coul2.choix()
            except:
                self.coul= 'black'
     
            x=event.x
            y=event.y
     
            a = self.can.create_line(x,y,self.x,self.y,fill=self.coul,width=self.epaisseur)#,outline="red")
            self.l.append(a)
     
            self.x=event.x
            self.y=event.y
     
        def modif2(self,event):
            try:
                self.dcoul= self.dcoul2.choix()
            except:
                self.dcoul= 'white'
     
            x=event.x
            y=event.y
     
            a=self.can.create_line(x,y,self.x,self.y,fill=self.dcoul,width=self.epaisseur)#,outline="red")
            self.l.append(a)
     
            self.x=event.x
            self.y=event.y
     
     
     
    if __name__ == '__main__':
     
        app=Paint().mainloop()
    Et si vous saviez d'ou venez l'erreur qui se produit lorsque l'on ferme le programme via la petite croix?
    Merci d'avance, Elnabo

  2. #2
    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 convertir les coordonnées de la fenêtre en coordonnées du Canvas c'est .canvasx et .canvasy :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    from Tkinter import *
    import Pmw
     
    # Pmw.initialise()
     
     
    class Paint(Pmw.ScrolledCanvas, Frame):
        def __init__(self,fen=None):
     
            Frame.__init__(self)
            self.master.title('Paint v1.4')
     
     
            Pmw.ScrolledCanvas.__init__(self,
                     usehullsize = 1, hull_width =500, hull_height =300,
                     canvas_bg ='white', canvasmargin =10,
                     borderframe =1,
                     borderframe_borderwidth =3)
     
     
            self.configure(vscrollmode ='dynamic', hscrollmode ='dynamic')        
            self.pack(side = BOTTOM,padx =5, pady =5, expand =YES, fill =BOTH)
     
     
     
            self.can = self.interior()
     
            self.can.create_rectangle(0,0,0,0,fill='white',width=0)
            self.can.create_rectangle(501,301,501,301,fill='white',width = 0)
     
     
            self.can.bind('<B1-Motion>',self.modif)
            self.can.bind('<ButtonPress-1>',self.clic)
            self.can.bind('<B3-Motion>',self.modif2)
            self.can.bind('<ButtonPress-3>',self.clic)
     
            self.can.focus_set()
            self.resizescrollregion()
     
            self.grandeListe=[]
            self.epaisseur=1
     
     
     
     
        def clic(self,event):
            self.x=self.can.canvasx(event.x)
            self.y=self.can.canvasy(event.y)
            self.l=[]
     
            try:
                self.epaisseur = self.epaisseur2.choix()
            except:
                1
     
     
        def modif(self,event):
            try:
                self.coul= self.coul2.choix()
            except:
                self.coul= 'black'
     
            x = self.can.canvasx(event.x)
            y = self.can.canvasy(event.y)
     
            a = self.can.create_line(x,y,self.x,self.y,fill=self.coul,width=self.epaisseur)#,outline="red")
            self.l.append(a)
     
            self.x=self.can.canvasx(event.x)
            self.y=self.can.canvasy(event.y)
     
        def modif2(self,event):
            try:
                self.dcoul= self.dcoul2.choix()
            except:
                self.dcoul= 'white'
     
            x=self.can.canvasx(event.x)
            y=self.can.canvasy(event.y)
     
            a=self.can.create_line(x,y,self.x,self.y,fill=self.dcoul,width=self.epaisseur)#,outline="red")
            self.l.append(a)
     
            self.x=self.can.canvasx(event.x)
            self.y=self.can.canvasy(event.y)
     
     
     
    if __name__ == '__main__':
     
        app=Paint()
        app.mainloop()
    Bon code

  3. #3
    Futur Membre du Club
    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
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup, ça marche.

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

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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