wxPython - SplitterWindow 类

  • 简述

    这个类的对象是一个布局管理器,它拥有两个子窗口,它们的大小可以通过拖动它们之间的边界来动态改变。这Splitter control提供一个可以拖动以调整控件大小的句柄。
    wx.SplitterWindow类有一个非常基本的构造函数,所有参数都具有通常的默认值。
    
    wx.SplitterWindow(self, id, pos, size, style)
    
    样式参数的预定义值列表如下 -
    序列号 参数及说明
    1
    wxSP_3D
    绘制 3D 效果边框和窗扇
    2
    wxSP_THIN_SASH
    画一条细腰带
    3
    wxSP_3DSASH
    绘制 3D 效果窗扇(默认样式的一部分)
    4
    wxSP_BORDER
    绘制标准边框
    5
    wxSP_NOBORDER
    无边框(默认)
    6
    wxSP_PERMIT_UNSPLIT
    始终允许拆分,即使最小窗格大小不为零
    SplitterWindow 类的事件绑定器 -
    序列号 事件和描述
    1
    EVT_SPLITTER_SASH_POS_CHANGING()
    窗扇位置正在改变中
    2
    EVT_SPLITTER_SASH_POS_CHANGED()
    腰带位置变了
    3
    EVT_SPLITTER_UNSPLIT()
    拆分器刚刚未拆分
    4
    EVT_SPLITTER_DCLICK()
    窗扇被双击。默认行为是在发生这种情况时取消拆分窗口
    以下代码演示了 SplitterWindow 的功能。拆分器对象被添加到顶层框架。
    
    splitter = wx.SplitterWindow(self, -1)
    
    Panel 旨在容纳多行 TextCtrl 对象。
    
    b = wx.BoxSizer(wx.HORIZONTAL) 
    self.text = wx.TextCtrl(panel1,style = wx.TE_MULTILINE)
     
    b.Add(self.text, 1, wx.EXPAND) 
    panel1.SetSizerAndFit(b)
    
    ListBox 对象被放置在另一个面板中。
    
    panel2 = wx.Panel(splitter, -1) 
    languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript', 'PHP', 'VB.NET', 'C#'] 
    lst = wx.ListBox(panel2, size = (100,300), choices = languages, style = wx.LB_SINGLE) 
    hbox1 = wx.BoxSizer(wx.HORIZONTAL) 
    hbox1.Add(lst,1) 
    panel2.SetSizer(hbox1)
    
    拆分器对象是垂直拆分的,两个面板被添加到两个子窗口中。子窗口的宽度可以在窗扇的帮助下调整大小。
    
    splitter.SplitVertically(panel2, panel1)
    
    完整的代码清单如下 -
    
    import wx 
    class Mywin(wx.Frame): 
                
       def __init__(self, parent, title): 
          super(Mywin, self).__init__(parent, title = title,size = (350,300))
          
          splitter = wx.SplitterWindow(self, -1) 
          panel1 = wx.Panel(splitter, -1) 
          b = wx.BoxSizer(wx.HORIZONTAL) 
          
          self.text = wx.TextCtrl(panel1,style = wx.TE_MULTILINE) 
          b.Add(self.text, 1, wx.EXPAND) 
          
          panel1.SetSizerAndFit(b)
          panel2 = wx.Panel(splitter, -1) 
          
          languages = ['C', 'C++', 'Java', 'Python', 'Perl',
             'JavaScript', 'PHP' ,'VB.NET' ,'C#'] 
          lst = wx.ListBox(panel2, size = (100,300), choices = languages, style = wx.LB_SINGLE) 
          
          hbox1 = wx.BoxSizer(wx.HORIZONTAL) 
          hbox1.Add(lst,1) 
          
          panel2.SetSizer(hbox1) 
          splitter.SplitVertically(panel2, panel1) 
          self.Centre() 
          self.Bind(wx.EVT_LISTBOX, self.onListBox, lst) 
          self.Show(True)  
          
       def onListBox(self, event): 
          self.text.AppendText( "Current selection: " + 
             event.GetEventObject().GetStringSelection() +"\n")
             
    ex = wx.App() 
    Mywin(None,'Splitter Demo') 
    ex.MainLoop()
    
    上面的代码产生以下输出 -
    分离器演示