rechte Maustaste für button in einem Tkinter Grid abfragen

Fragen zu Tkinter.
Antworten
msmn
User
Beiträge: 35
Registriert: Samstag 13. Juli 2019, 07:15

wie kann man denn bitte für den jeweiligen Button in einem Tkinter Grid abfragen, welche (bzw ob die "rechte") Maustaste gedrückt wurde.

Anmerkung: "linke Taste" scheint ja Standard zu sein...und funktioniert
mit "bind" konnte ich auch die "rechte" Taste abfragen, ABER das geht ja nur für das gesamte Widget ...ich würde aber auch wissen muessen, welcher Button gedrückt wurde...

Danke
Manfred
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich bin kein grosser Tkinter-Experte - aber kannst du nicht fuer jeden Button explizit das Binding anlegen?
msmn
User
Beiträge: 35
Registriert: Samstag 13. Juli 2019, 07:15

möglich....und "wie bitte"?

momentan frage ich wie folgt auf Mausklick ab (x=jeweiliger Button in einem Grid):
button[x].config(command=partial(funktion_mausklick, button[x]))
damit wird mir zwar "der Mausklick eines bestimmten Buttons" gemeldet....ich weiss aber jetzt nicht, wie ich hier eventuell abfragen kann, ob es die "linke oder rechte oder .." Maustaste wäre, die geklickt wurde...

Manfred
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Du hast doch schon ›bind‹ erwähnt.
msmn
User
Beiträge: 35
Registriert: Samstag 13. Juli 2019, 07:15

Danke für Eure Antwort....
wahrscheinlich habe ich mich schlecht ausgedrueckt

nochmals:

1) momentan frage ich wie folgt auf Mausklick ab (x=jeweiliger Button in einem Grid):
button[x].config(command=partial(funktion_mausklick, button[x]))
damit wird mir zwar "der Mausklick eines bestimmten Buttons" gemeldet....ich weiss aber jetzt nicht, wie ich hier eventuell abfragen kann, ob es die "linke oder rechte oder .." Maustaste wäre, die geklickt wurde...

2) entsprechend hatte ich für JEDEN der Buttons dann ergänzt:
button[x].bind("<Button-3>", function_rightclick)
damit wird bei Betätigung der rechten Maustaste dann auch "function_rightclick" ausgeführt....dort gibt es aber (für mich ersichtlich zumindest) KEINE Info, bei welchen der Buttons eben der Rechtsklick gemacht wurde (zB: sieht die von Tkinter in den function_rightclick mitgegebene Variable immer so aus: <ButtonPress event state=Mod1 num=3 x=45 y=30> ….wobei sich die Positionsangaben x,y immer auf die Klickposition "innerhalb des jeweiligen Buttons" beziehen...und somit zur Auswertung auch nicht wirklich dienen)

3) wie kann man also bitte herausfinden, bei "WELCHEM Button" die rechte Maustaste geklickt wurde??

Besten Dank im Voraus
Manfred
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie das geht, hast Du doch schon bei 1) gezeigt. Mit partial kannst Du weitere Parameter mit festem Wert übergeben. x ist übrigens ein ganz schlechter Name für einen Index und mit Indizes sollte man eh nicht arbeiten, wenn man auch direkt mit den Button-Instanzen arbeiten könnte. button ist ein ganz schlechter Name für eine Liste mit mehreren Buttons. Lisren werden üblicherweise mit der Mehrzahlform benannt.
msmn
User
Beiträge: 35
Registriert: Samstag 13. Juli 2019, 07:15

@Sirius3:
".. Wie das geht, hast Du doch schon bei 1) gezeigt. Mit partial kannst Du weitere Parameter mit festem Wert übergeben..."
wie sollte dann bitte die Befehlszeile lauten, dass ich mit "partial und bind" auch die "Art der Maustaste herausfinde"?

Listennamen were ich übrigens anpassen...danke für den Hinweis
Manfred
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Du findest nicht die Art der Maustaste raus, weil die schon durch bind vorgegeben ist, aber Du findest mit partial den Knopf heraus, den Du rechts-gedrückt hast.
msmn
User
Beiträge: 35
Registriert: Samstag 13. Juli 2019, 07:15

@Sirius3:
es ist korrekt, dass ich mit "partial" (siehe 1 oben) den jeweiligen Button genau herausfinden kann....
und dass ich mit "bind" (siehe 2 oben) herausfinden kann, ob zB die rechte Maustaste geklickt wurde.

mit meinen bescheidenen Tkinter-Kenntnissen, kann ich eben jeder dieser Funktionen SEPARAT aufrufen...ich schaffe es aber leider bis jetzt nicht, diese 2 Funktionen miteinander "zu verknüpfen" (es läuft bei mir nur "ENTWEDER die eine"...."ODER die andere" Funktion ab)

irgendwie fehlt mir das Verständnis, wie ich zB "bind" so in "command=partial..." einbaue, dass ich eben beide Informationen GLEICHZEITIG habe.

Deswegen meine Bitte, wie solch eine Befehlszeile lauten könnte...

Danke
Manfred
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich weiß nicht, wie ich da noch helfen kann, wenn die Grundlagen zu Funktionen fehlen.
Wenn Du die zweite Maustaste benutzen willst, kannst Du nicht command benutzen, sondern mußt bind benutzen, daher weiß ich nicht, was Du in command einbauen willst.
msmn
User
Beiträge: 35
Registriert: Samstag 13. Juli 2019, 07:15

@Sirius3:
ich "muss" nicht unbedingt "command benutzen"....

meine ursprüngliche Frage lautet: wie kann man denn bitte für den jeweiligen Button in einem Tkinter Grid abfragen, welche (bzw ob die "rechte") Maustaste gedrückt wurde.
Anmerkung: "linke Taste" scheint ja Standard zu sein...und funktioniert
mit "bind" konnte ich auch die "rechte" Taste abfragen, ABER das geht ja nur für das gesamte Widget ...ich würde aber auch wissen muessen, WELCHER Button gedrückt wurde...

trotzdem natürlich: Danke für Deine Bemühungen!

@Alle: kann mir bitte jemand anders sagen, wie das gehen würde?

Danke
Manfred
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Es hilft nichts, wenn Du Deine Frage wiederholst. Die Antwort bleibt die selbe. Wenn Du verstanden hast, wie die Funktion bei command die Information bekommt, welcher Button gedrückt wurde, kannst Du das selbe Prinzip auch bei bind anwenden. Dazu mußt Du aber erst verstehen, wie partial funktioniert. Das geht am besten, wenn Du das selbst an einfachen Beispielen ausprobierst.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

@msmn: du hast diese zwei Zeilen Code selbst praesentiert:

Code: Alles auswählen

button[x].config(command=partial(funktion_mausklick, button[x]))
button[x].bind("<Button-3>", function_rightclick)
Eine davon kann den Button bestimmen. Eine nicht. Wieso hast du die erste Zeile so geschrieben? Was macht die anders? Warum sollte das bei dem bind nicht funktionieren?
Antworten