Mousewheel event abfragen

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

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

Mittwoch 16. April 2008, 13:23

Hi,

vielleicht ist es das, was du meinst?

http://osdir.com/ml/python.tkinter/200 ... cd=6&gl=de

Grüße

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

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: 1419
Registriert: Sonntag 8. Juni 2003, 09:50

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

Mittwoch 16. April 2008, 21:17

DANKE!
Antworten