【问题标题】:wxPython's BoxSizer in a ScrolledWindow doesn't work if the contents of the ScrolledWindow do fit inside the space如果 ScrolledWindow 的内容确实适合空间,则 ScrolledWindow 中的 wxPython 的 BoxSizer 不起作用
【发布时间】:2016-07-04 16:15:27
【问题描述】:

我的代码的重要部分是这个:

class Entry(object):
    def __init__(self, list_: 'List', ...) -> None:
        self.list = list_  # type: List
        self.sizer = wx.BoxSizer(wx.HORIZONTAL)  # type: wx.BoxSizer
        self.name = wx.StaticText(list_.panel,  # type: wx.StaticText
                                  label="Example")
        self.sizer.Add(self.name, 1, wx.CENTRE)
        self.widgets = [
            self.name
        ]  # type: List[Union[wx.StaticText, wx.TextCtrl]]
        for i in range(data.columns):
            self.widgets.append(wx.TextCtrl(list_.panel, value="1"))
            self.widgets.append(wx.StaticText(list_.panel, label="1"))
            sizer = wx.BoxSizer(wx.VERTICAL)  # type: wx.BoxSizer
            sizer.Add(self.widgets[-2], 0, wx.EXPAND)
            sizer.Add(self.widgets[-1], 0, wx.EXPAND)
            self.sizer.Add(sizer, 2, wx.EXPAND)
        list_.sizer.Add(self.sizer, 0, wx.EXPAND)
        list_.entries.append(self)
        # ...
        if call_layout:
            height = len(list_.entries) * max(
                i.GetSize()[1]
                for i in self.widgets
            )  # type: int
            list_.sizer.Layout()
            list_.panel.SetScrollbars(4, 4, 1, height)

    # ...


class List(object):
    def __init__(self, ...) -> None:
        # ...
        self.panel = wx.ScrolledWindow(  # type: wx.ScrolledWindow
            design.panel, wx.ID_ANY
        )  # design.panel is a wx.Panel, it's parent is a wx.Frame. The wx.Frame has no sizer, the wx.Panel has a vertical wx.BoxSizer.
        self.sizer = wx.BoxSizer(wx.VERTICAL)  # type: wx.BoxSizer
        design.sizer.Add(self.panel, 1, wx.EXPAND)
        self.panel.SetSizer(self.sizer)

        self.entries = []  # type: List[Entry]

如果我添加足够多的“Entry”对象,所有小部件都位于左上角;但是如果有足够的小部件,布局就可以工作。

另外:如果有自动或至少以更好的方式计算“SetScrollbars”高度的好方法,请告诉我!因为这样非常丑。

谢谢!

(我的系统:MacOS,我用的是wxPython phoenix,因为我需要用到python3,wxpython-phoenix之类的标签好像不存在,如果有的话告诉我。我想我会的就该主题提出更多问题。)

【问题讨论】:

  • 请使用答案框进行自我回答,并且不要在标题中添加 [已解决] - 我们在这里不这样做。谢谢!

标签: macos python-3.x user-interface wxpython


【解决方案1】:

(代表 OP 发布)

我解决了。都是我的错,wxPython 工作正常。我更改了一些值来测试代码,但我忘记了一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多