我想创建一个透明的框架与可见的边界。我基于hasenj的‘shaped frame’(http://hasenj.wordpress.com/2009/04/14/making-a-fancy-window-in-wxpython/)的工作编写的代码如下。但我做一个还是有问题。我一定错过了什么。有人能指出程序出了什么问题吗?谢谢。在
import wx
class FancyFrame(wx.Frame):
def __init__(self, width, height):
wx.Frame.__init__(self, None, style = wx.STAY_ON_TOP |
wx.FRAME_NO_TASKBAR | wx.FRAME_SHAPED,
size=(width, height))
self.SetTransparent(50)
b = wx.EmptyBitmap(width, height)
dc = wx.MemoryDC()
dc.SelectObject(b)
dc.SetBrush(wx.TRANSPARENT_BRUSH)
dc.SetPen(wx.Pen('red', 2))
dc.DrawRectangle(0, 0, width, height)
dc.SelectObject(wx.NullBitmap)
self.SetShape(wx.RegionFromBitmap(b))
self.Bind(wx.EVT_KEY_UP, self.OnKeyDown)
self.Show(True)
def OnKeyDown(self, event):
"""quit if user pressEsc"""
if event.GetKeyCode() == 27: #27 is the Esc key
self.Close(force=True)
else:
event.Skip()
if __name__ == "__main__":
app = wx.App()
FancyFrame(300, 300)
app.MainLoop()
在主循环之外绘制对象不是很好的主意。您应该设置wx应用程序,使其成为事件驱动的。应处理事件EVT_PAINT和EVT_SIZE。
wx.Timer
可用于基本移动。在编辑:使用xor函数进行非破坏性绘图的ScreenDC示例。在
^{pr2}$编辑:另一种可能是保留屏幕该部分的备份副本。在
我建议创建一个透明窗口(
window.SetTransparent(0)
),并在其上放置一个位图,您可以自己绘制(例如请参见this answer)。在然后为mouse move设置一个事件处理程序,并用光标在窗口中移动。同时设置一个计时器,这样当鼠标在x秒内不移动时,您可以淡出位图。在
相关问题 更多 >
编程相关推荐