水平回转平台(wxPython - 基本控件之数据调节框SpinCtrl)
Posted
篇首语:眼前多少难甘事,自古男儿当自强。本文由小常识网(cha138.com)小编为大家整理,主要介绍了水平回转平台(wxPython - 基本控件之数据调节框SpinCtrl)相关的知识,希望对你有一定的参考价值。
水平回转平台(wxPython - 基本控件之数据调节框SpinCtrl)
实战wxPython系列-036

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(self, value):设置spin控件的增量值。
- SetMax(self, maxVal):设置最大允许值。
- SetMin(self, minVal):设置最小允许值。
- SetRange(self, min, max):设置允许范围。
- SetValue(self, value):设置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(self, base):设置当前使用的进制基数。
- SetIncrement(self, value):设置spin控件的增量值。
- SetMax(self, maxVal):设置最大允许值。
- SetMin(self, minVal):设置最小允许值。
- SetRange(self, minVal, maxVal):设置允许范围。
- SetSelection(self, from_, to_):选择控件文本部分中从(包括)到(不包括)位置之间的文本。
- SetValue (self, text):设置spin控件的当前值。
- SetValue (self, value):设置spin控件的当前值。

图2:wx.SpinCtrl类继承关系
三、wx.SpinCtrl演示
#数据调节框(wx.SpinCtrl)import wxclass 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(self, digits):设置spin控件值的精度。
- SetIncrement(self, value):设置spin控件的增量值。
- SetMax(self, maxVal):设置最大允许值。
- SetMin(self, minVal):设置最小允许值。
- SetRange(self, minVal, maxVal):设置允许范围。
- SetValue (self, text):设置spin控件的当前值。
- SetValue (self, value):设置spin控件的当前值。

图4:wx.SpinCtrlDouble类继承关系
五、wx.SpinCtrlDouble演示
#数据调节框(wx.SpinCtrlDouble)import wxclass 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。
欢迎关注,评论,收藏,点赞,和转发。
相关参考