In this wxPython article i want to show How To Create SpinControl in wxPython. wx.SpinCtrl combines wx.TextCtrl and wx.SpinButton in one control.
So This class supports the following styles:
wx.SP_ARROW_KEYS
: The user can use arrow keys to change the value.wx.SP_WRAP
: The value wraps at the minimum and maximum.wx.TE_PROCESS_ENTER
: Indicates that the control should generatewxEVT_TEXT_ENTER
events. Using this style will prevent the user from using the Enter key for dialog navigation (e.g. activating the default button in the dialog) under MSW.wx.ALIGN_LEFT
: Same aswx.TE_LEFT
for wx.TextCtrl: the text is left aligned (this is the default).
Also you can check More GUI Development Tutorials in the below link.
1: PyQt5 GUI Development Tutorials
2: TKinter GUI Development Tutorials
3: Pyside2 GUI Development Tutorials
4: Kivy GUI Development Tutorials
So this is the complete code for How To Create SpinControl in wxPython
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
import wx class MyFrame(wx.Frame): def __init__(self, parent, title): super(MyFrame, self).__init__(parent, title =title) self.panel = MyPanel(self) class MyPanel(wx.Panel): def __init__(self, parent): super(MyPanel, self).__init__(parent) self.spinControl = wx.SpinCtrl(self, -1, "", (30, 50)) self.spinControl.SetRange(1, 100) self.spinControl.SetValue(5) self.label = wx.StaticText(self, label = "", pos = (30,80)) self.Bind(wx.EVT_SPINCTRL, self.OnSpin, self.spinControl) def OnSpin(self, evt): spinValue = self.spinControl.GetValue() self.label.SetLabelText("The Value Is : " + str(spinValue)) class MyApp(wx.App): def OnInit(self): self.frame = MyFrame(parent=None, title="Spin Control") self.frame.Show() return True app = MyApp() app.MainLoop() |
So this class is MyFrame class that inherits from wx.Frame and it is a top level window that contains our panel.
1 2 3 4 5 6 7 8 9 |
class MyFrame(wx.Frame): def __init__(self, parent, title): super(MyFrame, self).__init__(parent, title =title) self.panel = MyPanel(self) |
After that we have MyPanel class that inherits from wx.Panel and it is the place that we create our widgets and layouts in this class. in this class we create our SpinControl with a StaticText.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class MyPanel(wx.Panel): def __init__(self, parent): super(MyPanel, self).__init__(parent) self.spinControl = wx.SpinCtrl(self, -1, "", (30, 50)) self.spinControl.SetRange(1, 100) self.spinControl.SetValue(5) self.label = wx.StaticText(self, label = "", pos = (30,80)) self.Bind(wx.EVT_SPINCTRL, self.OnSpin, self.spinControl) |
These are for creating SpinControl also we set the range value for our SpinControl
1 2 3 |
self.spinControl = wx.SpinCtrl(self, -1, "", (30, 50)) self.spinControl.SetRange(1, 100) self.spinControl.SetValue(5) |
This is our label or we can call it StaticText
1 |
self.label = wx.StaticText(self, label = "", pos = (30,80)) |
In here we bind a method to our SpinControl
1 |
self.Bind(wx.EVT_SPINCTRL, self.OnSpin, self.spinControl) |
This is the event method for our SpinControl
1 2 3 |
def OnSpin(self, evt): spinValue = self.spinControl.GetValue() self.label.SetLabelText("The Value Is : " + str(spinValue)) |
So the last class is MyApp class that inherits from wx.App. the OnInit() method is where you will most often create frame subclass objects. and start our main loop.That’s it. Once the application’s main event loop processing takes over, control passes to wxPython. Unlike procedural programs, a wxPython GUI program primarily responds to the events taking place around it, mostly determined by a human user clicking with a mouse and typing at the keyboard. When all the frames in an application have been closed, the app.MainLoop() method will return and the program will exit.
1 2 3 4 5 6 7 8 9 10 |
class MyApp(wx.App): def OnInit(self): self.frame = MyFrame(parent=None, title="Spin Control") self.frame.Show() return True app = MyApp() app.MainLoop() |
So run the code and this will be the result
Also you can watch the complete video for this article
Subscribe and Get Free Video Courses & Articles in your Email