import wx
ID_MENU_EXIT = 101
ID_MENU_ABOUT = 102
ID_RADIO_FORWARDS = 201
ID_RADIO_STATIONARY = 202
ID_RADIO_BACKWARDS = 203
ID_SPEED_LABEL = 204
ID_SPEED_SLIDER = 301
ID_SPEED_SLIDER_0 = 302
ID_SPEED_SLIDER_10 = 303
ID_SPEED_JUDDER = 304
Speed = 0
Cylinders = 3
Bristles = 2
class Frame1(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title, pos=(150, 150))
### MENU ###
# Create a menubar at the top of the frame
MenuBar = wx.MenuBar()
FileMenu = wx.Menu()
HelpMenu = wx.Menu()
# Add items to the menu
FileMenu.Append(ID_MENU_EXIT, "E&xit\tAlt-F4", "Exit the program")
HelpMenu.Append(ID_MENU_ABOUT, "&About", "About the program")
# Bind the menu event to an event handler
self.Bind(wx.EVT_MENU, self.OnMenuExit, id=ID_MENU_EXIT)
self.Bind(wx.EVT_MENU, self.OnMenuAbout, id=ID_MENU_ABOUT)
# Put the menu on the menubar
MenuBar.Append(FileMenu, "&File")
MenuBar.Append(HelpMenu, "&Help")
self.SetMenuBar(MenuBar)
### STATUS BAR ###
self.CreateStatusBar()
### MAIN PANEL ###
Main_Panel = wx.Panel(self)
Main_Panel.SetBackgroundColour((225,245,255))
### TITLE PANEL ###
Title_Panel = wx.Panel(Main_Panel)
Title_Label = wx.StaticText(Title_Panel, -1, "Sequence Driven Controller")
Title_Label.SetFont(wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.BOLD, True))
Title_Label.SetForegroundColour('#00009F')
Title_Sizer = wx.BoxSizer(wx.HORIZONTAL)
Title_Sizer.Add(Title_Label, 1, wx.EXPAND)
Title_Panel.SetSizer(Title_Sizer)
Title_Panel.Layout()
### CONTROL PANEL setup ###
Control_Panel = wx.Panel(Main_Panel)
Control_Sizer = wx.BoxSizer(wx.HORIZONTAL)
### AUTOMATIC CONTROL setup ###
Automatic_Control_Panel = wx.Panel(Control_Panel)
Automatic_Control_Sizer = wx.BoxSizer(wx.VERTICAL)
### DIRECTION PANEL ###
Direction_Panel = wx.Panel(Automatic_Control_Panel)
RadioButtonForwards = wx.RadioButton(Direction_Panel, ID_RADIO_FORWARDS, "Forwards")
RadioButtonStationary = wx.RadioButton(Direction_Panel, ID_RADIO_STATIONARY, "Stationary")
RadioButtonBackwards = wx.RadioButton(Direction_Panel, ID_RADIO_BACKWARDS, "Backwards")
Speed_Label = wx.StaticText(Direction_Panel, ID_SPEED_LABEL, "Speed = %d" % Speed)
Direction_Sizer = wx.BoxSizer(wx.HORIZONTAL)
Direction_Sizer.Add(RadioButtonForwards, 1, wx.ALIGN_CENTER_VERTICAL)
Direction_Sizer.Add(RadioButtonStationary, 1, wx.ALIGN_CENTER_VERTICAL)
Direction_Sizer.Add(RadioButtonBackwards, 1, wx.ALIGN_CENTER_VERTICAL)
Direction_Sizer.Add(Speed_Label, 1, wx.ALIGN_CENTER_VERTICAL)
Direction_Panel.SetSizer(Direction_Sizer)
Direction_Panel.Layout()
### SPEED SLIDER & JUDDER ###
Speed_Slider_Panel = wx.Panel(Automatic_Control_Panel)
Speed_Slider = wx.Slider(Speed_Slider_Panel, ID_SPEED_SLIDER, 0, 0, 10)
Speed_Slider_0 = wx.StaticText(Speed_Slider_Panel, ID_SPEED_SLIDER_0, " 0")
Speed_Slider_10 = wx.StaticText(Speed_Slider_Panel, ID_SPEED_SLIDER_10, "10")
#self.Bind(wx.EVT_SLIDER, self.OnSlider, id=ID_SPEED_SLIDER)
Speed_Judder = wx.ToggleButton(Speed_Slider_Panel, ID_SPEED_JUDDER, "Judder")
Speed_Slider_Sizer = wx.BoxSizer(wx.HORIZONTAL)
Speed_Slider_Sizer.Add(Speed_Slider_0, 1, wx.ALIGN_CENTER_VERTICAL)
Speed_Slider_Sizer.Add(Speed_Slider, 10, wx.ALIGN_CENTER_VERTICAL)
Speed_Slider_Sizer.Add(Speed_Slider_10, 1, wx.ALIGN_CENTER_VERTICAL)
Speed_Slider_Sizer.Add(Speed_Judder, 2, wx.ALIGN_CENTER_VERTICAL)
Speed_Slider_Panel.SetSizer(Speed_Slider_Sizer)
Speed_Slider_Panel.Layout()
### AUTOMATIC CONTROL layout ###
Automatic_Control_Sizer.Add(Direction_Panel, 1, wx.ALIGN_CENTER_HORIZONTAL)
Automatic_Control_Sizer.Add(Speed_Slider_Panel, 1, wx.ALIGN_CENTER_HORIZONTAL)
Automatic_Control_Panel.SetSizer(Automatic_Control_Sizer)
Automatic_Control_Panel.Layout()
### MANUAL CONTROL ###
Manual_Control_Panel = wx.Panel(Control_Panel)
Bristles_Panel = wx.Panel(Manual_Control_Panel)
Cylinders_Panel = wx.Panel(Manual_Control_Panel)
Manual_Control_Sizer = wx.BoxSizer(wx.HORIZONTAL)
Bristles_Sizer = wx.BoxSizer(wx.VERTICAL)
Cylinders_Sizer = wx.BoxSizer(wx.VERTICAL)
Bristles = []
Cylinders = []
for x in Bristles:
Bristles_x = wx.CheckBox(Manual_Control_Panel, 400+x, "Bristle %d" %d)
Bristles_Sizer.Add(Bristles_x, 1, wx.ALIGN_RIGHT)
for x in Cylinders:
Cylinders_x = wx.CheckBox(Manual_Control_Panel, 500+x, "Cylinnder %d" %d)
Cylinders_Sizer.Add(Cylinders_x, 1, wx.ALIGN_RIGHT)
Bristles_Panel.SetSizer(Bristles_Sizer)
Bristles_Panel.Layout()
Cylinders_Panel.SetSizer(Cylinders_Sizer)
Cylinders_Panel.Layout()
Manual_Control_Sizer.Add(Bristles_Panel, 1, wx.ALIGN_CENTER_VERTICAL)
Manual_Control_Sizer.Add(Cylinders_Panel, 1, wx.ALIGN_CENTER_VERTICAL)
Manual_Control_Panel.SetSizer(Manual_Control_Sizer)
Manual_Control_Panel.Layout()
## CONTROL PANEL layout ###
Control_Sizer.Add(Automatic_Control_Panel, 1, wx.EXPAND)
#Control_Sizer.Add(Manual_Control_Panel, 1, wx.EXPAND)
Control_Panel.SetSizer(Control_Sizer)
Control_Panel.Layout()
### MAIN SIZER CONTROL ###
Main_Sizer = wx.BoxSizer(wx.VERTICAL)
Main_Sizer.Add(Title_Panel, 1, wx.ALIGN_CENTER_HORIZONTAL)
Main_Sizer.Add(Control_Panel, 8, wx.ALIGN_CENTER_HORIZONTAL)
Main_Panel.SetSizer(Main_Sizer)
Main_Sizer.Layout()
### MENU EVENTS ###
def OnMenuExit(self, evt):
self.Close()
def OnMenuAbout(self, evt):
dlg = wx.MessageDialog(self, "Sequence Driven Controller\n"
"Mark Walker 2006/07\n"
"Final Year Engineering Project", "Sequence Driven Controller",
wx.OK | wx.ICON_INFORMATION)
dlg.ShowModal()
dlg.Destroy()
### CONTROLLER DRIVEN EVENTS ###
def OnSlider(self, evt):
Speed = Speed_Slider_Panel.Speed_Slider.GetValue()
Direction_Panel.Speed_Label.Refresh()
class wxPyApp(wx.App):
def OnInit(self):
frame = Frame1(None, "Sequence Driven Controller")
self.SetTopWindow(frame)
frame.Show(True)
return True
app = wxPyApp(redirect=True)
app.MainLoop()