Как программно настроить границу вокруг объекта StaticText? - PullRequest
0 голосов
/ 04 марта 2020

Как мне настроить границу объекта StaticText программно с учетом объекта StaticText? Кажется, с этим объектом связан SizerItem, но я не могу понять, как его найти.

Я вижу, что объект StaticText имеет функцию GetBorder (), но эта функция возвращает 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() функции без такой удачи.

1 Ответ

1 голос
/ 09 марта 2020

Вы можете получить wx.SizerItem следующим образом:

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

Если вы хотите просто сохранить ссылку на элемент sizer, а не извлекать его каждый раз, он возвращается из Метод sizer Add, когда вы добавляете текст stati c.

Когда у вас есть элемент, вы можете настроить атрибуты sizer-speci c для этого элемента. Обязательно вызовите метод Layout виджета или содержащего виджета, когда закончите настройку.

...