Für mein Minesweeper müsste ich einen Rechtsklick erkennen.
Kann mir da jemand weiterhelfen?
Wie kann ich einen Rechtsklick erkennen?
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Code: Alles auswählen
import Tkinter as tk
help(tk.Button().bind)
tk.Button().bind("<3>", dosth)
print "reading some docu would be useful"
-
- User
- Beiträge: 102
- Registriert: Dienstag 25. Dezember 2007, 22:53
- Wohnort: Freiburg im Breisgau
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:
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
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
-
- User
- Beiträge: 102
- Registriert: Dienstag 25. Dezember 2007, 22:53
- Wohnort: Freiburg im Breisgau
Ein Problem habe ich aber noch:
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.
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))'''
Code: Alles auswählen
def foo(self,x,y):
print self
print x
print y
> <__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.
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
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
Du musst es einfach annehmen, ob du's verwendest oder nicht:
Code: Alles auswählen
def myhandler(self, event, x, y):
print "das event!"
-
- User
- Beiträge: 102
- Registriert: Dienstag 25. Dezember 2007, 22:53
- Wohnort: Freiburg im Breisgau
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.
Auch in der Effbot-Doku gibt es kein Beispiel, in dem zusätzliche Werte, sondern nur das event übergeben werden.
Erwarte das Beste und sei auf das Schlimmste vorbereitet.
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))
-
- User
- Beiträge: 102
- Registriert: Dienstag 25. Dezember 2007, 22:53
- Wohnort: Freiburg im Breisgau
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.
Danke, jetzt siehts schon wieder etwas besser aus.
Erwarte das Beste und sei auf das Schlimmste vorbereitet.