【发布时间】:2015-08-28 03:09:27
【问题描述】:
我想要一个垂直滚动条贯穿整个框架(顶部块)。我能够获得各个面板的垂直滚动条 -
这里的两个图都是threads 由同一个class 绘制的。
这是在 gnuradio 中设置 top block 的代码 -
class top_block_gui(gr.top_block):
def __init__(self, title='', size=default_gui_size):
gr.top_block.__init__(self)
.............
self._frame = wx.Frame(None, title=title)
self._panel = panel.Panel(self._frame)
.............
def Run(self, start=True, max_nouts=0):
#setup app
self._frame.Bind(wx.EVT_CLOSE, _quit)
self._sizer = wx.BoxSizer(wx.VERTICAL)
self._sizer.Add(self._panel, 0, wx.EXPAND)
self._frame.SetSizerAndFit(self._sizer)
self._frame.SetAutoLayout(True)
self._frame.Show(True)
self._app.SetTopWindow(self._frame)
#start flow graph
..................
Edit 1 - 正如 pss 在 Method 1 中建议的那样 -
class top_block_gui(gr.top_block):
def __init__(self, title='', size=default_gui_size):
gr.top_block.__init__(self)
.............
self._frame = wx.Frame(None, title=title)
self._scroll = wx.ScrolledWindow(self._frame,-1) #Added
self._scroll.SetScrollbars(1,1,600,400) #Added
self._panel = panel.Panel(self._scroll) #Changed
.............
def Run(self, start=True, max_nouts=0):
#setup app
self._frame.Bind(wx.EVT_CLOSE, _quit)
self._sizer = wx.BoxSizer(wx.VERTICAL)
self._sizer.Add(self._panel, 0, wx.EXPAND)
self._scroll.SetSizerAndFit(self._sizer) #Changed
self._frame.SetAutoLayout(True)
self._frame.Show(True)
self._app.SetTopWindow(self._frame)
#start flow graph
..................
但我仍然得到与以前相同的结果。 没有滚动条出现。我是否必须将其 visibility true 设置在某个地方?
【问题讨论】:
-
也许不是将元素添加到面板本身,而是尝试创建一个sizer,将元素添加到其中,然后在面板上设置这个sizer。
-
尝试
self._panel = wx.lib.scrolledpanel.ScrolledPanel(self._scroll)也可以尝试手动调整框架大小以查看是否出现滚动条。有时它们仅在框架调整为特定大小或小于该大小时才会出现。 -
感谢您的帮助。它终于奏效了。我必须在 edit 1 -
self._scroll.SetSizer(self._sizer)self._frame.SetAutoLayout(False)下的代码中更改这些行
标签: python wxpython scrollbar gnuradio