Hallo Roland
Ich verstehe zwar nicht genau was Du möchtest,
aber mit dem folgenden Code kannst Du mit
gedrückter linken Maustaste ein rotes Recht-
eck auf der Canavas herumbewegen.
Gruss Fritz
Code: Alles auswählen
from Tkinter import*
class RecMove:
def __init__(self,root):
#~~ Die Canvas wird erstellt
self.canvas = Canvas(root,width=300, height=400, bg="bisque",relief = "groove",bd =2)
self.canvas.pack()
self.canvas.bind("<Button-1>" ,self.MouseButton1Press)
self.canvas.bind("<ButtonRelease 1>" ,self.MouseButton1Release)
self.canvas.bind("<Motion>" ,self.MouseMove)
self.moveflag = FALSE
self.zeichnen()
def zeichnen(self):
xpos = 50
ypos = 100
self.viereck = self.canvas.create_rectangle( xpos,
ypos,
xpos+100,
ypos+80,
outline ="red",
)
self.PositionDisplay(xpos,ypos)
def MouseButton1Press(self,event):
#~~ Freigabe für Bewegung (Linke Maustaste gedrückt)
self.moveflag = TRUE
def MouseButton1Release(self,event):
#~~ Sperrung der Bewegung (Linke Maustaste losgelassen)
self.moveflag = FALSE
def MouseMove(self,event):
#~~ Bewege Rechteck mit der Maus
if self.moveflag == TRUE:
#~~ Freigabe für Bewegung OK!
xpos = event.x
ypos = event.y
self.canvas.delete(self.viereck)
self.viereck = self.canvas.create_rectangle(xpos,
ypos,
event.x + 100,
event.y + 80,
outline ="red",
)
self.PositionDisplay(xpos,ypos)
def PositionDisplay(self,xpos=0,ypos=0):
#~~ Schreibt die X und Y-Position auf die Canvas
try:
self.canvas.delete(self.DispXpos)
except:
#~~ Das Textobjekt self.DispXpos existiert noch nicht
pass
self.DispXpos = self.canvas.create_text(10,
10,
text="X-Position = " + str(xpos),
fill="blue",
anchor="w")
try:
self.canvas.delete(self.DispYpos)
except:
#~~ Das Textobjekt self.DispYpos existiert noch nicht
pass
self.DispYpos = self.canvas.create_text(10,
25,
text="Y-Position = " + str(ypos),
fill="blue",
anchor="w")
self.canvas.create_text(10,300, text="Gruss Fritz ",anchor="w")
if __name__ == '__main__':
root = Tk()
RecMove(root)
root.mainloop()