如何以编程方式调整静态文本对象周围的边框?

How to adjust border around StaticText object programatically?

如何在给定 StaticText 对象的情况下以编程方式调整 StaticText 对象的边框?似乎有一个与此对象关联的 SizerItem,但我不知道如何找到它。

我看到 StaticText 对象有一个 GetBorder() 函数,但是这个函数 returns wx.NO_BORDER,所以它不是我要找的。

最小工作示例:

import wx
import wx.xrc


class MyFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(
            self,
            parent,
            id=wx.ID_ANY,
            title=wx.EmptyString,
            pos=wx.DefaultPosition,
            size=wx.Size(500, 300),
            style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL,
        )

        self.SetSizeHints(wx.DefaultSize, wx.DefaultSize)

        box_sizer = wx.BoxSizer(wx.VERTICAL)

        labeled_box_sizer = wx.StaticBoxSizer(
            wx.StaticBox(self, wx.ID_ANY, u"label"), wx.VERTICAL
        )

        self.m_text_top = wx.StaticText(
            labeled_box_sizer.GetStaticBox(),
            wx.ID_ANY,
            u"Border = 0",
            wx.DefaultPosition,
            wx.DefaultSize,
            0,
        )
        self.m_text_top.Wrap(-1)

        labeled_box_sizer.Add(self.m_text_top, 0, wx.ALL, 0)

        self.m_text_bottom = wx.StaticText(
            labeled_box_sizer.GetStaticBox(),
            wx.ID_ANY,
            u"Border = 5",
            wx.DefaultPosition,
            wx.DefaultSize,
            0,
        )
        self.m_text_bottom.Wrap(-1)

        labeled_box_sizer.Add(self.m_text_bottom, 0, wx.ALL, 5)

        box_sizer.Add(labeled_box_sizer, 0, wx.ALL, 5)

        self.SetSizer(box_sizer)
        self.Layout()

        self.Centre(wx.BOTH)

    def __del__(self):
        pass


app = wx.App()
window = MyFrame(None)
window.Show()

text = window.m_text_top

# text.SetBorder(5)  # <-- no such method exists

app.MainLoop()

我已经尝试了 GetSizer()GetContainingSizer() 功能,但没有这样的运气。

您应该能够像这样获得 wx.SizerItem

item = text.GetContainingSizer().GetItem(text)

如果您只想保留对 sizer 项目的引用而不是每次都获取它,则在添加静态文本时它会从 sizer 的 Add 方法返回。

获得该项目后,您可以调整该项目的 sizer 特定属性。完成调整后,请务必调用 sizer 或包含小部件的 Layout 方法。