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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
|
"""
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 *
import tkinter.ttk
from turtle import *
import os
def quitter():
fen1.destroy()
fen1.quit()
def chargeimage():
global photo, can1
i= filedialog.FileDialog(fen1)
fname= i.go(dir_or_file=os.curdir, pattern= '*.gif')
try:
photo= PhotoImage(file= fname)
except:
return
can1= ScrolledCanvas(framecanvas,\
width= photo.width()/2, height= photo.height()/2,\
canvwidth=photo.width(), canvheight=photo.height())
can1.create_image(0, 0, image= photo)
can1.grid(row= 1)
can1.bind('<Motion>', mouvement)
can1.bind('<ButtonPress-1>', clic)
# *********************************************************
def finptr(fptr):
fptr.destroy()
clique= 0
premxclic= 0
premyclic= 0
def recup_clicptr():
global clique, premxclic, premyclic,\
corrige_x, corrige_y
if clique== 0:
premxclic= xclic
premyclic= yclic
clique= 1
else:
if (premxclic!= xclic) | (premyclic!= yclic):
corrige_x= corrige_x + premxclic - xclic
corrige_y= corrige_y + premyclic - yclic
clique= 0
def regle_pointeur():
global corrige_x, corrige_y
fptr= Tk()
fptr.title('Réglage du pointeur')
r= 0
butt=Label(fptr, text= 'Cliquez sur la carte,').\
grid(row= r, column= 0)
r+= 1
butt=Label(fptr, text= 'Cliquez sur Marquer').\
grid(row= r, column= 0)
r+= 1
butt=Label(fptr, text= "puis sur le point où s'affiche un rond").\
grid(row= r, column= 0)
r+= 1
butt=Label(fptr, text= 'Cliquez à nouveau sur Marquer, et vérifiez').\
grid(row= r, column= 0)
r+= 1
butt= Button(fptr, text= 'Marquer', command= recup_clicptr)\
.grid(row= r, column= 0)
butt= Button(fptr, text= 'Fini', command= lambda arg= fptr: finptr(arg))\
.grid(row= r, column= 1)
fptr.mainloop()
# *********************************************************
def MenuBar():
global framemenu
framemenu= Menu(fen1)
filemenu= Menu(framemenu)
filemenu.add_command(label= 'Carte')
filemenu.add_command(label= 'Charger', underline= 0,
command= chargeimage)
filemenu.add_separator()
filemenu.add_command(label= 'Quitter', underline= 0,
command= quitter)
reglemenu= Menu(framemenu)
reglemenu.add_command(label= 'Pointeur', underline= 0,
command= regle_pointeur)
framemenu.add_cascade(label= 'Fichier' ,menu= filemenu)
framemenu.add_cascade(label= 'Réglages' ,menu= reglemenu)
fen1.config(menu= framemenu)
fen1= Tk()
fen1.title('Essai ScrolledCanvas')
MenuBar()
framebouton= Frame(fen1, bg= "blue", width= 500, height= 50)
framebouton.pack(side= BOTTOM, fill= NONE)
#""""""""""""""""""""
x3= StringVar()
y3= StringVar()
x3.set('abcd')
y3.set('efgh')
lab= Label(framebouton, text= 'XCoord:').grid(row= 0, column= 0)
lab= Label(framebouton, text= 'YCoord:').grid(row= 0, column= 2)
entr5= Entry(framebouton, textvariable= x3)
entr6= Entry(framebouton, textvariable= y3)
entr5.grid(row= 0, column= 1)
entr6.grid(row= 0, column= 3)
framebouton.pack()
#""""""""""""""""""""
xclic= 0
yclic= 0
def evalX(X):
return int((X + can1.xview()[0] * float(photo.width())))
def evalY(Y):
return int((Y + can1.yview()[0] * float(photo.height())))
#correction pour une image 1702 X 1353
corrige_x= -856
corrige_y= -680
def clic(event):
global xclic, yclic
xclic= int(x3.get())
x= xclic + corrige_x #d'où on sort çà ?????
yclic= int(y3.get())
y= yclic + corrige_y # çà doit dépendre de la taille de l'image
can1.create_oval(x- 5, y-5, x+5, y+5,\
outline= 'red', width= 2)
def mouvement(event):
x3.set(evalX(event.x))
y3.set(evalY(event.y))
# pour retrouver la fenetre sur son scroll
oldposx= 0
oldposy= 0
def toto(event):
global oldposx, oldposy
oldposx= can1.xview()[0]
oldposy= can1.yview()[0]
def toto1(event):
can1.xview_moveto(oldposx)
can1.yview_moveto(oldposy)
framecanvas= Frame(fen1, width= 500, height= 400)
can1= ScrolledCanvas(framecanvas,\
width= 500, height= 400,)
framecanvas.pack(side= TOP, fill= NONE, expand= 1)
chargeimage() #('Aube8.gif')
fen1.bind('<FocusOut>', toto)
fen1.bind('<FocusIn>', toto1)
fen1.mainloop() |
Partager