gpt4 book ai didi

python - 如何覆盖面板的最小尺寸?

转载 作者:行者123 更新时间:2023-12-01 05:50:15 25 4
gpt4 key购买 nike

我正在尝试实现一个面板子类,如果内容溢出其垂直边界,它将自动插入垂直滚动条。我希望面板在各方面都像普通面板一样完全工作,但有一点除外:面板的最小高度不是其尺寸调整器的最小高度,而是应该具有静态值(例如 200) ,并且当面板的高度低于其调整器的高度时,应该出现垂直滚动条。换句话说,当面板的高度高于尺寸调整器的最小高度时,它的功能应该与普通面板完全相同。

我遇到的问题是面板上的 DoGetBestSizeGetMinSize 等重写函数没有任何效果,因为这些函数永远不会被调用(我通过插入来检查断点)。我猜测面板的父级正在与面板的 sizer 直接通信,在本例中,面板的 sizer 是从面板外部设置的普通框 sizer。

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,这些函数仍然不会被调用。我尝试过 PanelPyPanel。这是我当前的滚动面板:

class ScrolledPanel(wx.PyPanel):
"""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 called.
def SetSizer(self, sizer):
import pdb; pdb.set_trace()
self._pet_sizer = sizer

# The below functions are never called.
def DoGetBestSize(self):
"""Override the minimum size of the panel."""
import pdb; pdb.set_trace()
default = self.GetSizer().GetMinSize()
default.SetHeight(250)

return default

def DoGetClientSize(self):
import pdb; pdb.set_trace()

def DoGetSize(self):
import pdb; pdb.set_trace()

def DoGetVirtualSize(self):
import pdb; pdb.set_trace()

最佳答案

wxPython 中的重写方法当前需要使用基类,这些基类旨在将对 C++ 虚函数的某些调用反射(reflect)到 Python 中的重写方法中。这意味着如果您想捕获面板中的那些内容,您需要从 wx.PyPanel 而不是 wx.Panel 派生类。请参阅http://wiki.wxpython.org/OverridingMethods

关于python - 如何覆盖面板的最小尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14559124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com