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 93 94 95 96
|
"""
On a ici une image dans un ScrolledText
L'image est plus grande que le widget
J'ai pas tout compris sur les coordonnées, mais pour pouvoir pointer
sur des coordonnées correctes, il faut tenir compte
- de la taille de l'image
- la position du scroll
- la position de la souris
çà marche pour les mouvements souris, mais pour les dessins (clic),
il faut déduire des constantes sur x, y
"""
from tkinter import *
from turtle import *
fen1= Tk()
def evalX(X):
return int((X + can1.xview()[0] * float(photo.width())))
def evalY(Y):
return int((Y + can1.yview()[0] * float(photo.height())))
def clic(event):
x= int(x3.get())-856 #d'où on sort çà ?????
y= int(y3.get())-680 # çà doit dépendre de la taille de l'image
can1.create_oval(x- 5, y-5, x+5, y+5, outline= 'red', width= 2)
print('XEvt', event.x, 'YEvt:', event.y, 'Xcoord:', x3.get(), 'YCoord:', y3.get())
x1= StringVar()
y1= StringVar()
x2= StringVar()
y2= StringVar()
x3= StringVar()
y3= StringVar()
def mouvement(event):
x1.set(event.x)
y1.set(event.y)
x2.set(can1.xview()[0] * xmax)
y2.set(can1.yview()[0] * ymax)
x3.set(evalX(event.x))
y3.set(evalY(event.y))
lab= Label(fen1, text= 'XEvent:').grid(row= 0, column= 0)
lab= Label(fen1, text= 'YEvent:').grid(row= 1, column= 0)
lab= Label(fen1, text= 'XOfs:').grid(row= 2, column= 0)
lab= Label(fen1, text= 'YOfs:').grid(row= 3, column= 0)
lab= Label(fen1, text= 'XCoord:').grid(row= 4, column= 0)
lab= Label(fen1, text= 'YCoord:').grid(row= 5, column= 0)
entr1= Entry(fen1, textvariable= x1)
entr2= Entry(fen1, textvariable= y1)
entr3= Entry(fen1, textvariable= x2)
entr4= Entry(fen1, textvariable= y2)
entr5= Entry(fen1, textvariable= x3)
entr6= Entry(fen1, textvariable= y3)
entr1.grid(row= 0, column= 1)
entr2.grid(row= 1, column= 1)
entr3.grid(row= 2, column= 1)
entr4.grid(row= 3, column= 1)
entr5.grid(row= 4, column= 1)
entr6.grid(row= 5, column= 1)
def sauver():
monimage= can1.postscript(fontmap= 'fontmap')
f= open('sortie.ps', 'w')
f.write(monimage)
f.close()
but= Button(fen1, text= 'Sauver', command= sauver).grid\
(row= 6, column= 0)
photo= PhotoImage(file= 'Aube8.gif')
can1= ScrolledCanvas(fen1,\
width= 800, height= 600,\
canvwidth=photo.width(), canvheight=photo.height())
can1.create_image(0, 0, image= photo)
can1.grid()
can1.bind('<Motion>', mouvement)
can1.bind('<ButtonPress-1>', clic)
#info(photo)
#info(Frame)
#info(can1.create_image)
xmax= can1.winfo_vrootwidth()
ymax= can1.winfo_vrootheight()
print(xmax, ymax)
print('Larg:', photo.width(), 'Haut:', photo.height())
fen1.mainloop() |