1. SpinCtrl介绍
SpinCtrl又称为微调控制器,它由微调按钮和文本控件两部分组成。我们可以通过按微调按钮箭头或者在文本控件中键入数据,或者通过键盘上的上下键来改变值(如果使能了对应的flag)。当通过文件键入数据时,如果键入的值小于最小值时,控件的value
会设置为最小值(可参见示例代码的运行结果。最小值为
1
1
1,如果输入
0
0
0,文本的实际值其实被设置成了
1
1
1)。
2. 代码示例
import wx
class SpinCtrlFrame(wx.Frame):
def __init__(self):
super(SpinCtrlFrame, self).__init__(None, -1, "SpinCtrl Frame", size=(280, 100))
panel = wx.Panel(self, 1)
self.sc = wx.SpinCtrl(panel, -1, "", (30, 20), (80, -1), style=wx.SP_WRAP | wx.SP_ARROW_KEYS)
self.sc.SetRange(1, 100)
self.sc.SetValue(5)
self.sc.Bind(wx.EVT_TEXT, self.OnText)
self.sc.Bind(wx.EVT_SPINCTRL, self.OnSpinCtrl)
def OnText(self, event):
print("Text changed: ", self.sc.GetValue())
def OnSpinCtrl(self, event):
print("Text is: ", self.sc.GetValue())
def main():
app = wx.App()
frame = SpinCtrlFrame()
frame.Show()
app.MainLoop()
if __name__ == "__main__":
main()
代码第8行创建了一个SpinCtrl
控件。其中,初始
v
a
l
u
e
value
value为空,控件宽度为
80
80
80,同时设置了SP_WRAP
和SP_ARROW_KEYS
两个样式标记(下面会具体说明这些标记的作用)。
代码第9行设置了SpinCtrl
的取值范围
[
0
,
100
]
[0,100]
[0,100]。
代码第10行设置了SpinCtrl
的取值为5。
运行结果如下所示:
3. SpinCtrl
相关样式标志及其作用
样式标志 | 作用 |
---|---|
wx.SP_WRAP | 当取值为最大值,继续按⬆时,文本将显示最小值;反之亦然。 |
wx.SP_ARROW_KEYS | 默认样式。允许用户通过键盘的上下键来改变控件的值。(但是个人在mac上尝试不起效,windows上是有效的) |
wx.SP_HORIZONTAL | 设置微调按钮为左右箭头![]() |
wx.SP_VERTICAL | 设置微调按钮为上下箭头![]() |
wx.SP_3D | 绘制3D边框和分割线。这是默认样式 |
wx.SP_3DSASH | 绘制3D分割线。 |
wx.SP_3DBORDER | 绘制3D边框。 |
4. SpinCtrl
相关事件
示例代码中,包含了下面两个事件的捕获和处理。
事件 | 触发条件 |
---|---|
wx.EVT_TEXT | 当文本改变时,触发该事件。 |
wx.EVT_SPINCTRL | 当控件的值通过微调控件改变时,触发该事件。 |