实战wxPython:036 - 基本控件之数据调节框SpinCtrl

wx.SpinCtrl是wx.TextCtrl和wx.SpinButton控件的组合。当用户点击wx.SpinButton的向上或者向下按钮的时候,wx.TextCtrl中的值将会随之变化。用户也可以直接在wx.TextCtrl中输入想要的值。

一、wx.SpinButton

一个wx.SpinButton有两个小的上下(或左右)箭头按钮。它通常用于文本控件旁边,用于增加或减少值。

wx.SpinButton支持的窗口样式:

  • wx.SP_HORIZONTAL:指定水平旋转按钮。
  • wx.SP_VERTICAL:指定垂直旋转按钮。
  • wx.SP_ARROW_KEYS:用户可以使用方向键来更改数值。
  • wx.SP_WRAP:当数值在最小值和最大值处换行。

wx.SpinButton可生成的事件

  • EVT_SPIN:当按下箭头改变旋转按钮值时生成。
  • EVT_SPIN_UP:当按左/上箭头改变旋转按钮值时生成。
  • EVT_SPIN_DOWN:当按下右/下箭头改变旋转按钮值时生成。

wx.SpinButton常用方法

  • GetIncrement(self):返回spin控件的增量值。
  • GetMax(self):返回最大允许值。
  • GetMin(self):返回最小允许值。
  • GetRange(self):返回允许范围。
  • GetValue(self):返回spin按钮的当前值。
  • SetIncrement(selfvalue):设置spin控件的增量值。
  • SetMax(selfmaxVal):设置最大允许值。
  • SetMin(selfminVal):设置最小允许值。
  • SetRange(selfminmax):设置允许范围。
  • SetValue(selfvalue):设置spin按钮的当前值。

 图1:wx.SpinButton类继承关系

二、wx.SpinCtrl

wxSpinCtrl将wxTextCtrl和wxSpinButton组合在一个控件中,并显示一个整数。

wx.SpinCtrl支持的窗口样式:

  • wx.SP_ARROW_KEYS:用户可以使用方向键来更改数值。
  • wx.SP_WRAP:当数值在最小值和最大值处换行。
  • wx.TE_PROCESS_ENTER:指示控件应生成wx.EVT_TEXT_ENTER事件。使用这种样式将防止用户在MSW下使用Enter键进行对话框导航(例如激活对话框中的默认按钮)。
  • wx.ALIGN_LEFT:与wx.TextCtrl的wx.TE_LEFT相同:文本向左对齐(这是默认值)。
  • wx.ALIGN_CENTRE_HORIZONTAL:与wx.TextCtrl的wx.TE_CENTRE相同:文本居中。
  • wx.ALIGN_RIGHT:与 wx.TextCtrl的wx.TE_RIGHT相同:文本是右对齐的。

wx.SpinCtrl发出的事件

  • EVT_SPINCTRL:处理wx.EVT_SPINCTRL事件,该事件在spin控件的数值更新时生成。

wx.SpinCtrl常用方法

  • GetBase(self):返回当前使用的进制基数,默认为10。
  • GetIncrement(self):返回spin控件的增量值。
  • GetMax(self):返回最大允许值。
  • GetMin(self):返回最小允许值。
  • GetRange(self):返回允许范围。
  • GetTextValue(self):返回控件的文本输入部分中的文本。
  • GetValue(self):返回spin控件的当前值。
  • SetBase(selfbase):设置当前使用的进制基数。
  • SetIncrement(selfvalue):设置spin控件的增量值。
  • SetMax(selfmaxVal):设置最大允许值。
  • SetMin(selfminVal):设置最小允许值。
  • SetRange(selfminValmaxVal):设置允许范围。
  • SetSelection(selffrom_to_):选择控件文本部分中从(包括)到(不包括)位置之间的文本。
  • SetValue (self, text):设置spin控件的当前值。
  • SetValue (self, value):设置spin控件的当前值。

 图2:wx.SpinCtrl类继承关系

三、wx.SpinCtrl演示

#数据调节框(wx.SpinCtrl)

import wx

class SampleSpinCtrl(wx.Frame):

    def __init__(self, *args, **kw):
        super(SampleSpinCtrl, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        #设置标题
        self.SetTitle("实战wxPython: SpinCtrl演示")
        #设置窗口尺寸
        self.SetSize(360, 280)

        panel = wx.Panel(self)

        sizer = wx.GridBagSizer(5, 5)

        st1 = wx.StaticText(panel, label="将华氏温度转换为摄氏温度")
        sizer.Add(st1, pos = (0, 0), span = (1, 2), flag = wx.ALL, border = 15)

        st2 = wx.StaticText(panel, label = "华氏度:")
        sizer.Add(st2, pos = (1, 0), flag = wx.ALL | wx.ALIGN_CENTER, border = 15)

        self.sc = wx.SpinCtrl(panel, value="0")
        self.sc.SetRange(-459, 1000)
        sizer.Add(self.sc, pos = (1, 1), flag = wx.ALIGN_CENTER)

        st3 = wx.StaticText(panel, label="摄氏度:")
        sizer.Add(st3, pos = (2, 0), flag = wx.ALL | wx.ALIGN_RIGHT, border = 15)

        self.celsius = wx.StaticText(panel, label="")
        sizer.Add(self.celsius, pos = (2, 1), flag = wx.ALL, border = 15)

        computeButton = wx.Button(panel, label="计算")
        computeButton.SetFocus()
        sizer.Add(computeButton, pos = (3, 1), flag = wx.ALIGN_RIGHT | wx.TOP, border = 30)

        closeButton = wx.Button(panel, label="关闭")
        sizer.Add(closeButton, pos = (3, 2), flag = wx.ALIGN_LEFT | wx.TOP, border = 30)

        computeButton.Bind(wx.EVT_BUTTON, self.OnCompute)
        closeButton.Bind(wx.EVT_BUTTON, self.OnClose)

        panel.SetSizer(sizer)

        self.Centre()

    def OnClose(self, e):
        self.Close(True)

    def OnCompute(self, e):
        fahr = self.sc.GetValue()
        cels = round((fahr - 32) * 5 / 9.0, 2)
        self.celsius.SetLabel(str(cels))

def main():
    app = wx.App()
    sample = SampleSpinCtrl(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

上面的代码演示了华氏温度转换为摄氏温度,使用wx.SpinCtrl来设置华氏温度。

self.sc = wx.SpinCtrl(panel, value="0")
self.sc.SetRange(-459, 1000)

创建初始值为0的wx.SpinCtrl控件。SetRange()方法为控件设置一个取值范围。

def OnCompute(self, e):
     fahr = self.sc.GetValue()
     cels = round((fahr - 32) * 5 / 9.0, 2)
     self.celsius.SetLabel(str(cels))

当单击计算按钮时,OnCompute()方法被调用。在OnCompute()中,我们从spin 控件获取当前值。计算摄氏温度,并将计算出的温度设置显示在一个静态文本控件上。

 图3:wx.SpinCtrl演示

四、wx.SpinCtrlDouble

wxSpinCtrlDouble将wxTextCtrl和wxSpinButton组合在一个控件中,并显示一个实数。

wx.SpinCtrlDouble支持的窗口样式:

  • wx.SP_ARROW_KEYS:用户可以使用方向键来更改数值。
  • wx.SP_WRAP:当数值在最小值和最大值处换行。

wx.SpinCtrlDouble发出的事件

  • EVT_SPINCTRLDOUBLE:当spin控件的数值发生变化 (即单击向上/向下旋转按钮时,按下ENTER时,或控件失去焦点且新值与上次不同时) 时生成。

wx.SpinCtrlDouble常用方法

  • GetDigits(self):获取spin控件值的精度。
  • GetIncrement(self):返回spin控件的增量值。
  • GetMax(self):返回最大允许值。
  • GetMin(self):返回最小允许值。
  • GetRange(self):返回允许范围。
  • GetTextValue(self):返回控件的文本输入部分中的文本。
  • GetValue(self):返回spin控件的当前值。
  • SetDigits(selfdigits):设置spin控件值的精度。
  • SetIncrement(selfvalue):设置spin控件的增量值。
  • SetMax(selfmaxVal):设置最大允许值。
  • SetMin(selfminVal):设置最小允许值。
  • SetRange(selfminValmaxVal):设置允许范围。
  • SetValue (self, text):设置spin控件的当前值。
  • SetValue (self, value):设置spin控件的当前值。

 图4:wx.SpinCtrlDouble类继承关系

五、wx.SpinCtrlDouble演示

#数据调节框(wx.SpinCtrlDouble)

import wx

class SampleSpinCtrlDouble(wx.Frame):

    def __init__(self, *args, **kw):
        super(SampleSpinCtrlDouble, self).__init__(*args, **kw)

        self.InitUi()

    def InitUi(self):
        #设置标题
        self.SetTitle("实战wxPython: SpinCtrlDouble")
        #设置窗口尺寸
        self.SetSize(360, 280)

        panel = wx.Panel(self)

        sizer = wx.GridBagSizer(5, 5)

        st1 = wx.StaticText(panel, label="将华氏温度转换为摄氏温度")
        sizer.Add(st1, pos = (0, 0), span = (1, 2), flag = wx.ALL, border = 15)

        st2 = wx.StaticText(panel, label = "华氏度:")
        sizer.Add(st2, pos = (1, 0), flag = wx.ALL | wx.ALIGN_CENTER, border = 15)

        self.sc = wx.SpinCtrlDouble(panel, value="0")
        self.sc.SetRange(-459, 1000)
        self.sc.SetDigits(1)
        self.sc.SetIncrement(0.5)
        sizer.Add(self.sc, pos = (1, 1), flag = wx.ALIGN_CENTER)

        st3 = wx.StaticText(panel, label="摄氏度:")
        sizer.Add(st3, pos = (2, 0), flag = wx.ALL | wx.ALIGN_RIGHT, border = 15)

        self.celsius = wx.StaticText(panel, label="")
        sizer.Add(self.celsius, pos = (2, 1), flag = wx.ALL, border = 15)

        computeButton = wx.Button(panel, label="计算")
        computeButton.SetFocus()
        sizer.Add(computeButton, pos = (3, 1), flag = wx.ALIGN_RIGHT | wx.TOP, border = 30)

        closeButton = wx.Button(panel, label="关闭")
        sizer.Add(closeButton, pos = (3, 2), flag = wx.ALIGN_LEFT | wx.TOP, border = 30)

        computeButton.Bind(wx.EVT_BUTTON, self.OnCompute)
        closeButton.Bind(wx.EVT_BUTTON, self.OnClose)

        panel.SetSizer(sizer)

        self.Centre()

    def OnClose(self, e):
        self.Close(True)

    def OnCompute(self, e):
        fahr = self.sc.GetValue()
        cels = round((fahr - 32) * 5 / 9.0, 2)
        self.celsius.SetLabel(str(cels))

def main():
    app = wx.App()
    sample = SampleSpinCtrlDouble(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

上述代码与wx.TextCtrl的演示代码基本相同。

self.sc.SetDigits(1)
self.sc.SetIncrement(0.5)

添加上面两句设置数值精度和一个小数值的步长。

 图5:wx.SpinCtrlDouble演示

六、本文知识点

  • 了解wx.SpinButton。
  • 了解和使用wx.SpinCtrl。
  • 了解和使用wx.SpinCtrlDoule。

前一篇:实战wxPython:035 - 基本控件之滑块Slider

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值