【发布时间】:2009-09-03 05:05:53
【问题描述】:
我创建了一个 Frame 对象,我想限制它可以扩展的宽度。框架中唯一的窗口是 ScrolledWindow 对象,它包含所有其他子对象。我有很多对象排列有一个垂直方向的 BoxSizer,因此 ScrolledWindow 对象变得非常高。右侧通常有一个滚动条,您可以上下滚动。
当我尝试为框架设置最大尺寸时,问题就来了。我正在使用 ScrolledWindow 的scrolled_window.GetBestSize()(或scrolled_window.GetEffectiveMinSize())函数,但它们没有考虑垂直滚动条。我最终得到了一个有点太窄的框架,并且有一个永远不会消失的水平滚动条。
有没有一种方法可以补偿垂直滚动条的宽度?如果没有,我将如何获取滚动条的宽度,以便手动将其添加到框架的最大尺寸?
这是一个高而窄的框架示例:
class TallFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, title='Tall Frame')
self.scroll = wx.ScrolledWindow(parent=self) # our scroll area where we'll put everything
scroll_sizer = wx.BoxSizer(wx.VERTICAL)
# Fill the scroll area with something...
for i in xrange(10):
textbox = wx.StaticText(self.scroll, -1, "%d) Some random text" % i, size=(400, 100))
scroll_sizer.Add(textbox, 0, wx.EXPAND)
self.scroll.SetSizer(scroll_sizer)
self.scroll.Fit()
width, height = self.scroll.GetBestSize()
self.SetMaxSize((width, -1)) # Trying to limit the width of our frame
self.scroll.SetScrollbars(1, 1, width, height) # throwing up some scrollbars
如果您创建此框架,您会发现self.SetMaxSize 设置得太窄。因为self.scroll.GetBestSize()没有考虑滚动条的宽度,所以总会有一个水平滚动条。
【问题讨论】:
-
我很感兴趣,但不知道问题或答案。您能否发布一个说明这一点的小代码示例?
-
感谢您发布代码。我看到了这个问题并玩了一下,但没有弄清楚。 wxPython-users 或 wx-users 上的某个人肯定会知道。 (有件事让我感到好奇,尽管您在添加滚动条之前设置了所有尺寸。)
-
为什么要设置最大尺寸?让最终用户让您的应用变得非常大有什么害处?
标签: python user-interface wxpython