在Python使用wxPython中,如何能予設定的窗口的透明度和尺寸基於鼠標相對於應用程序的窗口,或者幀中的的接近?捕獲鼠標事件在Python
例如,類似於雙曲變焦,或MAC OS X中的Dock?我試圖用透明度和形狀窗口的PNG來實現這種效果。
這樣做的任何庫或代碼片段都會很棒。謝謝。
在Python使用wxPython中,如何能予設定的窗口的透明度和尺寸基於鼠標相對於應用程序的窗口,或者幀中的的接近?捕獲鼠標事件在Python
例如,類似於雙曲變焦,或MAC OS X中的Dock?我試圖用透明度和形狀窗口的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分鐘來實現。
希望這會有所幫助。
Andrea。