2011-07-12 9 views
3

私はwxpythonウィンドウを作成しようとしています(ウインドウオブジェクトであるという意味でのウインドウのみ)。見えない。次に、ユーザーが「ウィンドウ」内(つまり画面上の任意の場所)をクリックしてドラッグできるようにしたいと考えています。wxpythonのSetTransparentは、不透明度が0に設定されているとユーザ入力を取得しません。

私がしようとすると、self.SetTransparent(0)ユーザ入力はウィンドウによってキャプチャされません。

これは意図した動作ですか?

これは正しい方法ですか? 1の不透明度は人間の目にとっては明らかに区別できませんが、なぜ私が完全に透明にすることができないのか不思議です。

は、ここに抜粋です:

import wx 

class Frame(wx.Frame): 
    def __init__(self): 
     style = (wx.STAY_ON_TOP | wx.NO_BORDER) 
     wx.Frame.__init__(self, None, title="Invisible", style=style) 

     self.SetTransparent(0) # This doesn't work 
     #self.SetTransparent(1) # But this works fine 

     self.Bind(wx.EVT_KEY_UP, self.OnKeyPress) 

    def OnKeyPress(self, event): 
     """quit if user press q or Esc""" 
     if event.GetKeyCode() == 27 or event.GetKeyCode() == ord('Q'): #27 is Esc 
      self.Close(force=True) 
     else: 
      event.Skip() 

app = wx.App() 
frm = Frame() 
frm.ShowFullScreen(True) 
app.MainLoop() 

またはウィンドウには全くバックグラウンドではなく、完全に透明着色背景を与えていないの方法は何ですか?

+0

あなたの質問に答えることとは関係ありませんが、そのようなコードにはどのような用途がありますか?私が考えることのできる唯一のことは、鍵ロガーか悪い設計のどちらかです。 –

+0

画面の一部を切り抜いて選択してアップロードできるスクリーンショットツール。 [gyazo](http://gyazo.com/)を参照してください。 – Acorn

+0

あなたはそうだと思っていますが、私はおそらく、プログラムを実行していることを明示するために、画面上に透明なレイヤーを表示しています。 – Acorn

答えて

1

EVT_ERASE_BACKGROUNDを無効にすると、同じ効果が得られます。

私はコードの他の側面についてもクリーンアップしました。

XPでは7とは少し異なりますが、説明しているアプリの種類には問題はないと思われます。

import wx 

class Frame(wx.Frame): 
    def __init__(self): 
     super(Frame, self).__init__(None) 
     self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) 
     self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) 
     self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) 
    def OnEraseBackground(self, event): 
     pass # do nothing 
    def OnLeftDown(self, event): 
     print event.GetPosition() 
    def OnKeyDown(self, event): 
     if event.GetKeyCode() == wx.WXK_ESCAPE: 
      self.Close() 
     else: 
      event.Skip() 

if __name__ == '__main__': 
    app = wx.PySimpleApp() 
    frame = Frame() 
    frame.ShowFullScreen(True) 
    app.MainLoop() 
関連する問題