wxPython - Slider 类

  • 简述

    slider为用户提供了一个可以移动手柄的凹槽。它是控制有界值的经典小部件。凹槽上手柄的位置相当于控件上下限之间的整数。
    wxPython API 包含 wx.Slider 类。它提供与滚动条相同的功能。Slider 提供了一种方便的方法来处理通过滑块特定的 wx.EVT_SLIDER 事件绑定器拖动句柄。
    wx.Slider 构造函数的定义采用以下八个参数 -
    
    wx.Slider(parent, id, value, minValue, maxValue, pos, size, style)
    
    Slider 的上下限值由 minValue 和 maxValue 参数设置。起始值由 value 参数定义。
    定义了许多样式参数值。以下是其中一些 -
    序列号 参数及说明
    1
    wxSL_HORIZONTAL
    水平滑块
    2
    wxSL_VERTICAL
    垂直滑块
    3
    wxSL_AUTOTICKS
    在滑块上显示刻度线
    4
    wxSL_LABELS
    显示最小值、最大值和当前值
    5
    wxSL_MIN_MAX_LABELS
    显示最小值和最大值
    6
    wxSL_VALUE_LABEL
    仅显示当前值
    wx.Slider 类的有用方法是 -
    序列号 方法和描述
    1
    GetMin()
    返回滑块的最小值
    2
    GetMax()
    返回滑块的最大值
    3
    GetValue()
    返回滑块的当前值
    4
    SetMin()
    设置滑块的最小值
    5
    SetMax()
    设置滑块的最大值
    6
    SetRange()
    设置最小和最大滑块值
    7
    SetValue()
    以编程方式设置当前值
    8
    SetTick()
    在给定位置显示刻度线
    9
    SetTickFreq()
    设置最小值和最大值之间的刻度间隔
    由于滑块的行为类似于滚动条,滚动条事件绑定器也可以与它一起使用。
    序列号 事件和描述
    1
    wx.EVT_SCROLL
    处理滚动事件
    2
    wx.EVT_SLIDER
    当滑块位置发生变化时,通过移动手柄或以编程方式
  • 例子

    在下面的示例中,滑块用于控制标签的大小。首先,将一个滑块对象放置在一个垂直的 box sizer 中,其下方是一个 StaticText。
    
    self.sld = wx.Slider(pnl, value = 10, minValue = 1, maxValue = 100,
       style = wx.SL_HORIZONTAL|wx.SL_LABELS)
       
    self.txt = wx.StaticText(pnl, label = 'Hello',style = wx.ALIGN_CENTER)
    
    Wx.EVT_SLIDER binder 与 OnSliderScroll() 处理程序相关联。
    
    self.sld.Bind(wx.EVT_SLIDER, self.OnSliderScroll)
    
    处理程序本身正在获取滑块的当前值并将其用作标签文本的字体大小。
    
    def OnSliderScroll(self, e): 
       obj = e.GetEventObject() 
       val = obj.GetValue() 
       font = self.GetFont() 
       font.SetPointSize(self.sld.GetValue()) 
       self.txt.SetFont(font) 
    
    完整的代码如下 -
    
    import wx 
     
    class Mywin(wx.Frame): 
                
       def __init__(self, parent, title): 
          super(Mywin, self).__init__(parent, title = title,size = (250,150))  
          self.InitUI() 
             
       def InitUI(self):    
          pnl = wx.Panel(self) 
          vbox = wx.BoxSizer(wx.VERTICAL) 
          
          self.sld = wx.Slider(pnl, value = 10, minValue = 1, maxValue = 100,
             style = wx.SL_HORIZONTAL|wx.SL_LABELS) 
             
          vbox.Add(self.sld,1,flag = wx.EXPAND | wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, border = 20) 
          self.sld.Bind(wx.EVT_SLIDER, self.OnSliderScroll) 
          self.txt = wx.StaticText(pnl, label = 'Hello',style = wx.ALIGN_CENTER)                
          vbox.Add(self.txt,1,wx.ALIGN_CENTRE_HORIZONTAL) 
          
          pnl.SetSizer(vbox) 
          self.Centre() 
          self.Show(True)      
          
       def OnSliderScroll(self, e): 
          obj = e.GetEventObject() 
          val = obj.GetValue() 
          font = self.GetFont() 
          font.SetPointSize(self.sld.GetValue()) 
          self.txt.SetFont(font) 
          
    ex = wx.App() 
    Mywin(None,'Slider demo') 
    ex.MainLoop()
    
    运行代码并尝试拖动滑块手柄以查看标签字体大小的变化。上面的代码产生以下输出 -
    滑块输出