输入并显示数字
有时你想要显示图形化的数字信息,或你想让用户不必使用键盘来输入一个数字量。在这一节,我们将浏览wxPython 中用于数字输入和显示的工具:滑块(slider )、微调控制框和显示量度的标尺。
如何生成一个滑块?
滑块是一个窗口部件,它允许用户通过在该控件的尺度内拖动指示器来选择一个数值。在wxPython 中,该控件类是wx.Slider ,它包括了滑块的当前值的只读文本的显示。图7.7显示了水平和垂直滑块的例子。
图7.7
滑块的基本使用是十分简单的,但是你可以增加许多事件。
如何使用滑块
例7.7是产生图7.7的例子。
例7.7 水平和垂直滑块的显示代码
Python代码
- import wx
-
- class SliderFrame(wx.Frame):
- def __init__(self):
- wx.Frame.__init__(self, None, -1, 'Slider Example',
- size=(300, 350))
- panel = wx.Panel(self, -1)
- self.count = 0
- slider = wx.Slider(panel, 100, 25, 1, 100, pos=(10, 10),
- size=(250, -1),
- style=wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_LABELS )
- slider.SetTickFreq(5, 1)
- slider = wx.Slider(panel, 100, 25, 1, 100, pos=(125, 70),
- size=(-1, 250),
- style=wx.SL_VERTICAL | wx.SL_AUTOTICKS | wx.SL_LABELS )
- slider.SetTickFreq(20, 1)
-
- if __name__ == '__main__':
- app = wx.PySimpleApp()
- frame = SliderFrame()
- frame.Show()
- app.MainLoop()
通常,当你使用wx.Slider 类时,所有你所需要的就是一个构造函数,它与别的调用不同,如下所示: wx.Slider(parent , id , value , minValue , maxValue , pos =wxDefaultPosition , size =wx.DefaultSize , style=wx.SL_HORIZONTAL , validator =wx.DefaultValidator , name ="slider ") value 是滑块的初始值,而minValue 和maxValue 是两端的值。
使用滑块样式工作
滑块的样式管理滑块的位置和方向,如下表7.9所示。
表7.9 wx.Slider 的样式
wx.SL_AUTOTICKS :如果设置这个样式,则滑块将显示刻度。刻度间的间隔通过SetTickFreq 方法来控制。 wx.SL_HORIZONTAL :水平滑块。这是默认值。 wx.SL_LABELS :如果设置这个样式,那么滑块将显示两头的值和滑块的当前只读值。有些平台可能不会显示当前值。 wx.SL_LEFT :用于垂直滑块,刻度位于滑块的左边。 wx.SL_RIGHT :用于垂直滑块,刻度位于滑块的右边。 wx.SL_TOP :用于水平滑块,刻度位于滑块的上部。 wx.SL_VERTICAL :垂直滑块。
如果你想通过改变滑块中的值来影响你的应用程序中的其它的部分,那么这儿有几个你可使用的事件。这些事件与窗口滚动条所发出的是相同的,详细的说明参见第8章的滚动条部分。
表7.10列出了你可用于滑块的Set *()方法。每个Set *()方法都有一个对应的Get 方法——Get 方法的描述参考其对应的Set *()方法。
表7.10
GetRange() SetRange(minValue , maxValue) :设置滑块的两端值。 GetTickFreq() SetTickFreq(n , pos) :使用参数n设置刻度的间隔。参数pos 没有被使用,但是它仍然是必要的,将它设置为1。 GetLineSize() SetLineSize(lineSize) :设置你每按一下方向键,滑块所增加或减少的值。 GetPageSize() SetPageSize(pageSize) :设置你每按一下PgUp 或PgDn 键,滑块所增加或减少的值。 GetValue() SetValue(value) :设置滑块的值。
尽管滑块提供了一个可能范围内的值的快速的可视化的表示,但是它们也有两个缺点。其一是它们占据了许多的空间,另外就是使用鼠标精确地设置滑块是困难的。下面我们将讨论的微调控制器解决了上面的这两个问题。
如何得到那些灵巧的上下箭头按钮?
微调控制器是文本控件和一对箭头按钮的组合,它用于调整数字值,并且在你要求一个最小限度的屏幕空间的时候,它是替代滑块的最好选择。图7.8显示了wxPython 的微调控制器控件。
图7.8
在wxPython 中,类wx.SpinCtrl 管理微调按钮和相应的文本显示。在接下来的部分,我们将创建一个微调控制器。
如何创建一个微调控制器
要使用wx.SpinCtrl 来改变值,可通过按箭头按钮或通过在文本控件中输入。键入的非数字的文本将被忽略,尽管控件显示的是键入的非数字的文本。一个超出范围的值将被认作是相应的最大或最小值,尽管显示的是你输入的值。例7.8显示了wx.SpinCtrl 的用法。
例7.8 使用wx.SpinCtrl
Python代码
- import wx
-
- class SpinnerFrame(wx.Frame):
- def __init__(self):
- wx.Frame.__init__(self, None, -1, 'Spinner Example',
- size=(100, 100))
- panel = wx.Panel(self, -1)
- sc = wx.SpinCtrl(panel, -1, "", (30, 20), (80, -1))
- sc.SetRange(1,100)
- sc.SetValue(5)
-
- if __name__ == '__main__':
- app = wx.PySimpleApp()
- SpinnerFrame().Show()
- app.MainLoop()
几乎微调控件所有复杂的东西都是在其构造函数中,其构造函数如下:
Python代码
- wx.SpinCtrl(parent, id=-1, value=wx.EmptyString, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.SP_ARROW_KEYS, min=0, max=100, initial=0, name="wxSpinCtrl")
参数value 是虚设的。使用initial 参数来设置该控件的值,并使用min 和max 来设置该控件的范围。 对于wx.SpinCtrl 有两个样式标记。默认样式是wx.SP_ARROW_KEYS ,它允许用户通过键盘上的上下箭头键来改变控件的值。样式wx.SP_WRAP 使得控件中的值可以循环改变,也就是说你通过箭头按钮改变控件中的值到最大或最小值时,如果再继续,值将变为最小或最大,从一个极端到另一个极端。
你也可以捕获EVT_SPINCTRL 事件,它在当控件的值改变时产生(即使改变是直接由文本输入引起的)。如果文本改变了,将引发一个EVT_TEXT 事件,就如同你使用一个单独的文本控件时一样。
如例7.8所示,你可以使用SetRange(minVal , maxVal) 和 SetValue(value) 方法来设置范围和值。SetValue() 函数要求一个字符串或一个整数。要得到值,使用方法:GetValue() (它返回一个整数), GetMin() , 和 GetMax() 。
当你需要对微调控制器的行为有更多的控制时,如允许浮点数或一个字符串的列表,你可以把一个wx.SpinButton和一个wx.TextCtrl 放到一起,并在它们之间建立一个联系。然后捕获来自wx.SpinButton 的事件,并更新wx.TextCtrl 中的值。
如何生成一个进度条?
如果你只想图形化地显示一个数字值而不允许用户改变它,那么使用相应的wxPython 窗口部件wx.Gauge 。 相关的例子就是图7.9所显示的进度条。
图7.9
|