Wx python - проблема размера, связанная с AuiManager - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь создать приложение с несколькими панелями, используя Wx python - AuiManager. У меня проблема в том, что, если я использую центрирование для панелей, я не могу изменить размер, используя вертикальный сплиттер. И если я попытаюсь предоставить размер скотча, он им не пользуется. Я вижу, что при использовании бестабора клиентская область панелей уменьшается и, следовательно, не использует полноэкранную область.

Ниже приведен минимальный рабочий пример. Обе опции можно переключать, изменяя значение истинности центральной переменной. Может кто-нибудь помочь мне заставить это работать. Я не хочу использовать Splitter Windows, так как он требует доработки, если я решу увеличить / уменьшить количество панелей.

#!/usr/bin/env python3
import wx
import wx.lib.inspection
import wx.lib.agw.aui as aui


class Temp(wx.Frame):
    def __init__(self, parent, *args, **kw):
        super().__init__(*args, **kw)
        self.InitUI()

    def InitUI(self):
        size = wx.DisplaySize()
        x, y = size
        self.SetSize(size)
        self.SetClientSize(size)
        self.ab = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER)
        self.mgr = aui.AuiManager(self, aui.AUI_MGR_ALLOW_ACTIVE_PANE)
        self.mgr.AddPane(self.ab, aui.AuiPaneInfo().Top().
                         CaptionVisible(False).Name("ab").Layer(2))
        center = True
        for idx in range(4):
            name = f"Pane {idx+1}"
            if center:
                inf = aui.AuiPaneInfo().Name(name).CaptionVisible(False). \
                    Layer(idx % 2).Center()
            else:
                inf = aui.AuiPaneInfo().Name(name). \
                    CaptionVisible(False).Layer(idx % 2).BestSize(1920, -1)
            pane = wx.Panel(self)
            pane.SetClientSize(size)
            self.mgr.AddPane(pane, inf)
        self.mgr.Update()
        self.SetTitle("Example")
        self.Show()


def main():
    wx.Log.EnableLogging(False)  # Temporary disable to prevent locale error
    app = wx.App(redirect=False)
    n = Temp(app, None)
    wx.lib.inspection.InspectionTool().Show()
    app.MainLoop()


if __name__ == '__main__':
    main()

Я использую KDE - если это имеет значение

...