Mousewheel event abfragen

Fragen zu Tkinter.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mousewheel event abfragen

Beitragvon numerix » Mittwoch 16. April 2008, 11:36

Durch eigene Experimente habe ich zufällig entdeckt, dass sich das Drehen des Mausrades über die Events Button-4 und Button-5 abfragen lässt. Dachte ich.

Experimentiert hatte ich auf einem Linux-System, dort funktioniert das.

Heute habe ich das gleiche Programm auf einem Windows-System laufen lassen (XP) und siehe da - keine Reaktion auf das Mausrad.

Während unter Linux das Event <Button> die Events <Button-1> bis <Button-5> kennt, wurden dort nur <Button-1> bis <Button-3> erkannt - so findet man es ja auch in der einschlägigen Doku.

Da ich kaum Möglichkeiten habe, auf einem Windowssystem ernsthaft zu testen und zu experimentieren, hier meine Frage:

Gibt es jemanden, der darüber etwas weiß. Also z.B. sind <Button-4/5> auf allen Linux-Systemen gültig oder hängt es evtl. von der Distribution ab? Und gibt es eine andere Möglichkeit, das Mausrad unter Windows abzufragen?
raibel
User
Beiträge: 30
Registriert: Mittwoch 15. November 2006, 22:03

Beitragvon raibel » Mittwoch 16. April 2008, 13:23

Hi,

vielleicht ist es das, was du meinst?

[url]
http://osdir.com/ml/python.tkinter/2006 ... 00001.html

[url]
http://209.85.129.104/search?q=cache:ho ... cd=6&gl=de[/url]

Grüße

rai
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Mittwoch 16. April 2008, 14:00

Danke raibel, das war's, was ich gesucht habe.

Dann werd' ich meinen Linux-Code mal entsprechend erweitern und sehen, ob es dann auf einem Windows-Rechner so läuft, wie ich mir das denke ...
Benutzeravatar
wuf
User
Beiträge: 1374
Registriert: Sonntag 8. Juni 2003, 09:50

Beitragvon wuf » Mittwoch 16. April 2008, 19:55

Hallo pütone

Hier habe ich etwas zum ausprobieren.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import Tkinter

'''   
   Funktion      : Auswertung der Mausrad-Ereignisse unter Linux & Windows.
                   Test: Der Mauscursor muss sich im Root-Fenster befinden,
                   durch drehen des Mausrades wird die Zähleranzeige ver-
                   ändert.
                   a) Raddrehung nach vorne inkrementiert den Zähler
                   b) Raddrehung nach hinten dekrementiert den Zähler
'''

#----- MODUL-TEST ------------------------------------------------------------#
if __name__ == '__main__':

   #****************
   #*  FUNKTIONEN  *
   #****************
   def fws_mouse_wheel(event):
      """ Rückmeldung der Mausradereignisse """
      
      global counter
      
#      print 'Debug:Mous-Event',event.keycode,event.keysym_num
      
      if event.num == 5 or event.keycode == -120:
         #~~ Zähle abwärts
         counter -= 1
         
      if event.num == 4 or event.keycode == 120:
         #~~ Zähle aufwärts
         counter += 1
      
      #~~ Aktualisiere die Zähleranzeige
      counter_label['text'] = counter
   
   #**************
   #*  PROGRAMM  *
   #**************
   #~~ Es wird ein Tk-Hauptfenster generiert und konfiguriert
   root = Tkinter.Tk()
   root['bg']     = 'steelblue3'
   root['width']  = 250
   root['height'] = 100
   root['cursor'] = 'hand1'

   #~~ Binde die Mausradereignisse an das root-Objekt
   #   (Windows)
   root.bind('<MouseWheel>' ,fws_mouse_wheel)
   #   (Linux)
   root.bind('<Button-4>' ,fws_mouse_wheel)
   root.bind('<Button-5>' ,fws_mouse_wheel)
   
   root.title('Mouse-Wheel-Test')
   
   counter = 0
   
   #~~ Erstelle die Zähleranzeige
   counter_label = Tkinter.Label(root,
      text   = 0,
      font   = ('Utopia','16','bold'),
      bg     = 'khaki',
      fg     = 'steelblue',
      width  = 5,
      border = 4,
      relief = 'ridge',
      )
   counter_label.place(x=10,y=10)
   
   logo_label = Tkinter.Label(root,
      text   = 'Powered by Python & Tkinter',
      font   = ('helvetica','8'),
      bg     = root['bg'],
      fg     = 'white',
      border = 0,
      relief = 'flat',
      )
   logo_label.place(x=10,y=80)

   root.mainloop()


Gruss wuf :wink:
Zuletzt geändert von wuf am Mittwoch 4. Juni 2008, 08:40, insgesamt 1-mal geändert.
Take it easy Mates!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Beitragvon numerix » Mittwoch 16. April 2008, 21:17

DANKE!

Wer ist online?

Mitglieder in diesem Forum: Google [Bot]