繁体   English   中英

如何使滚动条出现在wx.lib.scrolledpanel.ScrolledPanel中,它没有小部件,只有一条直线?

[英]How to make scrollbars appear in a wx.lib.scrolledpanel.ScrolledPanel which has no widgets but only a straight line?

我创建了wx.lib.scrolledpanel.ScrolledPanel。 我将其插入垂直框大小调整器的父面板中。 父面板的大小为width = 500,height = 500。

然后,在ScrolledPanel中绘制一条高度为1000的垂直线。运行该应用程序时,滚动条不会显示在ScrolledPanel上。 我只看到高度为500的垂直线,因为父面板的高度为500。scrolledpanel或父面板中没有小部件。

为什么没有出现垂直滚动条,以便我可以向下滚动并查看该垂直线的其余部分? 如何使其显示?

绘制垂直线后,我什至尝试将ScrolledPanel的高度设置为1000,但它也不起作用,例如:

这不起作用:

create_parent_panel_with_height_500()
create_scrolled_panel()
put_scrolled_panel_on_parent_panel_and_set_sizer()
push_a_button_to_draw_the_vertical_line_with_height_1000()
update_and_refresh_scrolled_panel()

这也不起作用:

create_parent_panel_with_height_500()
create_scrolled_panel()
put_scrolled_panel_on_parent_panel_and_set_sizer()
push_a_button_to_draw_the_vertical_line_with_height_1000()
set_scrolled_panels_height_to_1000()
update_and_refresh_scrolled_panel()

在这两种方法中,绘制垂直线后都不会出现滚动条。

由于面板上没有任何小部件,因此ScrolledPanel并不是最佳选择,因为它会将窗口的虚拟大小和物理大小基于大小调整器所需的空间。 使用wx.ScrolledWindow是一个更好的选择,因为您可以自己控制虚拟大小。

如果由于某种原因而卡在ScrolledPanel ,它仍然可行。 您只需要创建一个大小调整器,并在其上添加一个间隔器即可为您的图形保留足够的空间,然后将大小调整器分配给面板。 ScrolledPanel中有一些代码期望至少有一个子窗口小部件接受焦点,但是如果有任何问题,可以在派生类中处理。

由于您没有粘贴任何“真实”代码,因此很难知道您在做什么错。
也许这会有所帮助:

#!/bin/env python
import wx
import wx.lib.scrolledpanel as SP
class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, - 1, "Frame", size=(300, 300))
        panel = wx.Panel(self, - 1)
        self.scrolledPanel = AScrollPanel(panel)
        panel.Show()

class AScrollPanel(SP.ScrolledPanel):
    def __init__(self, parent):
        SP.ScrolledPanel.__init__(self, parent, -1, size=(200, 100))
        self.parent = parent
        self.Sizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(self.Sizer)
        self.SetupScrolling(scroll_x=True, scroll_y=True, scrollToTop=False)
        self.ATop = wx.StaticText(self, -1, "Top of Line")
        self.ALine = wx.StaticLine(self, -1, size=(30,1000),style=wx.LI_VERTICAL)
        self.ABottom = wx.StaticText(self, -1, "Bottom of Line")
        self.Sizer.Add(self.ATop)
        self.Sizer.Add(self.ALine)
        self.Sizer.Add(self.ABottom)
        self.Layout()

if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame()
    frame.Show(True)
    app.MainLoop() 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM