如何在wxPython中获取无边框的FancyText框架(wx.BORDER_NONE)?

1 投票
1 回答
1677 浏览
提问于 2025-04-16 21:16

我想创建一个没有边框的wxPython窗口(也就是用style = wx.BORDER_NONE),并在这个窗口里使用fancytext(wx.lib.fancytext)。需要说明的是,我对wxPython非常陌生,所以我的问题可能听起来有些傻。(其实这是我第一次尝试使用wxPython)。

我发现,在使用fancytext的时候,我需要在我的frame里使用一个panel,因为需要用到OnPaint方法来设置文本的花哨效果。不过,似乎在style = wx.BORDER_NONE的情况下,使用panel(甚至sizer)是不可能的。

这是我想要的效果,但没有窗口的边框和其他东西:

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)使用fancytext呢?

1 个回答

1

问题是面板没有根据框架的大小进行调整。你需要使用一个布局管理器,像这样:

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

撰写回答