如何在wxpython中绘制透明框架

时间:2009-04-11 23:43:15

标签: wxpython wxwidgets transparent shaped-window

更新我完全改写了问题

我想创建一个圆角的窗口,这也是半透明的。

我设法通过调用SetTransparent( alpha )方法使框架半透明,但是,我仍然不知道如何使窗口没有背景。

我试图获取窗口的设备上下文(dc)并将背景画笔设置为wx.TRANSPARENT_BRUSH,但这似乎没有任何效果。

我正在寻求一种类似于this的效果,但我想在不使用位图的情况下(即没有任何外部媒体文件)这样做。

如何将背景设置为空?

更新

似乎我想要的就是所谓的“异形窗”。我正在进一步了解那个,但问题仍然是:如何在不使用任何外部媒体文件的情况下制作一个(即纯粹在代码中)。

3 个答案:

答案 0 :(得分:3)

令人惊讶的是,没有人给出答案..

是的,正如FogleBird所说,它是用SetShape完成的,但问题是如何在不使用图像文件的情况下获得一个曲面矩形的形状。

我找到了一种方法,即创建一个空位图,并使用内存直流在其上绘制一个圆角矩形

def GetRoundBitmap( w, h, radius ):
    maskColor = wx.Color(0,0,0)
    shownColor = wx.Color(5,5,5)
    b = wx.EmptyBitmap(w,h)
    dc = wx.MemoryDC()
    dc.SelectObject(b)    
    dc.SetBrush(wx.Brush(maskColor))
    dc.DrawRectangle(0,0,w,h)
    dc.SetBrush(wx.Brush(shownColor))
    dc.DrawRoundedRectangle(0,0,w,h,radius)
    dc.SelectObject(wx.NullBitmap)
    b.SetMaskColour(maskColor)
    return b

def GetRoundShape( w, h, r ):
    return wx.RegionFromBitmap( GetRoundBitmap(w,h,r) )

我发现的一个问题是形状是安静的别名。不是一个漂亮/奇特的窗户,但总比没有好。

答案 1 :(得分:0)

答案 2 :(得分:0)

查看wxWidgets \ samples \ shaped(在wxWidget中),它显示一个开始形状的窗口。