2012-03-14 20 views
4

PythonでwxPythonを使用すると、アプリケーションのウィンドウまたはフレームに対するマウスの近接度に基づいてウィンドウの透明度とサイズを設定するにはどうすればよいですか?Pythonのwx.Frameの外でマウスイベントをキャプチャする

例:双曲線ズームに似ていますか、MAC OS Xのドックですか?私はこの効果を透過性のある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分以上かかることはありません。

これが役に立ちます。

アンドレア。

関連する問題