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

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

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

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

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

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

Как мне установить фон в ничто?

Обновить:

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

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

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

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

Вы хотите метод SetShape.

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

Другие вопросы по тегам