我试图实现一个panel子类,当内容溢出其垂直边界时,它将自动插入垂直滚动条。我希望面板的工作方式与普通面板完全相同,但有一点除外:面板的最小高度不是其大小调整器的最小高度,而是应该有一个静态值(如200),当面板的高度低于其大小调整器的高度时,应该出现一个垂直滚动条。换言之,当面板的高度比sizer的最小高度高时,它的功能应该与普通面板完全相同。在
我遇到的问题是,重写面板上的DoGetBestSize
和{
class ScrolledPanel(wx.Panel):
"""A panel that will automatically add scrollbars when needed."""
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.SetBackgroundColour('#FF0000')
# This function is never called.
def DoGetBestSize(self):
"""Override the minimum size of the panel."""
default = self.GetSizer().GetMinSize()
default.SetHeight(250)
return default
有可能达到我想要的效果吗?如果是这样,我如何规避上述问题?在
Here is the code in which I'm trying to use the scrolled panel。在
我想我应该试着重写SetSizer
函数,把这个sizer当作人质,并咨询它关于大小的问题,但实际上不是在面板上设置sizer。这样就可以调用像DoGetBestSize
这样的自定义大小函数。但是失败了。即使没有设置sizer,这些函数仍然不会被调用。我试过Panel
和PyPanel
。这是我当前的滚动面板:
你不需要做什么特别的事。如果您对任何
wxWindow
,包括wxPanel
调用SetVirtualSize()
,它将根据需要显示滚动条,大小调整器将使用虚拟大小来显示此窗口内容。在你为什么要重新发明轮子?wxPython提供了一个滚动面板小部件: wx.lib.滚动面板在
你应该用这个。wxPython演示有一个例子。在
编辑:下面是一个示例脚本,在大小写器中有一个滚动面板。
在WxPython中重写方法当前需要使用基类,这些基类被设计为将某些C++调用的调用反映到Python中重写的方法中。这意味着如果你想在一个面板中捕捉那些你需要从中派生类的元素wx.PyPanel面板而不是wx.面板. 见http://wiki.wxpython.org/OverridingMethods
相关问题 更多 >
编程相关推荐