A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 易大帅 高级黑马   /  2017-3-21 07:42  /  3494 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

输入并显示数字
有时你想要显示图形化的数字信息,或你想让用户不必使用键盘来输入一个数字量。在这一节,我们将浏览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



1 个回复

倒序浏览
如何在滑块中增加很多事件~~~~~~感谢分享
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马