Seite 1 von 1
Mausposition
Verfasst: Freitag 11. März 2005, 16:14
von Leonidas
Hallo!
Hab herausgefunden, wie man die
Mauszeigerposition unter PyGTK herausfinden kann. Das habe ich mal portiert und so siehts aus:
Code: Alles auswählen
import gtk
w = gtk.Window()
w.set_default_size(300, 100)
lb = gtk.Label("Please, show me the mouse position!")
w.add(lb)
def motion_notify(widget, event):
text = "Mouse position is: x=%d y=%d" % (event.x, event.y)
lb.set_text(text)
w.add_events(gtk.gdk.MOTION_NOTIFY | gtk.gdk.BUTTON_PRESS)
w.connect("motion_notify_event", motion_notify)
w.connect("destroy", gtk.main_quit)
w.show_all()
gtk.main()
Viel Spaß, vielleicht finde ich auch noch Lösungen für andere Toolkits

Verfasst: Freitag 11. März 2005, 16:20
von Leonidas
Okay, auch für Tkinter noch eine Lösung, als Abwandlung des
Beispiels:
Code: Alles auswählen
import Tkinter as tk
root = tk.Tk()
def callback(event):
print "mousecursor at", event.x, event.y
frame = tk.Frame(root, width=100, height=100)
frame.bind("<Motion>", callback)
frame.pack()
root.mainloop()
Ob ich noch mehr finde?
Verfasst: Freitag 11. März 2005, 16:36
von Leonidas
Ja, in pygame geht das auch:
Code: Alles auswählen
import pygame
import pygame.locals as pyl
pygame.init()
screen = pygame.display.set_mode((680, 480))
clock = pygame.time.Clock()
running = True
while running:
clock.tick(60)
# handle events
for event in pygame.event.get():
if event.type == pyl.QUIT or event.type == pyl.KEYDOWN:
running = False
elif event.type == pyl.MOUSEMOTION:
print "mousecursor at", event.pos[0], event.pos[1]
Verfasst: Freitag 11. März 2005, 16:48
von mawe
Hi!
Toll
Hab grad ein wenig herumgespielt, und bin draufgekommen, daß man bei Tkinter mit
winfo_pointerxy() die Position des Mauszeigers am Bildschirm (also nicht nur in der GUI) abfragen kann. Keine Ahnung ob man das mal brauchen kann, aber auch sinnloses Wissen ist Wissen
Gruß, mawe
Verfasst: Freitag 11. März 2005, 17:38
von Leonidas
Ja, das ist auch sehr nützlich. Ich weiß jetzt grad nicht wie man das mit anderen Toolkits macht, mit PyGTK sollte es möglich sein, mit pygame eher nicht, da für pygame kaum etwas außer dem eigenen Fenster existiert (wenn man aber auf Vollbild schaltet, sind die Werte es insofern auch wieder in Ordnung). So, nun werde ich mal nach einer GTK Lösung suchen

Verfasst: Freitag 11. März 2005, 18:39
von Leonidas
Das Herusfinden der Absoluten Koordinaten geht auch mit PyGTK, indem man statt
event.x und
event.y event.x_root und
event.y_root nutzt. Danke, mawe, dass du mich an dieses Feature erinnert hast, und das Wissen ist keinesfalls sinnlos

Verfasst: Freitag 10. Juni 2005, 22:50
von Erwin
Wie kann man die Koordinaten im Tk auslesen?
Komme da leider einfach nicht weiter:
Code: Alles auswählen
from Tkinter import *
def MausPosition(event):
MausPosText = event.x, event.y
event.widget.config(text = MausPosText)
root = Tk()
Button1 = Button(root, width = '10', height = '5', text = 'test')
Button1.place(y=50,x=50)
Button1.bind("<Button-1>", MausPosition)
mainloop()
Der liest zwar die Koordinaten aus, aber nur die innerhalb des Buttons.
Will aber eben gerne die Daten von Tk haben.
Geht dies überhaupt, oder muß ich dies alles in Canvas packen?
Oder geht es mit einem Art Trick, in dem man bei der Funktion der MausPositon ein Event für das Tk.root auslöst?
Verfasst: Samstag 11. Juni 2005, 15:15
von Erwin
Bin jetzt selbst ein Stück weiter gekommen, nachdem ich endlich rausgefunden habe, wie man den Code von mawe anwenden muß:
Code: Alles auswählen
from Tkinter import *
def MausPosition(event):
MausPosText = root.winfo_pointerxy()
event.widget.config(text = MausPosText)
root = Tk()
Button1 = Button(root, width = '10', height = '5', text = 'test')
Button1.place(y=50,x=50)
Button1.bind("<Button-1>", MausPosition)
Nur leider, zeigt er die Postion vom Curser ausgehend vom ganzen Bildschim an. Also je nach dem ob das root.Tk oben links oder recht unten ist (ect.), sind die Koordinaten ganz anders.
Aber ich hätte gerne die Coords innerhalb des Tk und nicht innerhalb des ganzen Bildschirms (wobei Zweiteres ich vielleicht auch mal brauchen könnte, aber halt nicht derzeit).
Verfasst: Samstag 11. Juni 2005, 23:46
von BlackJack
Schau doch mal woran Du den Mausknopf bindest -- an den Button. Binde ihn doch einfach an das oberste Fenster und schon bekommst Du die relativen Koordinaten davon.
Verfasst: Sonntag 12. Juni 2005, 12:21
von Erwin
BlackJack hat geschrieben:Schau doch mal woran Du den Mausknopf bindest -- an den Button. Binde ihn doch einfach an das oberste Fenster und schon bekommst Du die relativen Koordinaten davon.
Ich binde nur die Aktion an das Button. Und so soll es auch sein, weil er erst dann, wenn ich auf das Button klicke, die aktuelle Mausposition einlesen soll.
Und die Position die er dann ausliest, ist die von 'root', also dem Tk. Aber eben leider nicht innerhalb des Tk, sondern innerhalb des ganzen Bildschirms.
Edit:
Korrektur: Nicht Tk, weil dort weis ich nicht, wie ich die Postion abfragen kann, sondern cv.(Canvas). Das Problem bleibt aber leider das gleiche.
Edit2:
Langsam komme ich hinter das eigentliche Problem:
winfo_pointerxy()
scheint generell die Koordinaten am ganzen Bildschirm auszuspucken, egal mit was die verknüpft sind (also ob Button1.winfo_ ... oder eben cv.winfo_ ..., das scheint egal zu sein ??).
Bräuchte also etwas, was die Koordinaten vom Fenster selbst auslesen kann.
Verfasst: Sonntag 12. Juni 2005, 21:33
von BlackJack
Erwin hat geschrieben:Edit2:
Langsam komme ich hinter das eigentliche Problem:
winfo_pointerxy()
scheint generell die Koordinaten am ganzen Bildschirm auszuspucken, egal mit was die verknüpft sind (also ob Button1.winfo_ ... oder eben cv.winfo_ ..., das scheint egal zu sein ??).
Ja das ist egal. Lies doch einfach noch mal die Artikel in diesem Thread durch. Das steht da recht deutlich.
Bräuchte also etwas, was die Koordinaten vom Fenster selbst auslesen kann.
Genau. Du musst die Funktion eben einfach an das Toplevel-Widget, also in diesem Fall `root` binden und die Attribute `x` und `y` vom Event-Objekt auswerten.
Verfasst: Montag 13. Juni 2005, 15:56
von Erwin
@ BlackJack
Kann Dir jetzt nicht so ganz folgen.
Liegt vielleicht daran, weil ich inzwischen das gewünschte Ergenbis hinbekommen habe.
Kommt aber, glaube ich, so ungefähr hin, bzw. war ja das, was ich ständig versuchte hinzubekommen, was mir endlich auch gelang.
Danke Euch allen.