Seite 1 von 1

canvas - move

Verfasst: Dienstag 2. September 2003, 19:52
von rogen
ich möchte mir einen zimmerplan für micht schreiben.

frage:

kann ich ein viereck nach den klick mit der linken maustast moven.


Code: Alles auswählen

class zimmer:
	def __init__(self):
		self.canvas = Canvas(root,width=300, height=400, bg="white")
		self.canvas.pack()
		
		self.zeichnen()
		
	def zeichnen(self):
		
		for a in range(1,10):
			self.viereck = self.canvas.create_rectangle( 50, a + 50, a + 100,80)
			self.canvas.bind("<Button-1>",self.move)
			self.canvas.bind("<move>",self.move)

		for a in range(1,10):
			self.linie = self.canvas.create_line( 50, a + 50, a + 100,80)
			self.canvas.bind("<Button-1>",self.move)


	def move(self,event):
		print event.x
		print event.y
		
		self.linie = self.canvas.create_line( event.x + 10, event.y + 10, event.x - 10,event.y - 10)


Verfasst: Dienstag 2. September 2003, 23:51
von wuf
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()

Verfasst: Mittwoch 3. September 2003, 20:42
von rogen
super danke