关闭子帧后,wx.ScrolledWindow滚动条将移至顶部。

时间:2018-06-24 06:45:27

标签: python-3.x wxpython wxwidgets wxpython-phoenix

在我的应用中,我需要制作约150个动态创建的面板,其中包含说明和按钮。

每个按钮将在新窗口中显示另一个URL。

例如,当您将主窗口滚动到中间并单击面板上带有URL显示的新框架上的按钮时。

当您关闭它时,滚动条将移至主框架的顶部。

如何防止这种情况发生,并保持滚动条在主框架中的位置与打开子窗口之前相同?

谢谢您的帮助!

import wx
import wx.lib.scrolledpanel
import wx.html2

class Start ( wx.Frame ):
    def __init__( self, parent ):
        wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = 
        wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 800,800 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
        self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_HIGHLIGHT ) )
        bSizer23 = wx.BoxSizer( wx.VERTICAL )

        self.m_scrolledWindow2 = wx.ScrolledWindow( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL|wx.VSCROLL )
        self.m_scrolledWindow2.SetScrollRate( 5, 5 )
        bSizer24 = wx.BoxSizer( wx.VERTICAL )

        for x in range(100):
            self.m_panel1 = wx.Panel( self.m_scrolledWindow2, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
            self.m_panel1.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_INFOBK ) )

            bSizer25 = wx.BoxSizer( wx.VERTICAL )
            self.m_panel2 = wx.Panel( self.m_panel1, wx.ID_ANY, wx.DefaultPosition, wx.Size( 500,300 ), wx.TAB_TRAVERSAL )
            bSizer26 = wx.BoxSizer( wx.VERTICAL )

            #buttons
            bSizer12 = wx.BoxSizer( wx.HORIZONTAL )
            bSizer12 = wx.BoxSizer( wx.HORIZONTAL )
            self.strona_projektu_button = wx.Button( self.m_panel2, wx.ID_ANY, u"Button", wx.DefaultPosition, wx.DefaultSize, 0 )
            bSizer12.Add( self.strona_projektu_button, 0, wx.ALL, 5 )

            self.strona_projektu_button.Bind(wx.EVT_BUTTON, lambda evt, name='Button': self.show_web(evt,))

            self.m_panel2.SetSizer( bSizer26 )
            self.m_panel2.Layout()
            bSizer26.Fit( self.m_panel2 )
            bSizer25.Add( self.m_panel2, 1, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )

            self.m_panel1.SetSizer( bSizer25 )
            self.m_panel1.Layout()
            bSizer25.Fit( self.m_panel1 )
            bSizer24.Add( self.m_panel1, 1, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )

            self.m_scrolledWindow2.SetSizer( bSizer24 )
            self.m_scrolledWindow2.Layout()
            bSizer24.Fit( self.m_scrolledWindow2 )
            bSizer24.Layout()

        bSizer23.Add( self.m_scrolledWindow2, 1, wx.EXPAND |wx.ALL, 5 )
        self.SetSizer( bSizer23 )
        self.Layout()
        self.Centre( wx.BOTH )


    def show_web( self, event,  ):
        dialog = MyBrowser(None) 
        dialog.browser.LoadURL('https://google.com') 
        dialog.Show() 


class MyBrowser(wx.Frame): 
    def __init__(self, *args, **kwds): 
        wx.Frame.__init__(self, *args, **kwds) 
        self.Bind ( wx.EVT_CLOSE, self.on_close )
        sizer = wx.BoxSizer(wx.VERTICAL) 
        self.browser = wx.html2.WebView.New(self) 
        sizer.Add(self.browser, 1, wx.EXPAND, 10) 
        self.SetSizer(sizer) 
        self.SetSize((1000, 700)) 

    def on_close ( self, event ):    
        self.Destroy()

if __name__=='__main__':
    app = wx.App(0)
    frame = Start(None).Show()
    app.MainLoop()

0 个答案:

没有答案