Как нарисовать прозрачную рамку в wxpython - PullRequest
2 голосов
/ 12 апреля 2009

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

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

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

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

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

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

Обновление:

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

Ответы [ 3 ]

3 голосов
/ 14 апреля 2009

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

Да, как сказал 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) )

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

0 голосов
/ 09 февраля 2010

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

0 голосов
/ 14 апреля 2009
...