我正在尝试制作一个wxpython窗口(只是一个窗口,因为它是一个窗口对象)..它填满了整个屏幕,完全不可见。然后,我想让用户在“窗口”中点击并拖动(即屏幕上的任何位置)。
当我尝试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 :(得分: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()