Как я могу получить фрейм wxPython с FancyText и без рамки (wx.BORDER_NONE)?

Я хотел бы построить окно wxPython без границ (т.е. style = wx.BORDER_NONE) и использовать необычный текст (wx.lib.fancytext) внутри этого окна. Обратите внимание, что я новичок в wxPython, и мой вопрос может показаться глупым. (это на самом деле моя первая попытка использования wxPython).

Я подумал, что мне нужно будет использовать panel в моем frame при использовании fancytext, так как нужно OnPaint метод установки фантазии для текста. Тем не менее, кажется, что невозможно использовать panels (или даже sizers) с style = wx.BORDER_NONE,

Это то, что я хотел бы, но без оконных рамок и прочего:

import  wx
import  wx.lib.fancytext as fancytext

test_str2 = '<font family="swiss" color="dark green" size="40">big green text</font>'

class FancyText(wx.Panel):
    """display fancytext on a panel"""
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, wx.ID_ANY)
        self.Bind(wx.EVT_PAINT, self.OnPaint)

    def OnPaint(self, evt):
        """generate the fancytext on a paint dc canvas"""
        dc = wx.PaintDC(self)
        fancytext.RenderToDC(test_str2, dc, 0, 20)


app = wx.App(0)
frame = wx.Frame(None, wx.ID_ANY, title='wxPython fancy text', size=(500, 250))
frame.Centre()
FancyText(frame)
frame.Show(True)
app.MainLoop()

(В этом примере используется код, найденный здесь и из демонстрации wxPython)

Если изменить строку, инициализирующую окно

frame = wx.Frame(None, wx.ID_ANY, title='wxPython fancy text', size=(500, 250), style = wx.BORDER_NONE)

Причудливый текст исчезает.

Есть ли способ, которым я могу использовать fancytext на окне без границ (style = wx.BORDER_NONE)?

1 ответ

Проблема в том, что размер панели не изменяется по размеру рамки. Вам нужно использовать классификатор, как это:

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(FancyText(frame), 1, wx.EXPAND)
frame.SetSizer(sizer)
frame.Layout()
Другие вопросы по тегам