2012-03-14 3 views
4

파이썬에서 wxPython을 사용하면 응용 프로그램의 윈도우 나 프레임을 기준으로 마우스의 근접성을 기준으로 윈도우의 투명도와 크기를 어떻게 설정할 수 있습니까?파이썬에서 wx.Frame 외부에서 마우스 이벤트 캡처하기

예 : 하이퍼 볼릭 줌과 유사하거나 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 분 이상 걸리지 않아야합니다.

희망이 도움이됩니다.

안드레아.

관련 문제