wxPythonを使用するPythonで、アプリケーションのウィンドウまたはフレームに対するマウスの近さに基づいてウィンドウの透明度とサイズを設定するにはどうすればよいですか?
例えば。双曲線ズーム、またはMAC OS Xのドックに似ていますか?私は、透明度と形をしたウィンドウを備えたpngでこの効果を達成しようとしています。
これを行うライブラリやコードスニペットも素晴らしいでしょう。ありがとう。
wxPythonを使用するPythonで、アプリケーションのウィンドウまたはフレームに対するマウスの近さに基づいてウィンドウの透明度とサイズを設定するにはどうすればよいですか?
例えば。双曲線ズーム、またはMAC OS Xのドックに似ていますか?私は、透明度と形をしたウィンドウを備えたpngでこの効果を達成しようとしています。
これを行うライブラリやコードスニペットも素晴らしいでしょう。ありがとう。
これを行うためのコードは次のとおりです。基本的に、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()
マウスがメインフレームの外にある場合、それは簡単にはできないと思います。そうは言っても、いつでも次のことができます。
1)メインフレームでタイマーを開始し、50ミリ秒ごと(または適切なもの)にポーリングします。
2)OnTimerイベントハンドラーでポーリングしたら、wx.GetMousePosition()を使用してマウスの位置を確認します(これは画面座標になります)。
3)同じOnTimerメソッドで、frame.GetScreenPosition();を介してフレームの画面位置を取得します。
4)マウスの位置をフレームの位置と比較します(ユークリッド距離の計算などを使用します)。次に、この距離に応じてフレームの透明度を設定します(マウスがフレームの長方形の内側にある場合は、完全に不透明にすることを忘れないでください)。
私はそれを楽しむためにそれをしました、それは実装するのに5分以上かかるべきではありません。
お役に立てれば。
アンドレア。