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

Я хотел бы построить окно wxPython без границ (то есть style = wx.BORDER_NONE) и использовать fancytext (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)

Необычный текст исчезает.

Можно ли как-нибудь использовать необычный текст в окне без границ (style = wx.BORDER_NONE)?

1 Ответ

1 голос
/ 18 мая 2012

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

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(FancyText(frame), 1, wx.EXPAND)
frame.SetSizer(sizer)
frame.Layout()
...