def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.defaultBaud = '115200' self.bauds = ['19200', '38400', '57600', self.defaultBaud] self.labels = { 'XONXOFF': "XON/XOFF Flow Control", 'BAUD': "Baud Rate:", 'USB_SERIAL': "USB Serial" } sz = wx.GridBagSizer() sz.AddSpacer((20, 40), pos=(0, 0)) k = 'USB_SERIAL' cb = self.addCheckBox(k, self.onUSBCheckBox) sz.Add(cb, pos=(1, 1)) ch = self.addChoice('BAUD', self.bauds, self.bauds.index(self.defaultBaud), 80, self.onChoice) sz.Add(ch, pos=(1, 3)) cb = self.addCheckBox('XONXOFF', self.onCheckBox) sz.Add(cb, pos=(3, 3)) sz.AddSpacer((100, 10), pos=(2, 2)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.labels = {'F_CPU': "CPU Clock Rate:", 'CPU': "Processor Type:"} self.clocks = [] self.processors = [] sz = wx.GridBagSizer() sz.AddSpacer((20, 40), pos=(0, 0)) k = 'F_CPU' ch = self.addChoice(k, self.clocks, 0, 100, self.onChoice, size=(140, -1)) sz.Add(ch, pos=(1, 1)) sz.AddSpacer((100, 10), pos=(1, 2)) k = 'CPU' ch = self.addChoice(k, self.processors, 0, 100, self.onChoice, size=(140, -1)) sz.Add(ch, pos=(1, 3)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.defaultBaud = '115200' self.bauds = ['19200', '38400', '57600', self.defaultBaud] self.labels = {'XONXOFF': "XON/XOFF Flow Control", 'BAUD': "Baud Rate:", 'USB_SERIAL': "USB Serial"} sz = wx.GridBagSizer() sz.AddSpacer((20, 40), pos = (0, 0)) k = 'USB_SERIAL' cb = self.addCheckBox(k, self.onUSBCheckBox) sz.Add(cb, pos = (1, 1)) ch = self.addChoice('BAUD', self.bauds, self.bauds.index(self.defaultBaud), 80, self.onChoice) sz.Add(ch, pos = (1, 3)) cb = self.addCheckBox('XONXOFF', self.onCheckBox) sz.Add(cb, pos = (3, 3)) sz.AddSpacer((100, 10), pos = (2, 2)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.labels = {'DISPLAY_BUS': "Display Bus:", 'DISPLAY_TYPE': "Display Type:", 'DISPLAY_BUS_4BIT': "Direct with 4 pins", 'DISPLAY_BUS_8BIT': "Direct with 8 pins", 'DISPLAY_BUS_I2C': "I²C ( = TWI)", 'DISPLAY_BUS_SPI': "SPI", 'DISPLAY_TYPE_SSD1306': "SSD1306 O-LED, 128x32", 'DISPLAY_TYPE_LCD1302': "LCD 1302"} sz = wx.GridBagSizer() sz.AddSpacer((20, 40), pos = (0, 0)) ch = self.addBoolChoice('DISPLAY_BUS', True, 100, self.onBusChoice, size = (160, -1)) sz.Add(ch, pos = (1, 1)) sz.AddSpacer((100, 10), pos = (1, 2)) ch = self.addBoolChoice('DISPLAY_TYPE', False, 100, self.onChoice, size = (200, -1)) sz.Add(ch, pos = (1, 3)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.defaultBaud = "115200" self.bauds = ["19200", "38400", "57600", "115200", "230400", "250000"] self.labels = { "XONXOFF": "XON/XOFF Flow Control", "BAUD": "Baud Rate:", "USB_SERIAL": "USB Serial", } sz = wx.GridBagSizer() sz.Add((20, 40), pos=(0, 0)) k = "USB_SERIAL" cb = self.addCheckBox(k, self.onUSBCheckBox) sz.Add(cb, pos=(1, 1)) ch = self.addChoice("BAUD", self.bauds, self.bauds.index(self.defaultBaud), 80, self.onChoice) sz.Add(ch, pos=(1, 3)) cb = self.addCheckBox("XONXOFF", self.onCheckBox) sz.Add(cb, pos=(3, 3)) sz.Add((100, 10), pos=(2, 2)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, heatersPage, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.heatersPage = heatersPage self.font = font self.id = idPg self.sensorTypeKeys = {'TT_MAX6675': 'TEMP_MAX6675', 'TT_THERMISTOR': 'TEMP_THERMISTOR', 'TT_AD595': 'TEMP_AD595', 'TT_PT100': 'TEMP_PT100', 'TT_INTERCOM': 'TEMP_INTERCOM'} self.labels = {'TEMP_MAX6675': "MAX6675", 'TEMP_THERMISTOR': "Thermistor", 'TEMP_AD595': "AD595", 'TEMP_PT100': "PT100", 'TEMP_INTERCOM': "Intercom"} self.validPins = pinNames sz = wx.GridBagSizer() sz.AddSpacer((10, 10), pos = (0, 0)) self.sensors = [] self.lb = SensorList(self, font) sz.Add(self.lb, pos = (1, 1)) sz.AddSpacer((20, 20), pos = (1, 2)) bsz = wx.BoxSizer(wx.VERTICAL) self.bAdd = wx.Button(self, wx.ID_ANY, "Add", size = BSIZESMALL) self.bAdd.SetBackgroundColour(self.deco.getBackgroundColour()) self.bAdd.SetFont(font) self.Bind(wx.EVT_BUTTON, self.doAdd, self.bAdd) self.bAdd.Enable(False) self.bAdd.SetToolTipString("Add a sensor to the configuration.") bsz.Add(self.bAdd) bsz.AddSpacer((10, 10)) self.bModify = wx.Button(self, wx.ID_ANY, "Modify", size = BSIZESMALL) self.bModify.SetBackgroundColour(self.deco.getBackgroundColour()) self.bModify.SetFont(font) self.bModify.Enable(False) self.Bind(wx.EVT_BUTTON, self.doModify, self.bModify) bsz.Add(self.bModify) self.bModify.SetToolTipString("Modify the selected temperature sensor.") bsz.AddSpacer((10, 10)) self.bDelete = wx.Button(self, wx.ID_ANY, "Delete", size = BSIZESMALL) self.bDelete.SetBackgroundColour(self.deco.getBackgroundColour()) self.bDelete.SetFont(font) self.bDelete.Enable(False) self.Bind(wx.EVT_BUTTON, self.doDelete, self.bDelete) bsz.Add(self.bDelete) self.bDelete.SetToolTipString("Remove the selected temperature sensor " "from the configuration.") sz.Add(bsz, pos = (1, 3)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.labels = {'F_CPU': "CPU Clock Rate:", 'CPU': "Processor Type:"} self.clocks = [] self.processors = [] sz = wx.GridBagSizer() sz.AddSpacer((20, 40), pos = (0, 0)) k = 'F_CPU' ch = self.addChoice(k, self.clocks, 0, 100, self.onChoice, size = (140, -1)) sz.Add(ch, pos = (1, 1)) sz.AddSpacer((100, 10), pos = (1, 2)) k = 'CPU' ch = self.addChoice(k, self.processors, 0, 100, self.onChoice, size = (140, -1)) sz.Add(ch, pos = (1, 3)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.font = font self.id = idPg self.labels = {'FORCE_SOFTWARE_PWM': "Force software PWM"} sz = wx.GridBagSizer() sz.AddSpacer((30, 30), pos=(0, 0)) self.heaters = [] self.validPins = pinNames self.lb = HeaterList(self, font) sz.Add(self.lb, pos=(1, 1)) sz.AddSpacer((20, 20), pos=(1, 2)) k = 'FORCE_SOFTWARE_PWM' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(2, 1)) sz.AddSpacer((20, 20), pos=(2, 2)) bsz = wx.BoxSizer(wx.VERTICAL) self.bAdd = wx.Button(self, wx.ID_ANY, "Add", size=BSIZESMALL) self.bAdd.SetBackgroundColour(self.deco.getBackgroundColour()) self.bAdd.SetFont(font) self.Bind(wx.EVT_BUTTON, self.doAdd, self.bAdd) self.bAdd.SetToolTipString("Add a heater to the configuration.") bsz.Add(self.bAdd) bsz.AddSpacer((10, 10)) self.bModify = wx.Button(self, wx.ID_ANY, "Modify", size=BSIZESMALL) self.bModify.SetBackgroundColour(self.deco.getBackgroundColour()) self.bModify.SetFont(font) self.bModify.Enable(False) self.Bind(wx.EVT_BUTTON, self.doModify, self.bModify) self.bModify.SetToolTipString("Modify the selected heater.") bsz.Add(self.bModify) bsz.AddSpacer((10, 10)) self.bDelete = wx.Button(self, wx.ID_ANY, "Delete", size=BSIZESMALL) self.bDelete.SetBackgroundColour(self.deco.getBackgroundColour()) self.bDelete.SetFont(font) self.bDelete.Enable(False) self.Bind(wx.EVT_BUTTON, self.doDelete, self.bDelete) self.bDelete.SetToolTipString("Remove the selected heater from the " "configuration.") bsz.Add(self.bDelete) sz.Add(bsz, pos=(1, 3)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.font = font self.id = idPg self.labels = {'FORCE_SOFTWARE_PWM':"Force software PWM"} sz = wx.GridBagSizer() sz.AddSpacer((30, 30), pos = (0, 0)) self.heaters = [] self.validPins = pinNames self.lb = HeaterList(self, font) sz.Add(self.lb, pos = (1, 1)) sz.AddSpacer((20, 20), pos = (1, 2)) k = 'FORCE_SOFTWARE_PWM' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos = (2, 1)) sz.AddSpacer((20, 20), pos = (2, 2)) bsz = wx.BoxSizer(wx.VERTICAL) self.bAdd = wx.Button(self, wx.ID_ANY, "Add", size = BSIZESMALL) self.bAdd.SetBackgroundColour(self.deco.getBackgroundColour()) self.bAdd.SetFont(font) self.Bind(wx.EVT_BUTTON, self.doAdd, self.bAdd) self.bAdd.SetToolTipString("Add a heater to the configuration.") bsz.Add(self.bAdd) bsz.AddSpacer((10, 10)) self.bModify = wx.Button(self, wx.ID_ANY, "Modify", size = BSIZESMALL) self.bModify.SetBackgroundColour(self.deco.getBackgroundColour()) self.bModify.SetFont(font) self.bModify.Enable(False) self.Bind(wx.EVT_BUTTON, self.doModify, self.bModify) self.bModify.SetToolTipString("Modify the selected heater.") bsz.Add(self.bModify) bsz.AddSpacer((10, 10)) self.bDelete = wx.Button(self, wx.ID_ANY, "Delete", size = BSIZESMALL) self.bDelete.SetBackgroundColour(self.deco.getBackgroundColour()) self.bDelete.SetFont(font) self.bDelete.Enable(False) self.Bind(wx.EVT_BUTTON, self.doDelete, self.bDelete) self.bDelete.SetToolTipString("Remove the selected heater from the " "configuration.") bsz.Add(self.bDelete) sz.Add(bsz, pos = (1, 3)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.labels = { "DISPLAY_BUS": "Display Bus:", "DISPLAY_TYPE": "Display Type:", "DISPLAY_BUS_4BIT": "Direct with 4 pins", "DISPLAY_BUS_8BIT": "Direct with 8 pins", "DISPLAY_BUS_I2C": "I²C ( = TWI)", "DISPLAY_BUS_SPI": "SPI", "DISPLAY_TYPE_SSD1306": "SSD1306 O-LED, 128x32 pixels", "DISPLAY_TYPE_HD44780": "HD44780 or 1602A, 16x2 characters", "DISPLAY_RS_PIN": "RS pin", "DISPLAY_RW_PIN": "R/W pin", "DISPLAY_E_PIN": "E pin", "DISPLAY_D4_PIN": "D4 pin", "DISPLAY_D5_PIN": "D5 pin", "DISPLAY_D6_PIN": "D6 pin", "DISPLAY_D7_PIN": "D7 pin", } sz = wx.GridBagSizer() sz.Add((20, 40), pos=(0, 0)) ch = self.addBoolChoice( "DISPLAY_BUS", True, 100, self.onBusChoice, size=(160, -1) ) sz.Add(ch, pos=(1, 1)) sz.Add((100, 10), pos=(1, 2)) ch = self.addBoolChoice( "DISPLAY_TYPE", False, 100, self.onChoice, size=(240, -1) ) sz.Add(ch, pos=(1, 3)) b = wx.StaticBox(self, wx.ID_ANY, "Direct 4-bit Bus Pins:") b.SetFont(font) self.pinbox = wx.StaticBoxSizer(b, wx.VERTICAL) self.pinbox.Add((5, 5)) for k in ( "DISPLAY_RS_PIN", "DISPLAY_RW_PIN", "DISPLAY_E_PIN", "DISPLAY_D4_PIN", "DISPLAY_D5_PIN", "DISPLAY_D6_PIN", "DISPLAY_D7_PIN", ): tc = self.addPinChoice(k, 200) self.pinbox.Add(tc) self.pinbox.Add((5, 5)) sz.Add(self.pinbox, pos=(3, 1)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.labels = {'DISPLAY_BUS': "Display Bus:", 'DISPLAY_TYPE': "Display Type:", 'DISPLAY_BUS_4BIT': "Direct with 4 pins", 'DISPLAY_BUS_8BIT': "Direct with 8 pins", 'DISPLAY_BUS_I2C': "I²C ( = TWI)", 'DISPLAY_BUS_SPI': "SPI", 'DISPLAY_TYPE_SSD1306': "SSD1306 O-LED, 128x32 pixels", 'DISPLAY_TYPE_HD44780': "HD44780 or 1602A, 16x2 characters", 'DISPLAY_RS_PIN': "RS pin", 'DISPLAY_RW_PIN': "R/W pin", 'DISPLAY_E_PIN': "E pin", 'DISPLAY_D4_PIN': "D4 pin", 'DISPLAY_D5_PIN': "D5 pin", 'DISPLAY_D6_PIN': "D6 pin", 'DISPLAY_D7_PIN': "D7 pin"} sz = wx.GridBagSizer() sz.AddSpacer((20, 40), pos = (0, 0)) ch = self.addBoolChoice('DISPLAY_BUS', True, 100, self.onBusChoice, size = (160, -1)) sz.Add(ch, pos = (1, 1)) sz.AddSpacer((100, 10), pos = (1, 2)) ch = self.addBoolChoice('DISPLAY_TYPE', False, 100, self.onChoice, size = (240, -1)) sz.Add(ch, pos = (1, 3)) b = wx.StaticBox(self, wx.ID_ANY, "Direct 4-bit Bus Pins:") b.SetFont(font) self.pinbox = wx.StaticBoxSizer(b, wx.VERTICAL) self.pinbox.AddSpacer((5, 5)) for k in ('DISPLAY_RS_PIN', 'DISPLAY_RW_PIN', 'DISPLAY_E_PIN', 'DISPLAY_D4_PIN', 'DISPLAY_D5_PIN', 'DISPLAY_D6_PIN', 'DISPLAY_D7_PIN'): tc = self.addPinChoice(k, 200) self.pinbox.Add(tc) self.pinbox.AddSpacer((5, 5)) sz.Add(self.pinbox, pos = (3, 1)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.labels = { 'DISPLAY_BUS': "Display Bus:", 'DISPLAY_TYPE': "Display Type:", 'DISPLAY_BUS_4BIT': "Direct with 4 pins", 'DISPLAY_BUS_8BIT': "Direct with 8 pins", 'DISPLAY_BUS_I2C': "I²C ( = TWI)", 'DISPLAY_BUS_SPI': "SPI", 'DISPLAY_TYPE_SSD1306': "SSD1306 O-LED, 128x32", 'DISPLAY_TYPE_LCD1302': "LCD 1302" } sz = wx.GridBagSizer() sz.AddSpacer((20, 40), pos=(0, 0)) ch = self.addBoolChoice('DISPLAY_BUS', True, 100, self.onBusChoice, size=(160, -1)) sz.Add(ch, pos=(1, 1)) sz.AddSpacer((100, 10), pos=(1, 2)) ch = self.addBoolChoice('DISPLAY_TYPE', False, 100, self.onChoice, size=(200, -1)) sz.Add(ch, pos=(1, 3)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg pinXkeys = [('X_STEP_PIN', 2), ('X_DIR_PIN', 2), ('X_MIN_PIN', 2), ('X_MAX_PIN', 2), ('X_ENABLE_PIN', 2), ('X_INVERT_DIR', 1), ('X_INVERT_MIN', 1), ('X_INVERT_MAX', 1), ('X_INVERT_ENABLE', 1)] pinYkeys = [('Y_STEP_PIN', 2), ('Y_DIR_PIN', 2), ('Y_MIN_PIN', 2), ('Y_MAX_PIN', 2), ('Y_ENABLE_PIN', 2), ('Y_INVERT_DIR', 1), ('Y_INVERT_MIN', 1), ('Y_INVERT_MAX', 1), ('Y_INVERT_ENABLE', 1)] pinZkeys = [('Z_STEP_PIN', 2), ('Z_DIR_PIN', 2), ('Z_MIN_PIN', 2), ('Z_MAX_PIN', 2), ('Z_ENABLE_PIN', 2), ('Z_INVERT_DIR', 1), ('Z_INVERT_MIN', 1), ('Z_INVERT_MAX', 1), ('Z_INVERT_ENABLE', 1)] pinEkeys = [('E_STEP_PIN', 2), ('E_DIR_PIN', 2), ('E_ENABLE_PIN', 2), ('E_INVERT_DIR', 1), ('E_INVERT_ENABLE', 1)] self.labels = { 'X_STEP_PIN': "Step Pin:", 'X_DIR_PIN': "Direction Pin:", 'X_MIN_PIN': "Minimum Pin:", 'X_MAX_PIN': "Maximum Pin:", 'X_ENABLE_PIN': "Enable Pin:", 'X_INVERT_DIR': "Invert Direction", 'X_INVERT_MIN': "Invert Minimum", 'X_INVERT_MAX': "Invert Maximum", 'X_INVERT_ENABLE': "Invert Enable", 'Y_STEP_PIN': "Step Pin:", 'Y_DIR_PIN': "Direction Pin:", 'Y_MIN_PIN': "Minimum Pin:", 'Y_MAX_PIN': "Maximum Pin:", 'Y_ENABLE_PIN': "Enable Pin:", 'Y_INVERT_DIR': "Invert Direction", 'Y_INVERT_MIN': "Invert Minimum", 'Y_INVERT_MAX': "Invert Maximum", 'Y_INVERT_ENABLE': "Invert Enable", 'Z_STEP_PIN': "Step Pin:", 'Z_DIR_PIN': "Direction Pin:", 'Z_MIN_PIN': "Minimum Pin:", 'Z_MAX_PIN': "Maximum Pin:", 'Z_ENABLE_PIN': "Enable Pin:", 'Z_INVERT_DIR': "Invert Direction", 'Z_INVERT_MIN': "Invert Minimum", 'Z_INVERT_MAX': "Invert Maximum", 'Z_INVERT_ENABLE': "Invert Enable", 'E_STEP_PIN': "Step Pin:", 'E_DIR_PIN': "Direction Pin:", 'E_ENABLE_PIN': "Enable Pin:", 'E_INVERT_DIR': "Invert Direction", 'E_INVERT_ENABLE': "Invert Enable", 'PS_ON_PIN': "PSU On Pin:", 'PS_MOSFET_PIN': "PSU MOSFET Pin:", 'STEPPER_ENABLE_PIN': "Stepper Enable Pin:", 'STEPPER_INVERT_ENABLE': "Stepper Invert Enable", 'DEBUG_LED_PIN': "Debug LED Pin:" } labelWidth = 120 sz = wx.GridBagSizer() sz.AddSpacer((10, 10), pos=(0, 0)) b = wx.StaticBox(self, wx.ID_ANY, "X Axis") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k, ctype in pinXkeys: if ctype == 0: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin) sbox.Add(tc) elif ctype == 2: tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sbox.Add(tc) else: cb = self.addCheckBox(k, self.onCheckBox) sbox.Add(cb, 1, wx.LEFT, 30) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 1)) b = wx.StaticBox(self, wx.ID_ANY, "Y Axis") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k, ctype in pinYkeys: if ctype == 0: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin) sbox.Add(tc) elif ctype == 2: tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sbox.Add(tc) else: cb = self.addCheckBox(k, self.onCheckBox) sbox.Add(cb, 1, wx.LEFT, 30) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 3)) b = wx.StaticBox(self, wx.ID_ANY, "Z Axis") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k, ctype in pinZkeys: if ctype == 0: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin) sbox.Add(tc) elif ctype == 2: tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sbox.Add(tc) else: cb = self.addCheckBox(k, self.onCheckBox) sbox.Add(cb, 1, wx.LEFT, 30) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 5)) b = wx.StaticBox(self, wx.ID_ANY, "E Axis") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k, ctype in pinEkeys: if ctype == 0: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin) sbox.Add(tc) elif ctype == 2: tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sbox.Add(tc) else: cb = self.addCheckBox(k, self.onCheckBox) sbox.Add(cb, 1, wx.LEFT, 30) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 7)) k = "STEPPER_ENABLE_PIN" tc = self.addPinChoice(k, "", pinNames, True, labelWidth + 20) sz.Add(tc, pos=(3, 1)) sz.AddSpacer((10, 10), pos=(4, 1)) k = "STEPPER_INVERT_ENABLE" cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(5, 1), flag=wx.ALIGN_CENTER_HORIZONTAL) k = "PS_ON_PIN" tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sz.Add(tc, pos=(3, 3)) k = "PS_MOSFET_PIN" tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sz.Add(tc, pos=(5, 3)) k = "DEBUG_LED_PIN" tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sz.Add(tc, pos=(3, 7)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.font = font self.labels = { 'USE_INTERNAL_PULLUPS': "Use Internal Pullups", 'Z_AUTODISABLE': "Z Autodisable", 'EECONFIG': "Enable EEPROM Storage", 'BANG_BANG': "Enable", 'BANG_BANG_ON': "On PWM Level:", 'BANG_BANG_OFF': "Off PWM Level:", 'REPORT_TARGET_TEMPS': "Report Target Temperatures", 'MOVEBUFFER_SIZE': "Movebuffer Size:", 'DC_EXTRUDER': "Heater:", 'DC_EXTRUDER_PWM': "PWM:", 'USE_WATCHDOG': "Use the Watchdog Timer", 'TH_COUNT': "Temperature History Size:", 'FAST_PWM': "Fast PWM", 'ENDSTOP_STEPS': "Endstop Steps:", 'PID_SCALE': "PID Scaling Factor:", 'TEMP_HYSTERESIS': "Temperature Hysteresis:", 'TEMP_RESIDENCY_TIME': "Temperature Residency Time:", 'TEMP_EWMA': "Temperature EWMA:", 'HEATER_SANITY_CHECK': "Heater Sanity Check" } self.heaterNameNone = "<none>" self.heaterNames = [self.heaterNameNone] self.boardHeaters = [] self.processors = [] sz = wx.GridBagSizer() sz.AddSpacer((20, 40), pos=(0, 0)) sz.AddSpacer((40, 40), pos=(0, 2)) sz.AddSpacer((40, 40), pos=(0, 4)) sz.AddSpacer((20, 30), pos=(1, 0)) sz.AddSpacer((20, 30), pos=(2, 0)) sz.AddSpacer((20, 30), pos=(3, 0)) sz.AddSpacer((20, 30), pos=(4, 0)) sz.AddSpacer((20, 30), pos=(5, 0)) sz.AddSpacer((20, 30), pos=(6, 0)) sz.AddSpacer((20, 30), pos=(7, 0)) sz.AddSpacer((20, 30), pos=(8, 0)) labelWidth = 140 k = 'EECONFIG' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(1, 1)) k = 'USE_INTERNAL_PULLUPS' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(2, 1)) k = 'USE_WATCHDOG' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(3, 1)) k = 'FAST_PWM' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(4, 1)) k = 'HEATER_SANITY_CHECK' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(5, 1)) k = 'REPORT_TARGET_TEMPS' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(6, 1)) k = 'Z_AUTODISABLE' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(7, 1)) b = wx.StaticBox(self, wx.ID_ANY, "BANG BANG Bed Control") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) k = 'BANG_BANG' cb = self.addCheckBox(k, self.onCheckBox) sbox.Add(cb, 1, wx.LEFT, 60) sbox.AddSpacer((5, 20)) k = 'BANG_BANG_ON' tc = self.addTextCtrl(k, 100, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) k = 'BANG_BANG_OFF' tc = self.addTextCtrl(k, 100, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 3), span=(5, 1), flag=wx.ALIGN_CENTER_HORIZONTAL) b = wx.StaticBox(self, wx.ID_ANY, "DC Motor Extruder") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) k = 'DC_EXTRUDER' ch = self.addChoice(k, self.heaterNames, 0, 60, self.onChoice) sbox.Add(ch) sbox.AddSpacer((5, 5)) k = 'DC_EXTRUDER_PWM' tc = self.addTextCtrl(k, 60, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(6, 3), span=(3, 1), flag=wx.ALIGN_CENTER_HORIZONTAL) labelWidth = 190 k = 'MOVEBUFFER_SIZE' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(1, 5)) k = 'TH_COUNT' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(2, 5)) k = 'ENDSTOP_STEPS' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(3, 5)) k = 'PID_SCALE' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(4, 5)) k = 'TEMP_HYSTERESIS' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(6, 5)) k = 'TEMP_RESIDENCY_TIME' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos=(7, 5)) k = 'TEMP_EWMA' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlEWMA) sz.Add(tc, pos=(8, 5)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, heatersPage, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.heatersPage = heatersPage self.font = font self.id = idPg self.sensorTypeKeys = { 'TT_MAX6675': 'TEMP_MAX6675', 'TT_THERMISTOR': 'TEMP_THERMISTOR', 'TT_AD595': 'TEMP_AD595', 'TT_PT100': 'TEMP_PT100', 'TT_INTERCOM': 'TEMP_INTERCOM' } self.labels = { 'TEMP_MAX6675': "MAX6675", 'TEMP_THERMISTOR': "Thermistor", 'TEMP_AD595': "AD595", 'TEMP_PT100': "PT100", 'TEMP_INTERCOM': "Intercom" } self.validPins = pinNames sz = wx.GridBagSizer() sz.AddSpacer((10, 10), pos=(0, 0)) self.sensors = [] self.lb = SensorList(self, font) sz.Add(self.lb, pos=(1, 1)) sz.AddSpacer((20, 20), pos=(1, 2)) bsz = wx.BoxSizer(wx.VERTICAL) self.bAdd = wx.Button(self, wx.ID_ANY, "Add", size=BSIZESMALL) self.bAdd.SetBackgroundColour(self.deco.getBackgroundColour()) self.bAdd.SetFont(font) self.Bind(wx.EVT_BUTTON, self.doAdd, self.bAdd) self.bAdd.Enable(False) self.bAdd.SetToolTipString("Add a sensor to the configuration.") bsz.Add(self.bAdd) bsz.AddSpacer((10, 10)) self.bModify = wx.Button(self, wx.ID_ANY, "Modify", size=BSIZESMALL) self.bModify.SetBackgroundColour(self.deco.getBackgroundColour()) self.bModify.SetFont(font) self.bModify.Enable(False) self.Bind(wx.EVT_BUTTON, self.doModify, self.bModify) bsz.Add(self.bModify) self.bModify.SetToolTipString( "Modify the selected temperature sensor.") bsz.AddSpacer((10, 10)) self.bDelete = wx.Button(self, wx.ID_ANY, "Delete", size=BSIZESMALL) self.bDelete.SetBackgroundColour(self.deco.getBackgroundColour()) self.bDelete.SetFont(font) self.bDelete.Enable(False) self.Bind(wx.EVT_BUTTON, self.doDelete, self.bDelete) bsz.Add(self.bDelete) self.bDelete.SetToolTipString("Remove the selected temperature sensor " "from the configuration.") sz.Add(bsz, pos=(1, 3)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg pinXkeys = [ ("X_STEP_PIN", 2), ("X_DIR_PIN", 2), ("X_MIN_PIN", 2), ("X_MAX_PIN", 2), ("X_ENABLE_PIN", 2), ("X_INVERT_DIR", 1), ("X_INVERT_MIN", 1), ("X_INVERT_MAX", 1), ("X_INVERT_ENABLE", 1), ] pinYkeys = [ ("Y_STEP_PIN", 2), ("Y_DIR_PIN", 2), ("Y_MIN_PIN", 2), ("Y_MAX_PIN", 2), ("Y_ENABLE_PIN", 2), ("Y_INVERT_DIR", 1), ("Y_INVERT_MIN", 1), ("Y_INVERT_MAX", 1), ("Y_INVERT_ENABLE", 1), ] pinZkeys = [ ("Z_STEP_PIN", 2), ("Z_DIR_PIN", 2), ("Z_MIN_PIN", 2), ("Z_MAX_PIN", 2), ("Z_ENABLE_PIN", 2), ("Z_INVERT_DIR", 1), ("Z_INVERT_MIN", 1), ("Z_INVERT_MAX", 1), ("Z_INVERT_ENABLE", 1), ] pinEkeys = [ ("E_STEP_PIN", 2), ("E_DIR_PIN", 2), ("E_ENABLE_PIN", 2), ("E_INVERT_DIR", 1), ("E_INVERT_ENABLE", 1), ] self.labels = { "X_STEP_PIN": "Step Pin:", "X_DIR_PIN": "Direction Pin:", "X_MIN_PIN": "Minimum Pin:", "X_MAX_PIN": "Maximum Pin:", "X_ENABLE_PIN": "Enable Pin:", "X_INVERT_DIR": "Invert Direction", "X_INVERT_MIN": "Invert Minimum", "X_INVERT_MAX": "Invert Maximum", "X_INVERT_ENABLE": "Invert Enable", "Y_STEP_PIN": "Step Pin:", "Y_DIR_PIN": "Direction Pin:", "Y_MIN_PIN": "Minimum Pin:", "Y_MAX_PIN": "Maximum Pin:", "Y_ENABLE_PIN": "Enable Pin:", "Y_INVERT_DIR": "Invert Direction", "Y_INVERT_MIN": "Invert Minimum", "Y_INVERT_MAX": "Invert Maximum", "Y_INVERT_ENABLE": "Invert Enable", "Z_STEP_PIN": "Step Pin:", "Z_DIR_PIN": "Direction Pin:", "Z_MIN_PIN": "Minimum Pin:", "Z_MAX_PIN": "Maximum Pin:", "Z_ENABLE_PIN": "Enable Pin:", "Z_INVERT_DIR": "Invert Direction", "Z_INVERT_MIN": "Invert Minimum", "Z_INVERT_MAX": "Invert Maximum", "Z_INVERT_ENABLE": "Invert Enable", "E_STEP_PIN": "Step Pin:", "E_DIR_PIN": "Direction Pin:", "E_ENABLE_PIN": "Enable Pin:", "E_INVERT_DIR": "Invert Direction", "E_INVERT_ENABLE": "Invert Enable", "PS_ON_PIN": "PSU On Pin:", "PS_MOSFET_PIN": "PSU MOSFET Pin:", "STEPPER_ENABLE_PIN": "Stepper Enable Pin:", "STEPPER_INVERT_ENABLE": "Stepper Invert Enable", "DEBUG_LED_PIN": "Debug LED Pin:", } labelWidth = 120 sz = wx.GridBagSizer() sz.AddSpacer((10, 10), pos=(0, 0)) b = wx.StaticBox(self, wx.ID_ANY, "X Axis") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k, ctype in pinXkeys: if ctype == 0: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin) sbox.Add(tc) elif ctype == 2: tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sbox.Add(tc) else: cb = self.addCheckBox(k, self.onCheckBox) sbox.Add(cb, 1, wx.LEFT, 30) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 1)) b = wx.StaticBox(self, wx.ID_ANY, "Y Axis") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k, ctype in pinYkeys: if ctype == 0: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin) sbox.Add(tc) elif ctype == 2: tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sbox.Add(tc) else: cb = self.addCheckBox(k, self.onCheckBox) sbox.Add(cb, 1, wx.LEFT, 30) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 3)) b = wx.StaticBox(self, wx.ID_ANY, "Z Axis") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k, ctype in pinZkeys: if ctype == 0: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin) sbox.Add(tc) elif ctype == 2: tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sbox.Add(tc) else: cb = self.addCheckBox(k, self.onCheckBox) sbox.Add(cb, 1, wx.LEFT, 30) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 5)) b = wx.StaticBox(self, wx.ID_ANY, "E Axis") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k, ctype in pinEkeys: if ctype == 0: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlPin) sbox.Add(tc) elif ctype == 2: tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sbox.Add(tc) else: cb = self.addCheckBox(k, self.onCheckBox) sbox.Add(cb, 1, wx.LEFT, 30) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 7)) k = "STEPPER_ENABLE_PIN" tc = self.addPinChoice(k, "", pinNames, True, labelWidth + 20) sz.Add(tc, pos=(3, 1)) sz.AddSpacer((10, 10), pos=(4, 1)) k = "STEPPER_INVERT_ENABLE" cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos=(5, 1), flag=wx.ALIGN_CENTER_HORIZONTAL) k = "PS_ON_PIN" tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sz.Add(tc, pos=(3, 3)) k = "PS_MOSFET_PIN" tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sz.Add(tc, pos=(5, 3)) k = "DEBUG_LED_PIN" tc = self.addPinChoice(k, "", pinNames, True, labelWidth) sz.Add(tc, pos=(3, 7)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.accTypeKeys = ['ACCELERATION_REPRAP', 'ACCELERATION_RAMPING', 'ACCELERATION_TEMPORAL'] self.jerkKeys = ['MAX_JERK_X', 'MAX_JERK_Y', 'MAX_JERK_Z', 'MAX_JERK_E'] self.labels = {'ACCELERATION_REPRAP': "RepRap", 'ACCELERATION_RAMPING': "Ramping", 'ACCELERATION_TEMPORAL': "Temporal", 'ACCELERATION': "Acceleration:", 'LOOKAHEAD': "Look Ahead", 'MAX_JERK_X': "X:", 'MAX_JERK_Y': "Y:", 'MAX_JERK_Z': "Z:", 'MAX_JERK_E': "E:"} sz = wx.GridBagSizer() sz.AddSpacer((20, 40), pos = (0, 0)) b = wx.StaticBox(self, wx.ID_ANY, "Acceleration Type") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) style = wx.RB_GROUP for k in self.accTypeKeys: rb = self.addRadioButton(k, style, self.onAccTypeSelect, b) style = 0 sbox.Add(rb, 1, wx.LEFT + wx.RIGHT, 16) sbox.AddSpacer((5, 5)) self.rbNone = wx.RadioButton(self, wx.ID_ANY, "None", style = style) self.rbNone.SetFont(font) self.rbNone.SetValue(True) self.Bind(wx.EVT_RADIOBUTTON, self.onAccTypeSelect, self.rbNone) sbox.Add(self.rbNone, 1, wx.LEFT + wx.RIGHT, 16) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos = (1, 1)) b = wx.StaticBox(self, wx.ID_ANY, "Ramping Parameters") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) k = 'ACCELERATION' tc = self.addTextCtrl(k, 80, self.onTextCtrlFloat) self.textControls[k].Enable(False) sbox.Add(tc) sbox.AddSpacer((5, 5)) k = 'LOOKAHEAD' cb = self.addCheckBox(k, self.onCheckBox) self.checkBoxes[k].Enable(False) sbox.Add(cb, 1, wx.ALIGN_CENTER_HORIZONTAL) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos = (1, 3)) b = wx.StaticBox(self, wx.ID_ANY, "Maximum Jerk") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k in self.jerkKeys: tc = self.addTextCtrl(k, 40, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.AddSpacer((80, 20), pos = (1, 4)) sz.Add(sbox, pos = (1, 5)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.accTypeKeys = [ 'ACCELERATION_REPRAP', 'ACCELERATION_RAMPING', 'ACCELERATION_TEMPORAL' ] self.jerkKeys = [ 'MAX_JERK_X', 'MAX_JERK_Y', 'MAX_JERK_Z', 'MAX_JERK_E' ] self.labels = { 'ACCELERATION_REPRAP': "RepRap", 'ACCELERATION_RAMPING': "Ramping", 'ACCELERATION_TEMPORAL': "Temporal", 'ACCELERATION': "Acceleration:", 'LOOKAHEAD': "Look Ahead", 'MAX_JERK_X': "X:", 'MAX_JERK_Y': "Y:", 'MAX_JERK_Z': "Z:", 'MAX_JERK_E': "E:" } sz = wx.GridBagSizer() sz.AddSpacer((20, 40), pos=(0, 0)) b = wx.StaticBox(self, wx.ID_ANY, "Acceleration Type") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) style = wx.RB_GROUP for k in self.accTypeKeys: rb = self.addRadioButton(k, style, self.onAccTypeSelect, b) style = 0 sbox.Add(rb, 1, wx.LEFT + wx.RIGHT, 16) sbox.AddSpacer((5, 5)) self.rbNone = wx.RadioButton(self, wx.ID_ANY, "None", style=style) self.rbNone.SetFont(font) self.rbNone.SetValue(True) self.Bind(wx.EVT_RADIOBUTTON, self.onAccTypeSelect, self.rbNone) sbox.Add(self.rbNone, 1, wx.LEFT + wx.RIGHT, 16) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 1)) b = wx.StaticBox(self, wx.ID_ANY, "Ramping Parameters") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) k = 'ACCELERATION' tc = self.addTextCtrl(k, 80, self.onTextCtrlFloat) self.textControls[k].Enable(False) sbox.Add(tc) sbox.AddSpacer((5, 5)) k = 'LOOKAHEAD' cb = self.addCheckBox(k, self.onCheckBox) self.checkBoxes[k].Enable(False) sbox.Add(cb, 1, wx.ALIGN_CENTER_HORIZONTAL) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 3)) b = wx.StaticBox(self, wx.ID_ANY, "Maximum Jerk") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k in self.jerkKeys: tc = self.addTextCtrl(k, 40, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.AddSpacer((80, 20), pos=(1, 4)) sz.Add(sbox, pos=(1, 5)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.parent = parent self.id = idPg self.font = font self.labels = {'USE_INTERNAL_PULLUPS': "Use Internal Pullups", 'EECONFIG': "Enable EEPROM Storage", 'BANG_BANG': "Enable", 'BANG_BANG_ON': "On PWM Level:", 'BANG_BANG_OFF': "Off PWM Level:", 'REPORT_TARGET_TEMPS': "Report Target Temperatures", 'MOVEBUFFER_SIZE': "Movebuffer Size:", 'DC_EXTRUDER': "Heater:", 'DC_EXTRUDER_PWM': "PWM:", 'USE_WATCHDOG': "Use the Watchdog Timer", 'TH_COUNT': "Temperature History Size:", 'FAST_PWM': "Fast PWM", 'ENDSTOP_STEPS': "Endstop Steps:", 'PID_SCALE': "PID Scaling Factor:", 'TEMP_HYSTERESIS': "Temperature Hysteresis:", 'TEMP_RESIDENCY_TIME': "Temperature Residency Time:", 'TEMP_EWMA': "Temperature EWMA:", 'HEATER_SANITY_CHECK': "Heater Sanity Check"} self.heaterNameNone = "<none>" self.heaterNames = [self.heaterNameNone] self.boardHeaters = [] self.processors = [] sz = wx.GridBagSizer() sz.AddSpacer((20, 40), pos = (0, 0)) sz.AddSpacer((40, 40), pos = (0, 2)) sz.AddSpacer((40, 40), pos = (0, 4)) sz.AddSpacer((20, 30), pos = (1, 0)) sz.AddSpacer((20, 30), pos = (2, 0)) sz.AddSpacer((20, 30), pos = (3, 0)) sz.AddSpacer((20, 30), pos = (4, 0)) sz.AddSpacer((20, 30), pos = (5, 0)) sz.AddSpacer((20, 30), pos = (6, 0)) sz.AddSpacer((20, 30), pos = (7, 0)) sz.AddSpacer((20, 30), pos = (8, 0)) labelWidth = 140 k = 'EECONFIG' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos = (1, 1)) k = 'USE_INTERNAL_PULLUPS' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos = (2, 1)) k = 'USE_WATCHDOG' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos = (3, 1)) k = 'FAST_PWM' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos = (4, 1)) k = 'HEATER_SANITY_CHECK' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos = (5, 1)) k = 'REPORT_TARGET_TEMPS' cb = self.addCheckBox(k, self.onCheckBox) sz.Add(cb, pos = (6, 1)) b = wx.StaticBox(self, wx.ID_ANY, "BANG BANG Bed Control") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) k = 'BANG_BANG' cb = self.addCheckBox(k, self.onCheckBox) sbox.Add(cb, 1, wx.LEFT, 60) sbox.AddSpacer((5, 20)) k = 'BANG_BANG_ON' tc = self.addTextCtrl(k, 100, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) k = 'BANG_BANG_OFF' tc = self.addTextCtrl(k, 100, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos = (1, 3), span = (5, 1), flag = wx.ALIGN_CENTER_HORIZONTAL) b = wx.StaticBox(self, wx.ID_ANY, "DC Motor Extruder") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) k = 'DC_EXTRUDER' ch = self.addChoice(k, self.heaterNames, 0, 60, self.onChoice) sbox.Add(ch) sbox.AddSpacer((5, 5)) k = 'DC_EXTRUDER_PWM' tc = self.addTextCtrl(k, 60, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos = (6, 3), span=(3, 1), flag = wx.ALIGN_CENTER_HORIZONTAL) labelWidth = 190; k = 'MOVEBUFFER_SIZE' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos = (1, 5)) k = 'TH_COUNT' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos = (2, 5)) k = 'ENDSTOP_STEPS' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos = (3, 5)) k = 'PID_SCALE' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos = (4, 5)) k = 'TEMP_HYSTERESIS' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos = (6, 5)) k = 'TEMP_RESIDENCY_TIME' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sz.Add(tc, pos = (7, 5)) k = 'TEMP_EWMA' tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlEWMA) sz.Add(tc, pos = (8, 5)) self.SetSizer(sz) self.enableAll(False)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.id = idPg self.parent = parent self.font = font self.spmKeys = [ 'STEPS_PER_M_X', 'STEPS_PER_M_Y', 'STEPS_PER_M_Z', 'STEPS_PER_M_E' ] self.mfrKeys = [ 'MAXIMUM_FEEDRATE_X', 'MAXIMUM_FEEDRATE_Y', 'MAXIMUM_FEEDRATE_Z', 'MAXIMUM_FEEDRATE_E' ] self.msrKeys = [ 'SEARCH_FEEDRATE_X', 'SEARCH_FEEDRATE_Y', 'SEARCH_FEEDRATE_Z' ] self.eclKeys = [ 'ENDSTOP_CLEARANCE_X', 'ENDSTOP_CLEARANCE_Y', 'ENDSTOP_CLEARANCE_Z' ] self.minmaxKeys = [ 'X_MIN', 'X_MAX', 'Y_MIN', 'Y_MAX', 'Z_MIN', 'Z_MAX' ] self.kinematicsKeys = ['KINEMATICS_STRAIGHT', 'KINEMATICS_COREXY'] self.labels = { 'STEPS_PER_M_X': "X:", 'STEPS_PER_M_Y': "Y:", 'STEPS_PER_M_Z': "Z:", 'STEPS_PER_M_E': "E:", 'MAXIMUM_FEEDRATE_X': "X:", 'MAXIMUM_FEEDRATE_Y': "Y:", 'MAXIMUM_FEEDRATE_Z': "Z:", 'MAXIMUM_FEEDRATE_E': "E:", 'SEARCH_FEEDRATE_X': "X:", 'SEARCH_FEEDRATE_Y': "Y:", 'SEARCH_FEEDRATE_Z': "Z:", 'ENDSTOP_CLEARANCE_X': "X:", 'ENDSTOP_CLEARANCE_Y': "Y:", 'ENDSTOP_CLEARANCE_Z': "Z:", 'X_MIN': "Min X:", 'X_MAX': "Max X:", 'Y_MIN': "Min Y:", 'Y_MAX': "Max Y:", 'Z_MIN': "Min Z:", 'Z_MAX': "Max Z:", 'E_ABSOLUTE': "Absolute E Coordinates", 'KINEMATICS_STRAIGHT': "Straight", 'KINEMATICS_COREXY': "CoreXY" } labelWidth = 40 sz = wx.GridBagSizer() sz.AddSpacer((10, 10), pos=(0, 0)) sz.AddSpacer((90, 10), pos=(0, 4)) b = wx.StaticBox(self, wx.ID_ANY, "Steps Per Meter") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k in self.spmKeys: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 1)) b = wx.StaticBox(self, wx.ID_ANY, "Maximum Feedrate") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k in self.mfrKeys: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 5)) b = wx.StaticBox(self, wx.ID_ANY, "Search Feedrate") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k in self.msrKeys: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(1, 7)) b = wx.StaticBox(self, wx.ID_ANY, "Endstop Clearance") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k in self.eclKeys: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(3, 5)) b = wx.StaticBox(self, wx.ID_ANY, "Travel Limits") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k in self.minmaxKeys: tc = self.addTextCtrl(k, labelWidth + 20, self.onTextCtrlFloat) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos=(3, 7)) vsz = wx.BoxSizer(wx.VERTICAL) b = wx.StaticBox(self, wx.ID_ANY, "Kinematics") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) style = wx.RB_GROUP for k in self.kinematicsKeys: rb = self.addRadioButton(k, style, self.onKinematicsSelect, b) style = 0 sbox.Add(rb, 1, wx.LEFT + wx.RIGHT, 16) sbox.AddSpacer((5, 5)) vsz.Add(sbox, 1, wx.LEFT, 40) cb = self.addCheckBox('E_ABSOLUTE', self.onCheckBox) vsz.Add(cb, 1, wx.LEFT, 40) sz.Add(vsz, pos=(3, 1)) bsz = wx.BoxSizer(wx.VERTICAL) b = wx.Button(self, wx.ID_ANY, "Calculate\nBelt Driven", size=BSIZE) b.SetBackgroundColour(self.deco.getBackgroundColour()) b.SetFont(font) b.SetToolTipString( "Open the calculator for axes that are belt-driven.") self.Bind(wx.EVT_BUTTON, self.onCalcBelt, b) self.bCalcBelt = b bsz.Add(b, 1, wx.ALL, 5) b = wx.Button(self, wx.ID_ANY, "Calculate\nScrew Driven", size=BSIZE) b.SetBackgroundColour(self.deco.getBackgroundColour()) b.SetFont(font) bsz.Add(b, 1, wx.ALL, 5) b.SetToolTipString( "Open the calculator for axes that are screw-driven.") self.Bind(wx.EVT_BUTTON, self.onCalcScrew, b) self.bCalcScrew = b sz.Add(bsz, pos=(1, 3)) self.enableAll(False) self.SetSizer(sz)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.id = idPg self.parent = parent self.font = font self.spmKeys = ['STEPS_PER_M_X', 'STEPS_PER_M_Y', 'STEPS_PER_M_Z', 'STEPS_PER_M_E'] self.mfrKeys = ['MAXIMUM_FEEDRATE_X', 'MAXIMUM_FEEDRATE_Y', 'MAXIMUM_FEEDRATE_Z', 'MAXIMUM_FEEDRATE_E'] self.msrKeys = ['SEARCH_FEEDRATE_X', 'SEARCH_FEEDRATE_Y', 'SEARCH_FEEDRATE_Z'] self.eclKeys = ['ENDSTOP_CLEARANCE_X', 'ENDSTOP_CLEARANCE_Y', 'ENDSTOP_CLEARANCE_Z'] self.minmaxKeys = ['X_MIN', 'X_MAX', 'Y_MIN', 'Y_MAX', 'Z_MIN', 'Z_MAX'] self.kinematicsKeys = ['KINEMATICS_STRAIGHT', 'KINEMATICS_COREXY'] self.labels = {'STEPS_PER_M_X': "X:", 'STEPS_PER_M_Y': "Y:", 'STEPS_PER_M_Z': "Z:", 'STEPS_PER_M_E' : "E:", 'MAXIMUM_FEEDRATE_X': "X:", 'MAXIMUM_FEEDRATE_Y': "Y:", 'MAXIMUM_FEEDRATE_Z': "Z:", 'MAXIMUM_FEEDRATE_E': "E:", 'SEARCH_FEEDRATE_X': "X:", 'SEARCH_FEEDRATE_Y': "Y:", 'SEARCH_FEEDRATE_Z': "Z:", 'ENDSTOP_CLEARANCE_X': "X:", 'ENDSTOP_CLEARANCE_Y': "Y:", 'ENDSTOP_CLEARANCE_Z': "Z:", 'X_MIN': "Min X:", 'X_MAX': "Max X:", 'Y_MIN': "Min Y:", 'Y_MAX': "Max Y:", 'Z_MIN': "Min Z:", 'Z_MAX': "Max Z:", 'E_ABSOLUTE': "Absolute E Coordinates", 'KINEMATICS_STRAIGHT': "Straight", 'KINEMATICS_COREXY': "CoreXY"} labelWidth = 40; sz = wx.GridBagSizer() sz.AddSpacer((10, 10), pos = (0, 0)) sz.AddSpacer((90, 10), pos = (0, 4)) b = wx.StaticBox(self, wx.ID_ANY, "Steps Per Meter") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k in self.spmKeys: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos = (1, 1)) b = wx.StaticBox(self, wx.ID_ANY, "Maximum Feedrate") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k in self.mfrKeys: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos = (1, 5)) b = wx.StaticBox(self, wx.ID_ANY, "Search Feedrate") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k in self.msrKeys: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos = (1, 7)) b = wx.StaticBox(self, wx.ID_ANY, "Endstop Clearance") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k in self.eclKeys: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos = (3, 5)) b = wx.StaticBox(self, wx.ID_ANY, "Travel Limits") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) for k in self.minmaxKeys: tc = self.addTextCtrl(k, labelWidth + 20, self.onTextCtrlFloat) sbox.Add(tc) sbox.AddSpacer((5, 5)) sz.Add(sbox, pos = (3, 7)) vsz = wx.BoxSizer(wx.VERTICAL) b = wx.StaticBox(self, wx.ID_ANY, "Kinematics") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.AddSpacer((5, 5)) style = wx.RB_GROUP for k in self.kinematicsKeys: rb = self.addRadioButton(k, style, self.onKinematicsSelect, b) style = 0 sbox.Add(rb, 1, wx.LEFT + wx.RIGHT, 16) sbox.AddSpacer((5, 5)) vsz.Add(sbox, 1, wx.LEFT, 40) cb = self.addCheckBox('E_ABSOLUTE', self.onCheckBox) vsz.Add(cb, 1, wx.LEFT, 40) sz.Add(vsz, pos = (3, 1)) bsz = wx.BoxSizer(wx.VERTICAL) b = wx.Button(self, wx.ID_ANY, "Calculate\nBelt Driven", size = BSIZE) b.SetBackgroundColour(self.deco.getBackgroundColour()) b.SetFont(font) b.SetToolTipString("Open the calculator for axes that are belt-driven.") self.Bind(wx.EVT_BUTTON, self.onCalcBelt, b) self.bCalcBelt = b bsz.Add(b, 1, wx.ALL, 5) b = wx.Button(self, wx.ID_ANY, "Calculate\nScrew Driven", size = BSIZE) b.SetBackgroundColour(self.deco.getBackgroundColour()) b.SetFont(font) bsz.Add(b, 1, wx.ALL, 5) b.SetToolTipString("Open the calculator for axes that are screw-driven.") self.Bind(wx.EVT_BUTTON, self.onCalcScrew, b) self.bCalcScrew = b sz.Add(bsz, pos = (1, 3)) self.enableAll(False) self.SetSizer(sz)
def __init__(self, parent, nb, idPg, font): wx.Panel.__init__(self, nb, wx.ID_ANY) Page.__init__(self, font) self.id = idPg self.parent = parent self.font = font self.homing = [] self.spmKeys = [ "STEPS_PER_M_X", "STEPS_PER_M_Y", "STEPS_PER_M_Z", "STEPS_PER_M_E", ] self.mfrKeys = [ "MAXIMUM_FEEDRATE_X", "MAXIMUM_FEEDRATE_Y", "MAXIMUM_FEEDRATE_Z", "MAXIMUM_FEEDRATE_E", ] self.msrKeys = [ "SEARCH_FEEDRATE_X", "SEARCH_FEEDRATE_Y", "SEARCH_FEEDRATE_Z" ] self.eclKeys = [ "ENDSTOP_CLEARANCE_X", "ENDSTOP_CLEARANCE_Y", "ENDSTOP_CLEARANCE_Z", ] self.minmaxKeys = [ "X_MIN", "X_MAX", "Y_MIN", "Y_MAX", "Z_MIN", "Z_MAX" ] self.kinematicsKeys = ["KINEMATICS_STRAIGHT", "KINEMATICS_COREXY"] self.homingKeys = [ "HOMING_STEP1", "HOMING_STEP2", "HOMING_STEP3", "HOMING_STEP4", ] self.labels = { "STEPS_PER_M_X": "X:", "STEPS_PER_M_Y": "Y:", "STEPS_PER_M_Z": "Z:", "STEPS_PER_M_E": "E:", "MAXIMUM_FEEDRATE_X": "X:", "MAXIMUM_FEEDRATE_Y": "Y:", "MAXIMUM_FEEDRATE_Z": "Z:", "MAXIMUM_FEEDRATE_E": "E:", "SEARCH_FEEDRATE_X": "X:", "SEARCH_FEEDRATE_Y": "Y:", "SEARCH_FEEDRATE_Z": "Z:", "ENDSTOP_CLEARANCE_X": "X:", "ENDSTOP_CLEARANCE_Y": "Y:", "ENDSTOP_CLEARANCE_Z": "Z:", "X_MIN": "Min X:", "X_MAX": "Max X:", "Y_MIN": "Min Y:", "Y_MAX": "Max Y:", "Z_MIN": "Min Z:", "Z_MAX": "Max Z:", "E_ABSOLUTE": "Absolute E Coordinates", "KINEMATICS_STRAIGHT": "Straight", "KINEMATICS_COREXY": "CoreXY", "HOMING_STEP1": "Step 1:", "HOMING_STEP2": "Step 2:", "HOMING_STEP3": "Step 3:", "HOMING_STEP4": "Step 4:", "none": "-", "x_negative": "X min", "x_positive": "X max", "y_negative": "Y min", "y_positive": "Y max", "z_negative": "Z min", "z_positive": "Z max", } labelWidth = 40 sz = wx.GridBagSizer() sz.Add((10, 10), pos=(0, 0)) sz.Add((90, 10), pos=(0, 4)) b = wx.StaticBox(self, wx.ID_ANY, "Steps Per Meter") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.Add((5, 5)) for k in self.spmKeys: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sbox.Add(tc) sbox.Add((5, 5)) sz.Add(sbox, pos=(1, 1)) b = wx.StaticBox(self, wx.ID_ANY, "Maximum Feedrate") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.Add((5, 5)) for k in self.mfrKeys: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sbox.Add(tc) sbox.Add((5, 5)) sz.Add(sbox, pos=(1, 5)) b = wx.StaticBox(self, wx.ID_ANY, "Search Feedrate") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.Add((5, 5)) for k in self.msrKeys: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sbox.Add(tc) sbox.Add((5, 5)) sz.Add(sbox, pos=(1, 7)) b = wx.StaticBox(self, wx.ID_ANY, "Endstop Clearance") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.Add((5, 5)) for k in self.eclKeys: tc = self.addTextCtrl(k, labelWidth, self.onTextCtrlInteger) sbox.Add(tc) sbox.Add((5, 5)) sz.Add(sbox, pos=(3, 5)) b = wx.StaticBox(self, wx.ID_ANY, "Travel Limits") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.Add((5, 5)) for k in self.minmaxKeys: tc = self.addTextCtrl(k, labelWidth + 20, self.onTextCtrlFloat) sbox.Add(tc) sbox.Add((5, 5)) sz.Add(sbox, pos=(3, 7)) vsz = wx.BoxSizer(wx.VERTICAL) b = wx.StaticBox(self, wx.ID_ANY, "Kinematics") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.Add((5, 5)) style = wx.RB_GROUP for k in self.kinematicsKeys: rb = self.addRadioButton(k, style, self.onKinematicsSelect, b) style = 0 sbox.Add(rb, 1, wx.LEFT + wx.RIGHT, 16) sbox.Add((5, 5)) vsz.Add(sbox, 1, wx.LEFT, 40) cb = self.addCheckBox("E_ABSOLUTE", self.onCheckBox) vsz.Add(cb, 1, wx.LEFT, 40) sz.Add(vsz, pos=(3, 1)) bsz = wx.BoxSizer(wx.VERTICAL) b = wx.Button(self, wx.ID_ANY, "Calculate\nBelt Driven", size=BSIZE) b.SetBackgroundColour(self.deco.getBackgroundColour()) b.SetFont(font) b.SetToolTip("Open the calculator for axes that are belt-driven.") self.Bind(wx.EVT_BUTTON, self.onCalcBelt, b) self.bCalcBelt = b bsz.Add(b, 1, wx.ALL, 5) b = wx.Button(self, wx.ID_ANY, "Calculate\nScrew Driven", size=BSIZE) b.SetBackgroundColour(self.deco.getBackgroundColour()) b.SetFont(font) bsz.Add(b, 1, wx.ALL, 5) b.SetToolTip("Open the calculator for axes that are screw-driven.") self.Bind(wx.EVT_BUTTON, self.onCalcScrew, b) self.bCalcScrew = b sz.Add(bsz, pos=(1, 3)) b = wx.StaticBox(self, wx.ID_ANY, "Homing Order") b.SetFont(font) sbox = wx.StaticBoxSizer(b, wx.VERTICAL) sbox.Add((5, 5)) for k in self.homingKeys: tc = self.addChoice(k, self.homing, 0, labelWidth + 20, self.onChoice) sbox.Add(tc) sbox.Add((5, 5)) sz.Add(sbox, pos=(3, 3)) self.enableAll(False) self.SetSizer(sz)