Как я могу получить фрейм 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()