Как сообщить панели, что ее размер изменяется при использовании wx.aui - PullRequest
2 голосов
/ 15 июня 2009

Я использую wx.aui для создания своего пользовательского интерфейса. Я определяю класс, который наследуется от wx.Panel, и мне нужно изменить содержимое этой панели, когда размер ее окна изменяется.

Я использую код, очень похожий на код ниже (это измененная версия примера кода, найденного здесь ).

Мой вопрос: есть ли метод wx.Panel, вызываемый AuiManager за кулисами, который я могу перегрузить? Если нет, то как мой объект ControlPanel может узнать, что его размер изменяется?

Например, если я запускаю этот код и перетаскиваю горизонтальный разделитель между верхней и нижней панелями справа, как верхняя правая панель сообщает, что ее размер только что изменился?

import wx
import wx.aui

class ControlPanel(wx.Panel):
    def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, *args, **kwargs)

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.mgr = wx.aui.AuiManager(self)

        leftpanel = ControlPanel(self, -1, size = (200, 150))
        rightpanel = ControlPanel(self, -1, size = (200, 150))
        bottompanel = ControlPanel(self, -1, size = (200, 150))

        self.mgr.AddPane(leftpanel, wx.aui.AuiPaneInfo().Bottom())
        self.mgr.AddPane(rightpanel, wx.aui.AuiPaneInfo().Left().Layer(1))
        self.mgr.AddPane(bottompanel, wx.aui.AuiPaneInfo().Center().Layer(2))

        self.mgr.Update()


class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, '07_wxaui.py')
        frame.Show()
        self.SetTopWindow(frame)
        return 1

if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()

1 Ответ

3 голосов
/ 15 июня 2009

Согласно документам wx.Panel, wx.Panel.Layout вызывается «автоматически обработчиком EVT_SIZE по умолчанию при изменении размера окна».

РЕДАКТИРОВАТЬ: Однако вышеприведенное не работает так, как я ожидал, поэтому попробуйте вручную связать EVT_SIZE:

class ControlPanel(wx.Panel):
    def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, *args, **kwargs)
        self.Bind(wx.EVT_SIZE, self.OnResize)

    def OnResize(self, *args, **kwargs):
        print "Resizing"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...