首页 > 解决方案 > WxPython,包含滚动窗口的可折叠窗格

问题描述

我正在尝试创建一个可滚动的可折叠窗格,当包含的按钮列表大于屏幕时。所以我在窗格内放了一个 ScrolledWindow - 并得到了这个错误:

Gtk-警告:试图将 GtkScrolledWindow 类型的小部件添加到 GtkExpander,但作为 GtkBin 子类,GtkExpander 一次只能包含一个小部件;它已经包含一个 wxPizza 类型的小部件

什么,他们不喜欢披萨?:) 我的第一次阅读让我认为它们是不兼容的小部件,因为它们都可能是 GtkExpander 类型。但是这个问题 -没有显示滚动条- 似乎同时使用了这两种小部件类型。有一些区别 - 首先,他们将 CollapsiblePane放在ScrolledWindow 中,其次,它实际上是来自 WxPython 的 AGW 库的 PyCollapsiblePane。

那么,通过一些小部件的组合,是否有可能拥有一个可折叠的对象,该对象在展开时包含一个滚动的对象列表?如果是这样,怎么办?还是这两个小部件不兼容(按此顺序)?

标签: pythonwxpython

解决方案


发现了问题。原来 Collapsible-Pane 有一个供儿童使用的内面板。

class BadCollapsingPanel(wx.CollapsiblePane):
def __init__(self, parent):
    super().__init__(parent, wx.ID_ANY, style=wx.SUNKEN_BORDER)
    self.parent = parent
    self.inner_pane = self.GetPane()
    self.inner_pane.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)

    # self.very_bad_panel = ScrollingPanel(self)  # Breaks
    self.very_bad_panel = ScrollingPanel(self.inner_pane)  # Works

推荐阅读