【问题标题】:wxPython ScrolledWindow not working when used in a panelwxPython ScrolledWindow 在面板中使用时不起作用
【发布时间】:2018-02-22 18:13:21
【问题描述】:

在 wx.Panel 中嵌套 ScrolledWindow 时遇到问题。 如果我自己创建一个滚动窗口,它似乎可以工作,但是当我在 wx.Panel 中创建它并将 wx.Panel 添加到帧大小调整器时它不会。我有什么遗漏的吗?

注意:

        #pa = AScrolledWindow(self) <-- if uncommented this works
        pa = ScrolledWindowHolder(self) # However this does not!

import wx


class ScrolledWindowHolder(wx.Panel):
    def __init__(self, parent):
        super(ScrolledWindowHolder, self).__init__(parent=parent)
        mysizer = wx.GridBagSizer()
        self.myscrolledWindow = AScrolledWindow(self)
        mysizer.Add(self.myscrolledWindow, pos=(0, 0), flag=wx.EXPAND)
        self.SetSizerAndFit(mysizer)


class AScrolledWindow(wx.ScrolledWindow):
    def __init__(self, parent):
        super(AScrolledWindow, self).__init__(parent)
        gb = wx.GridBagSizer()
        self.sizer = gb

        self._labels = []
        for y in xrange(1, 30):
            self._labels.append(wx.StaticText(self, -1, "Label #%d" % (y,)))
            gb.Add(self._labels[-1], (y, 1), (1, 1))

        self.SetSizer(self.sizer)
        self.SetScrollRate(5, 5)
        self.EnableScrolling(True, True)


class TestFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'Programmatic size change')
        sz = wx.BoxSizer(wx.VERTICAL)
        #pa = AScrolledWindow(self)
        pa = ScrolledWindowHolder(self)
        sz.Add(pa, 1, wx.EXPAND)
        self.SetSizer(sz)


def main():
    wxapp = wx.App()
    fr = TestFrame()
    fr.Show(True)
    wxapp.MainLoop()


if __name__ == '__main__':
    main()

【问题讨论】:

    标签: python python-2.7 wxpython wxwidgets


    【解决方案1】:

    不知道为什么,但问题似乎在于您在ScrolledWindowHolder 中使用带有单个小部件的GridBagSizer,该小部件本身包含GridBagSizer
    如果您将ScrolledWindowHolder 更改为使用BoxSizer,它会按预期工作。

    class ScrolledWindowHolder(wx.Panel):
        def __init__(self, parent):
            super(ScrolledWindowHolder, self).__init__(parent=parent)
            mysizer = wx.BoxSizer(wx.HORIZONTAL)
            self.myscrolledWindow = AScrolledWindow(self)
            mysizer.Add(self.myscrolledWindow, 1, wx.EXPAND,0)
            self.SetSizerAndFit(mysizer)
    

    另外,将y 的值更改为for y in range(1, 60): 将更有效地展示滚动窗口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多