Как нарисовать прозрачную рамку в wxpython

ОБНОВЛЕНИЕ Я полностью перефразировал вопрос

Я хочу создать окно с закругленными углами, оно тоже полупрозрачное.

Мне удалось сделать рамку полупрозрачной, вызвав метод SetTransparent( alpha ), однако я до сих пор не знаю, как сделать так, чтобы у окна не было фона.

Я попытался получить контекст устройства (dc) окна и установить фоновую кисть на wx.TRANSPARENT_BRUSH, но это, похоже, не имеет никакого эффекта.

Я ищу эффект, подобный, например, этому, но я хочу сделать это без использования растрового изображения (т. е. без какого-либо внешнего медиафайла).

Как убрать фон?

Обновлять:

Кажется, то, что я хочу, называется фасонным окном. Я немного углубился в это, но все же вопрос в том, как я могу сделать это без использования какого-либо внешнего медиафайла (т.е. чисто в коде).


person hasen    schedule 11.04.2009    source источник


Ответы (3)


Удивительно, что никто не дал ответа..

Да, как сказал FogleBird, это делается с помощью SetShape, но вопрос в том, как получить форму прямоугольника со скругленными углами без использования файла изображения.

Я нашел один способ сделать это: создать пустое растровое изображение и нарисовать на нем прямоугольник со скругленными углами, используя память dc.

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) )

Одна проблема, которую я обнаружил, заключается в том, что форма имеет тихий псевдоним. Не совсем красивое/причудливое окно, но лучше, чем ничего.

person hasen    schedule 14.04.2009

Вам нужен метод SetShape.

http://docs.wxwidgets.org/stable/wx_wxtoplevelwindow.html#wxtoplevelwindowsetshape

person FogleBird    schedule 14.04.2009

Проверьте wxWidgets\samples\shape (в wxWidget), он показывает начальное окно.

person haha    schedule 09.02.2010