ich verwende in einem Programm eine Liste mit den Koordinaten von gezeichneten Elementen. Soweit so gut. Wenn ich auf dem Window nun ein MouseEvent auslöse und die Liste mit den Mauskoordinaten des Events vergleiche, so ergibt sich eine Differenz der oberen y-Koordinate um 2 Pixel, der unteren y-Koordinate um 1 Pixel.
Ich habe ein Beispielprogramm angefügt:
Code: Alles auswählen
#!/usr/bin/python
#-*- coding: utf-8 -*-
import wx
class Frame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, pos=(550, 50), size=(300, 300))
test = View(self)
class View():
def __init__(self, parent):
self.parent = parent
self.parent.Bind(wx.EVT_PAINT, self.Do)
self.parent.Bind(wx.EVT_LEFT_UP, self.Event)
def Event(self, event):
self.draw.DrawRectangle(15,150,100,100)
self.draw.DrawText('MouseX: '+str(event.m_x), 20,180)
self.draw.DrawText('MouseY: '+str(event.m_y), 20,200)
print event.m_y
self.draw.DrawLine(event.m_x, event.m_y,
event.m_x + 100, event.m_y)
def Do(self, event):
print 'paint'
self.draw = wx.PaintDC(self.parent)
self.draw.DrawRectangle(15, 15, 100, 100)
self.draw.DrawText('15,15', 15, 15)
self.draw.DrawText('115,115', 115, 115)
class App(wx.App):
def __init__(self):
wx.App.__init__(self)
def OnInit(self):
frame = Frame()
frame.Show(True)
return True
def OnExit(self):
print 'OnExit'
if __name__ == '__main__':
app = App()
app.MainLoop()
Wenn Ihr versucht, die obere Linie des Vierecks (15,15) anzuklicken, werdet Ihr sehen, dass die y-Mausposition um 2 Pixel falsch wiedergegeben wird. Wenn die untere Seite des Vierecks (100,100) angeklickt wird, sind es noch 1 Pixel Unterschied zwischen Zeichnung und Mausposition.
Was ist hier falsch?
Irgendwie hoffe ich ja, dass es an meiner Maus liegt...
Gruß
mutetella
Nachtrag: Ich verwende wx 2.8.10, Ubuntu 9.10 (Gnome 2.28, Kernel 2.6.31) und liebe McRib mit extra Westernsauce.