Seite 1 von 1
Wie kann ich einen Rechtsklick erkennen?
Verfasst: Samstag 29. Dezember 2007, 20:04
von Nikolas
Für mein Minesweeper müsste ich einen Rechtsklick erkennen.
Kann mir da jemand weiterhelfen?
Verfasst: Samstag 29. Dezember 2007, 20:29
von schlangenbeschwörer
Code: Alles auswählen
import Tkinter as tk
help(tk.Button().bind)
tk.Button().bind("<3>", dosth)
print "reading some docu would be useful"
Verfasst: Samstag 29. Dezember 2007, 20:36
von Nikolas
Sehr nett. Nur hat mir die letzte Doku ein paar Hinweise und Schreibweisen geliefert, die nachher in diesem Forum als eher falsch und unsauber erklärt wurden.
Und für die Nachwelt, sollte mal jemand die Suche benutzen:
Code: Alles auswählen
button.bind("<Button-1>" , foo2() ) # links
button.bind("<Control Button-1>" , foo1() ) # "rechts" für Leute mit weissen Rechnern
Verfasst: Sonntag 30. Dezember 2007, 16:43
von Nikolas
Ein Problem habe ich aber noch:
Code: Alles auswählen
but = tk.Button(font=myfont,command = lambda i=i,j=j : self.master.foo(i,j))
'''but.bind("<Button-1>",
lambda x=j, y=i:self.master.cellKlickedRight(x,y))'''
dieser Code steht in einer GUI-Klasse die in der master-Eigenschaft auf eine andere Klasse zeigt, die die foo-Methode hat:
Wenn ich die command-Version benutze, bekomme ich ein
> <__main__.MineApp instance at 0x11bdb20>
> 1
> 3
wobei 1 und 3 stimmt.
in der anderen Version bekomme ich ein
> <__main__.MineApp instance at 0x11bdb48>
> <Tkinter.Event instance at 0x11c92b0>
> 1 (stimmt)
Da die zweite Klasse MineApp heisst, ist das self richtig, nur wird beim bind anstelle des eigentlichen Parameters noch das event mitgeschickt. Leider werde ich aus dem Hilfe-Eintrag nicht schlauer und hoffe mal, dass mir hier jemand weiterhelfen kann.
Verfasst: Sonntag 30. Dezember 2007, 17:18
von schlangenbeschwörer
Natürlich wird ein Eventobjekt mitgeschickt. Es wäre auch umständlich, für jede Taste ein einzelnes Binding zu schreiben. Dann bindest du jeden Tastendruck und guckst dann im Eventhandler im Event nach, welche Taste es war. Oder die Position des Mauszeigers, ect.
Du musst es einfach annehmen, ob du's verwendest oder nicht:
ansonsten:
effbot hilft
Verfasst: Sonntag 30. Dezember 2007, 22:04
von Nikolas
und wie sieht dann das bind genau aus?
Auch in der Effbot-Doku gibt es kein Beispiel, in dem zusätzliche Werte, sondern nur das event übergeben werden.
Verfasst: Sonntag 30. Dezember 2007, 22:20
von BlackJack
Naja die Funktion bekommt ein zusätzliches erstes Argument, das Event-Objekt, was Du einfach nicht benutzt:
Code: Alles auswählen
button.bind('<Button-1>',
lambda event, j=j, i=i: self.master.cell_clicked_right(j, i))
Verfasst: Montag 31. Dezember 2007, 14:20
von Nikolas
Aso. Jetzt ist es klar. Ich bin bis jetzt davon ausgegangen, dass in das erste Argument von self.master.klicked,,, das event geschrieben wird, und nicht in das erste Argument vom lambda.
Danke, jetzt siehts schon wieder etwas besser aus.