Hilfe bei Canvas

Fragen zu Tkinter.
Antworten
Leecher
User
Beiträge: 11
Registriert: Mittwoch 8. November 2006, 17:41
Wohnort: Eckernförde (Schleswig Holstein)

Mittwoch 8. November 2006, 17:45

Wie kann ich ein Fadenkreuz erzeugen, dass der maus folgt?(das Fadekreuz soll die maus ersetzen) ich habe es bereits mit "motion" probiert hatte aber keinen erfolg.

Danke im Voraus
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Mittwoch 8. November 2006, 18:09

Hi Leecher,
Willkommen im Forum,
_such_ dir einen aus:
http://www.python-forum.de/topic-6789.h ... af487a4697 :wink:
Gruß, jj
Zuletzt geändert von schlangenbeschwörer am Mittwoch 8. November 2006, 18:24, insgesamt 1-mal geändert.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Mittwoch 8. November 2006, 18:17

Du meinst doch sowas, oder?

Code: Alles auswählen

from Tkinter import*
main=Tk()
canvas=Canvas(main,bg="white",cursor="crosshair")
canvas.pack(padx=5,pady=5)
main.mainloop()
Gruß, jj
Leecher
User
Beiträge: 11
Registriert: Mittwoch 8. November 2006, 17:41
Wohnort: Eckernförde (Schleswig Holstein)

Donnerstag 9. November 2006, 09:26

hmm.. also so isses doch falsch, hab das anders gemeint^^ sry.. also wenn man klickt soll ein fandenkreuz auftauchen und wenn ich dann an eine andere stelle klicke soll es von der alten stelle verschwinden und wieder an der nneue stelle, wo ich geklickt habe erscheinen.. thx
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Donnerstag 9. November 2006, 15:29

Hi Leecher,

Code: Alles auswählen

from Tkinter import*
class fadenkreuz:
    def __init__(self,canvas,size):
        # zuerst ein Kreutz im "off" erzeugen:
        self.x=-100  
        self.y=-100
        self.size=size
        self.x1=self.x-self.size
        self.x2=self.x+self.size
        self.y1=self.y-self.size
        self.y2=self.y+self.size
        self.c=canvas
        # hier optionen wie ergaenzen:
        self.l1=self.c.create_line(self.x1,self.y,self.x2,self.y)
        self.l2=self.c.create_line(self.x,self.y1,self.x,self.y2)
    def move_(self,x,y):
        x_dif=x-self.x
        y_dif=y-self.y
        self.x=x
        self.y=y
        self.c.move(self.l1,x_dif,y_dif)
        self.c.move(self.l2,x_dif,y_dif)
        
        
class test :
    def __init__(self):
        self.main=Tk()
        self.canvas=Canvas(self.main,bg="white")
        self.canvas.bind("<ButtonRelease>",self.moveit)
        self.canvas.pack()
        self.fk=fadenkreuz(self.canvas,35)
    def moveit(self,event):
        self.fk.move_(event.x,event.y)

t=test()
t.main.mainloop()
meinst du das?
Leecher
User
Beiträge: 11
Registriert: Mittwoch 8. November 2006, 17:41
Wohnort: Eckernförde (Schleswig Holstein)

Dienstag 14. November 2006, 10:56

ja das ergebnis ist was ich meine, aber ist dass auch ohne den befehl self möglich? und wofür steht ButtonRelease?
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Dienstag 14. November 2006, 11:11

Mit self bindest du die Funktion oder Variable innerhalb der Klasse. Du findest im hier im Forum viele Beispiele.
ButtonRelease ist die Aktion, die an das Canvas gebunden wird. Du findest hier mehr darüber.
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Dienstag 14. November 2006, 15:07

Jup, kleine Ergänzung zu Stephan:
Das "self" ist zwar üblich, aber nix von Python, du kannst auch statt "self" überall "was_du_willst" oder "was_anderes" hinschreiben, Hauptsache es ist immer das gleiche:

Code: Alles auswählen

class XXX:   # das ist nur ne allgemeine klassenbeschreibung
       def __init__(self):
             self.x1=1
             #...
mein_x=XXX()   
# jetzt steht das "self" oben für mein_x 
is equal to:

Code: Alles auswählen

class XXX:
       def __init__(someones_x):
             someones_x.x1=1
             #...
mein_x=XXX() 
Gruß, jj
Tommj
User
Beiträge: 2
Registriert: Donnerstag 7. Februar 2008, 13:55

Donnerstag 7. Februar 2008, 14:04

Wir arbeiten in der Schule gerade mit Canvas.
Ich habe dazu 2 Fragen:

1.Wie kann ich es machen, dass das Fadenkreuz bei einem Klick genau in der Mitte des Canvasfeldes auftaucht und dort auch stehen bleibt?

2.Wie kriegt man es hin, dass wenn man in einen bestimmten Bereich klickt das (beliebige) Symbol genau auf einem Punkt hingezeichnet wird?
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Donnerstag 7. Februar 2008, 18:27

1. Hallo
2. Ein neuer Thread wäre auch ok gewesen
3. zu 2. Du berechnest den Mittelpunkt des Canvas und zeichnest dort das Kreuz.
4. zu 3. Was genau hast du an den obrigen Erklärungen nicht verstanden?
5. Gruß
Tommj
User
Beiträge: 2
Registriert: Donnerstag 7. Februar 2008, 13:55

Freitag 8. Februar 2008, 18:21

1. Danke für die Antwort.
2. Die Antwort war nicht gerade hilfreich, denn ich weiß schon das ich den Mittelpunkt (also die Koordinaten) selbst angeben muss.
3. Ich weiß nur nicht den Befehl dafür.
4. Schönen Gruß
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Freitag 8. Februar 2008, 20:11

schlangenbeschwörer hat geschrieben:

Code: Alles auswählen

        self.x=-100  
        self.y=-100
        self.size=size
        self.x1=self.x-self.size
        self.x2=self.x+self.size
        self.y1=self.y-self.size
        self.y2=self.y+self.size
        self.c=canvas
        # hier optionen wie ergaenzen:
        self.l1=self.c.create_line(self.x1,self.y,self.x2,self.y)
        self.l2=self.c.create_line(self.x,self.y1,self.x,self.y2)
Es gibt keinen tk-Befehl um ein Kreuz zu zeichnen, das musst du schon selbst machen. Ab besten aus zwei Linien, die du mit [tk.Canvas-Object].create_line(x1, y1, x2, y2, ...) erzeugst. Die Punkte musst du natürlich erst berechnen, bezogen auf den gewünschten Mittelpunkt (s. ln. 1-7). Du solltest den obrigen Code mal durchgehen und versuchen zu verstehen. Wenn dann noch Fragen sind, diese genau formulieren.
Antworten