Python 如何在不透明区域内绘制透明部分
你将如何在wxpython窗口的背景上切割一个透明的孔Python 如何在不透明区域内绘制透明部分,python,wxpython,transparent,Python,Wxpython,Transparent,你将如何在wxpython窗口的背景上切割一个透明的孔 我是否需要手动绘制不透明区域,留下一个洞,而不是使用背景色?根据您之前的问题调整我的答案,尽管我不确定这是否100%满足您的需要。让我知道 基本上,我们通过不删除背景来保持之前的屏幕内容不变。然后我们处理绘制事件,只在屏幕的某些部分绘制 如果需要绘制的部分为半透明而非不透明,可以切换回使用SetTransparent import wx class Frame(wx.Frame): def __init__(self):
我是否需要手动绘制不透明区域,留下一个洞,而不是使用背景色?根据您之前的问题调整我的答案,尽管我不确定这是否100%满足您的需要。让我知道 基本上,我们通过不删除背景来保持之前的屏幕内容不变。然后我们处理绘制事件,只在屏幕的某些部分绘制 如果需要绘制的部分为半透明而非不透明,可以切换回使用
SetTransparent
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)
self.Bind(wx.EVT_PAINT, self.OnPaint)
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()
def OnPaint(self, event):
w, h = self.GetSize()
dc = wx.PaintDC(self)
region = wx.RegionFromPoints([(0, 0), (w, 0), (w, h), (0, h)])
box = wx.RegionFromPoints([(100, 100), (500, 100), (500, 500), (100, 500)])
region.SubtractRegion(box)
dc.SetClippingRegionAsRegion(region)
dc.DrawRectangle(0, 0, w, h)
if __name__ == '__main__':
app = wx.PySimpleApp()
frame = Frame()
frame.ShowFullScreen(True)
app.MainLoop()
这正是我想要的。谢谢你的精彩回答!一个简单的问题。如何在减去的区域周围绘制半透明的颜色?有没有画笔设置可以让我做到这一点?基本上我想做的是这个,但是在剪贴部分完全透明的情况下:我是否需要做一些事情,比如在一个单独的窗口中设置背景,以使剪贴部分完全透明,周围区域半透明?嗯,想一想。。。将返回给您。如果您在
DrawRectangle
之前尝试此操作,会发生什么情况dc.SetBrush(wx.Brush(wx.color(0,0,0,128))
-我现在在Mac上,无法在Windows上测试。这些都不能在Mac上正常工作。