Einen "Punkt" mit der Maus verschieben!

Fragen zu Tkinter.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

@meister56:
In Zeile 16 gibt find_overlapping() einTupel zurück und
keine einzelne Id. Daher kann man die Punkte auch
nicht mehr bewegen, wenn sie übereinanderliegen.
Es sei denn, man sagt in Zeile 44:

Code: Alles auswählen

canvas.move(overlap_objekt[0], vektor[0], vektor[1])
Habe Deinen Code mal "OO-fiziert":
http://paste.pocoo.org/show/121358/

@Krisi12345:
Extra für Dich richten sich die Kreise auch auf einem Raster aus.

:wink:
yipyip
Danipol
User
Beiträge: 38
Registriert: Sonntag 1. Februar 2009, 21:08

Es ginge auch sehr viel schneller!

Code: Alles auswählen

from Tkinter import *

root=Tk()

c=Canvas(root, width=500, height=500)
c.pack()

class Kreis(object):
    def __init__(self, canvas):
        self.GEOM=canvas.create_oval(0, 0, 10, 10)
        self.canvas=canvas
        

    def size(self, event):
        x=event.x
        y=event.y
        self.canvas.coords(self.GEOM, x, y, 10, 10)

    def drag(self, event):
        x=event.x
        y=event.y
        self.canvas.coords(self.GEOM, x, y, x+10, y+10)
    


K=Kreis(c)
c.bind("<B1-Motion>", K.drag)
c.bind("<B3-Motion>", K.size)
ich weiß, eigentlich ohne *
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Danipol hat geschrieben:Es ginge auch sehr viel schneller!
Dein Code leistet aber auch sehr viel weniger: Sieh dir doch mal den Code an, den ich in diesem Thread zuerst gepostet habe.
Danipol hat geschrieben:ich weiß, eigentlich ohne *
Wenn du es weißt: Warum setzt du es nicht um?
Dann könntest du ein paar andere Konventionen auch gleich einhalten (z.B. Leerzeichen rund um "=" und "self.kreis" statt "self.GEOM".

Außerdem sollte man sich angewöhnen, ein Tkinter-Programm mit einem Aufruf von mainloop() abzuschließen, damit die Programme auch dann etwas sichtbares produzieren, wenn sie nicht aus IDLE heraus gestartet werden.
Antworten