wx.Slider控件提供一个垂直或者水平的滑动条,它允许用户沿水平或者垂直方向在某一范围内移动滑块,并将滑块所在的位置转换为一个合法范围内的整数值。
一、wx.Slider简介
wx.Slider窗口样式
- wx.SL_HORIZONTAL:水平显示滑块(这是默认值)。
- wx.SL_VERTICAL:垂直显示滑块。
- wx.SL_AUTOTICKS:显示标记(仅支持部分系统)。
- wx.SL_MIN_MAX_LABELS:显示最小、最大标签。
- wx.SL_VALUE_LABEL:显示值标签。
- wx.SL_LABELS:显示最小值、最大值和值标签(等同于wx.SL_VALUE_LABEL 和wx. SL_MIN_MAX_LABELS一起使用)。
- wx.SL_LEFT:在左侧显示刻度,并强制滑块垂直(仅支持部分系统)。
- wx.SL_RIGHT:在右侧显示刻度,并强制滑块垂直。
- wx.SL_TOP:在顶端显示刻度(仅支持部分系统)。
- wx.SL_BOTTOM:在底部显示刻度(默认值)。
- wx.SL_BOTH:显示滑块两侧的刻度(仅Windows)。
- wx.SL_SELRANGE:显示高亮显示的选择范围(仅Windows)。
- wx.SL_INVERSE:反转滑块上的最小和最大端点。与wx.SL_SELRANGE不兼容。
wx.Slider发出的事件
- EVT_SCROLL:处理所有滚动事件。
- EVT_SCROLL_TOP:处理wx.EVT_SCROLL_TOP滚动到顶部事件(最小位置)。
- EVT_SCROLL_BOTTOM:处理wx.EVT_SCROLL_BOTTOM滚动至底部事件(最大位置)。
- EVT_SCROLL_LINEUP:处理wx.EVT_SCROLL_LINEUP line up事件。
- EVT_SCROLL_LINEDOWN:处理wx.EVT_SCROLL_LINEDOWN line down事件。
- EVT_SCROLL_PAGEUP:处理wx.EVT_SCROLL_PAGEUP page up事件。
- EVT_SCROLL_PAGEDOWN:处理wx.EVT_SCROLL_PAGEDOWN page down事件。
- EVT_SCROLL_THUMBTRACK:处理wx.EVT_SCROLL_THUMBTRACK thumbtrack事件(当用户拖动thumbtrack时发送的频繁事件)。
- EVT_SCROLL_THUMBRELEASE:处理wx.EVT_SCROLL_THUMBRELEASE thumbtrack释放事件。
- EVT_SCROLL_CHANGE:处理滚动结束的wx.EVT_SCROLL_CHANGED 事件(仅MSW)。
- EVT_COMMAND_SCROLL:处理所有滚动事件。
- EVT_COMMAND_SCROLL_TOP:处理wx.EVT_SCROLL_TOP滚动到顶部事件(最小位置)。
- EVT_COMMAND_SCROLL_BOTTOM:处理wx.EVT_SCROLL_BOTTOM滚动至底部事件(最大位置)。
- EVT_COMMAND_SCROLL_LINEUP:处理wx.EVT_SCROLL_LINEUP line up事件。
- EVT_COMMAND_SCROLL_LINEDOWN:处理wx.EVT_SCROLL_LINEDOWN line down事件。
- EVT_COMMAND_SCROLL_PAGEUP:处理wx.EVT_SCROLL_PAGEUP page up事件。
- EVT_COMMAND_SCROLL_PAGEDOWN:处理wx.EVT_SCROLL_PAGEDOWN page down事件。
- EVT_COMMAND_SCROLL_THUMBTRACK:处理wx.EVT_SCROLL_THUMBTRACK thumbtrack事件(当用户拖动thumbtrack时发送的频繁事件)。
- EVT_COMMAND_SCROLL_THUMBRELEASE:处理wx.EVT_SCROLL_THUMBRELEASE thumbtrack释放事件。
- EVT_COMMAND_SCROLL_CHANGED:处理滚动结束的wx.EVT_SCROLL_CHANGED 事件(仅MSW)。
- EVT_SLIDER:处理在wx.Slider位置发生变化后, 将生成的wx.EVT_SLIDER事件。注意这个事件的处理处理将接收一个wx. CommandEvent作为参数,而不像其他事件以接收一个wx. ScrollEvent作为参数。
wx.Slider常用方法
- ClearSel(self):当控件窗口样式设置有wx.SL_SELRANGE时,清除滑块上的选择区域。
- ClearTicks(self):清除刻度。
- GetLineSize(self):返回操作移动单位,这个移动单位用来在用户使用方向键操作滑块的时候使用。
- GetMax(self):获得滑块设置的最大值。
- GetMin(self):获得滑块设置的最小值。
- GetPageSize(self):获得操作移动单位,这个单位在用户用鼠标点击滑条的任一边的时候使用。
- GetRange(self):获得滑块的设置范围。
- GetSelEnd(self):返回选择的结束点。
- GetSelStart(self):返回选择的开始点。
- GetThumbLength(self):返回Thumb的长度。
- GetTickFreq(self):返回刻度的绘制频率。
- GetValue(self):返回滑块当前位置。
- SetLineSize(self, lineSize):设置操作移动单位,这个移动单位用来在用户使用方向键操作滑块的时候使用。
- SetMax(self, maxValue):设置滑块的最大值。
- SetMin(self, minValue):设置滑块的最小值。
- SetPageSize(self, pageSize):设置操作移动单位,这个单位在用户用鼠标点击滑条的任一边的时候使用。
- SetRange(self, minValue, maxValue):设置滑块的最大最小值。
- SetSelection(self, startPos, endPos):设置选择位置。
- SetThumbLength(self, len):设置Thumb长度。
- SetTick(self, tickPos):设置刻度位置。
- SetTickFreq(self, freq):设置刻度绘制频率。
- SetValue(self, value):设置滑块位置。
图1:wx.Slider 类继承关系
二、wx.Slider演示
#滑动条(wx.Slider)
import wx
class SampleSlider(wx.Frame):
def __init__(self, *args, **kw):
super(SampleSlider, self).__init__(*args, **kw)
self.InitUi()
def InitUi(self):
#设置标题
self.SetTitle("实战wxPython: Slider演示")
#设置窗口尺寸
self.SetSize(400, 240)
panel = wx.Panel(self)
sizer = wx.GridBagSizer(5, 5)
sld = wx.Slider(panel, value = 200, minValue = 0, maxValue = 500, style = wx.SL_HORIZONTAL)
sld.Bind(wx.EVT_SCROLL, self.OnSliderScroll)
sizer.Add(sld, pos = (0, 0), flag = wx.ALL | wx.EXPAND, border = 25)
self.txt = wx.StaticText(panel, label="200")
sizer.Add(self.txt, pos = (0, 1), flag = wx.TOP | wx.RIGHT, border = 25)
sizer.AddGrowableCol(0)
panel.SetSizer(sizer)
self.Centre()
def OnSliderScroll(self, e):
obj = e.GetEventObject()
val = obj.GetValue()
self.txt.SetLabel(str(val))
def main():
app = wx.App()
sample = SampleSlider(None)
sample.Show()
app.MainLoop()
if __name__ == "__main__":
main()
运行上面的代码,拖动滑块,滑块当前的值显示在右边的静态文本中。
图2:wx.Slider 演示
sld = wx.Slider(panel, value = 200, minValue = 0, maxValue = 500, style = wx.SL_HORIZONTAL)
创建 一个wx.Slider滑块后,用value参数设置滑块的初始位置,用minValue和maxValue参数设置滑块的最小和最大位置。wx. SL_HORIZONTAL样式表示滑块是水平放置的。
sld.Bind(wx.EVT_SCROLL, self.OnSliderScroll)
当收到wx.EVT_SCROLL事件时,则调用OnSliderScroll方法进行处理。
self.txt = wx.StaticText(panel, label="200")
当前选择的滑块值显示在静态文本中。
def OnSliderScroll(self, e):
obj = e.GetEventObject()
val = obj.GetValue()
self.txt.SetLabel(str(val))
在OnSliderScroll()方法中,获得滑块的当前值,并将其设置为静态文本。
三、本文知识点
- 了解和使用wx.Slider。