我创建了一个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()
没有考虑滚动条的宽度,因此总会有一个水平滚动条。
答案 0 :(得分:1)
这有点难看,但似乎适用于Window和Linux。但是,有区别。 self.GetVirtualSize()似乎在每个平台上返回不同的值。无论如何,我认为这可能对你有帮助。
width, height = self.scroll.GetBestSize()
width_2, height_2 = self.GetVirtualSize()
print width
print width_2
dx = wx.SystemSettings_GetMetric(wx.SYS_VSCROLL_X)
print dx
self.SetMaxSize((width + (width - width_2) + dx, -1)) # Trying to limit the width of our frame
self.scroll.SetScrollbars(1, 1, width, height) # throwing up some scrollbars