Рубрики
Без рубрики

Введение в статические коробки и статические коробки

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Есть много виджетов, которые включены в WXPYPHON GUI Toolkit. Один из них – довольно удобный виджет, называемый wx.cstaticbox Отказ Этот виджет принимает строку, а затем нарисует коробку со строкой в верхней левой руке составляющей коробки. Однако это работает только при использовании его в сочетании с wx.cstaticboxsizer Отказ

Вот пример того, что можно выглядеть так:

Теперь давайте пойдем вперед и напишите код, который вы будете использовать, чтобы создать пример выше:

import wx

class MyPanel(wx.Panel):

    def __init__(self, parent):
        super().__init__(parent)
        box = wx.StaticBox(self, -1, "This is a wx.StaticBox")
        bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)

        t = wx.StaticText(self, -1, "Controls placed \"inside\" the box are really its siblings")
        bsizer.Add(t, 0, wx.TOP|wx.LEFT, 10)

        border = wx.BoxSizer()
        border.Add(bsizer, 1, wx.EXPAND|wx.ALL, 25)
        self.SetSizer(border)


class MyFrame(wx.Frame):

    def __init__(self):
        super().__init__(None, title='Test')
        panel = MyPanel(self)
        self.Show()

if __name__ == '__main__':
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()

Этот код основан на wx.cstaticbox Демо-код от WxPython’s Демо-приложение Отказ В основном вы создаете wx.cstaticbox добавьте его в экземпляр wx.cstaticboxsizer а затем добавьте это к WX.Boxsizer и вы сделали.

Но что, если вы хотите более сложный макет в коробке?

Давайте посмотрим на это использование следующее!

Гнездовые сизуры в wx.cstaticboxsizer

Чаще всего нет, вы захотите больше, чем один виджет внутри вашего виджета коробки. Когда это произойдет, вам нужно будет использовать Sizers внутри вашего wx.cstaticboxsizer Отказ

Вот пример:

Давайте пойдем вперед и посмотрите на код для этого примера:

import wx

class MyPanel(wx.Panel):

    def __init__(self, parent):
        super().__init__(parent)

        box = wx.StaticBox(self, -1, "Group Name")
        bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)

        hsizer = wx.BoxSizer()

        vsizer = wx.BoxSizer(wx.VERTICAL)
        lbl = wx.StaticText(self, label='label 1')
        vsizer.Add(lbl)
        cbo = wx.ComboBox(self, value='Python', choices=['Python', 'Ruby'],
                          size=(75, -1))
        vsizer.Add(cbo)
        hsizer.Add(vsizer)

        hsizer.AddSpacer(80)

        vsizer = wx.BoxSizer(wx.VERTICAL)
        lbl = wx.StaticText(self, label='label 2')
        vsizer.Add(lbl)
        cbo = wx.ComboBox(self, value='Ford', choices=['Ford', 'Chevrolet'],
                          size=(75, -1))
        vsizer.Add(cbo)
        hsizer.Add(vsizer)

        bsizer.Add(hsizer, 0, wx.CENTER)


        main_sizer = wx.BoxSizer()
        main_sizer.Add(bsizer, 1, wx.EXPAND | wx.ALL, 10)
        self.SetSizer(main_sizer)

class MyFrame(wx.Frame):

    def __init__(self):
        super().__init__(None, title='Test')
        panel = MyPanel(self)
        self.Show()

if __name__ == '__main__':
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()

В этом случае вам необходимо создать два вертикально ориентированных wx.boxsizer держать четыре виджета в двух столбцах. Вы добавляете эти сизуры на горизонтально ориентированные WX.Boxsizer также. Если вы хотите немного упростить это, вы можете использовать wx.gridsizer вместо этих боксов.

Независимо от подхода, вы в конечном итоге с красивым выложенным приложением.

Обертывание

Используя wx.cstaticbox Виджет довольно прямой прямого. Я думаю, что это может быть проще, если виджет и Sizer были объединены в один класс, хотя. В любом случае, если вы хотите узнать больше об этом виджете, вы должны увидеть Документация Отказ Весело и счастливое кодирование!