2012-03-14 110 views
4

在Python使用wxPython中,如何能予设定的窗口的透明度和尺寸基于鼠标相对于应用程序的窗口,或者帧中的的接近?捕获鼠标事件在Python

例如,类似于双曲变焦,或MAC OS X中的Dock?我试图用透明度和形状窗口的PNG来实现这种效果。

这样做的任何库或代码片段都会很棒。谢谢。

回答

6

这是要做的代码。基本上使用Infinity77提到的方法。在Windows上测试。很好地工作!

import wx 

MIN_ALPHA = 64 
MAX_ALPHA = 255 

class Frame(wx.Frame): 
    def __init__(self): 
     super(Frame, self).__init__(None) 
     self.alpha = MAX_ALPHA 
     self.SetTitle('Mouse Alpha') 
     self.on_timer() 
    def on_timer(self): 
     x, y, w, h = self.GetRect() 
     mx, my = wx.GetMousePosition() 
     d1 = max(x - mx, mx - (x + w)) 
     d2 = max(y - my, my - (y + h)) 
     alpha = MAX_ALPHA - max(d1, d2) 
     alpha = max(alpha, MIN_ALPHA) 
     alpha = min(alpha, MAX_ALPHA) 
     if alpha != self.alpha: 
      self.SetTransparent(alpha) 
      self.alpha = alpha 
     wx.CallLater(20, self.on_timer) 

if __name__ == '__main__': 
    app = wx.App(None) 
    frame = Frame() 
    frame.Show() 
    app.MainLoop() 
2

如果鼠标位于主框架之外,我不认为这可以轻松完成。这就是说,你总是可以做到以下几点:

1)在你的主框架启动一个定时器和轮询它每50毫秒(或任何适合你); 2)一旦你在你的OnTimer事件处理程序中轮询它,通过wx.GetMousePosition()检查鼠标位置(这将在屏幕坐标);

3)在相同的OnTimer方法,得到你的帧的画面位置,经由frame.GetScreenPosition();

4)比较鼠标位置与帧位置(也许使用欧几里德距离计算,或任何适合你)。然后,您将相框的透明度设置为相应的距离(如果鼠标位于框架矩形内,请记住完全不透明)。

我只是做了它的乐趣,它不应该超过5分钟来实现。

希望这会有所帮助。

Andrea。