Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不透明区域内绘制透明部分_Python_Wxpython_Transparent - Fatal编程技术网

Python 如何在不透明区域内绘制透明部分

Python 如何在不透明区域内绘制透明部分,python,wxpython,transparent,Python,Wxpython,Transparent,你将如何在wxpython窗口的背景上切割一个透明的孔 我是否需要手动绘制不透明区域,留下一个洞,而不是使用背景色?根据您之前的问题调整我的答案,尽管我不确定这是否100%满足您的需要。让我知道 基本上,我们通过不删除背景来保持之前的屏幕内容不变。然后我们处理绘制事件,只在屏幕的某些部分绘制 如果需要绘制的部分为半透明而非不透明,可以切换回使用SetTransparent import wx class Frame(wx.Frame): def __init__(self):

你将如何在wxpython窗口的背景上切割一个透明的孔


我是否需要手动绘制不透明区域,留下一个洞,而不是使用背景色?

根据您之前的问题调整我的答案,尽管我不确定这是否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上正常工作。