def create_main_panel(self): import platform if platform.system() == 'Darwin': from MAVProxy.modules.lib.MacOS import backend_wxagg FigCanvas = backend_wxagg.FigureCanvasWxAgg else: from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigCanvas self.panel = wx.Panel(self) self.init_plot() self.canvas = FigCanvas(self.panel, -1, self.fig) self.close_button = wx.Button(self.panel, -1, "Close") self.Bind(wx.EVT_BUTTON, self.on_close_button, self.close_button) self.pause_button = wx.Button(self.panel, -1, "Pause") self.Bind(wx.EVT_BUTTON, self.on_pause_button, self.pause_button) self.Bind(wx.EVT_UPDATE_UI, self.on_update_pause_button, self.pause_button) self.hbox1 = wx.BoxSizer(wx.HORIZONTAL) self.hbox1.Add(self.close_button, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL) self.hbox1.AddSpacer(1) self.hbox1.Add(self.pause_button, border=5, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL) self.vbox = wx.BoxSizer(wx.VERTICAL) self.vbox.Add(self.canvas, 1, flag=wx.LEFT | wx.TOP | wx.GROW) self.vbox.Add(self.hbox1, 0, flag=wx.ALIGN_LEFT | wx.TOP) self.panel.SetSizer(self.vbox) self.vbox.Fit(self)
def __init__(self, title, graphdef, callback): wx.Dialog.__init__(self, None, -1, title, size=(900, 400)) self.callback = callback self.graphdef = graphdef self.panel = wx.Panel(self, -1) vbox = wx.BoxSizer(wx.VERTICAL) # name entry hbox_name = wx.BoxSizer(wx.HORIZONTAL) st_name = wx.StaticText(self.panel, -1, 'Name: ') self.tc_name = wx.TextCtrl(self.panel, -1, size=(400, -1)) self.tc_name.Value = self.graphdef.name hbox_name.Add(st_name, 0, wx.LEFT, 10) hbox_name.Add(self.tc_name, 0, wx.LEFT, 35) vbox.Add(hbox_name, 0, wx.TOP, 10) # expression entry st = wx.StaticText(self.panel, -1, 'Expressions: ') vbox.Add(st, 0, wx.LEFT, 10) hbox_expressions = wx.BoxSizer(wx.HORIZONTAL) self.tc_expressions = wx.TextCtrl(self.panel, -1, style=wx.TE_MULTILINE | wx.HSCROLL, size=(800, 80)) elist = [] for e in self.graphdef.expressions: e = ' '.join(e.split()) elist.append(e) self.tc_expressions.Value = '\n'.join(elist) vbox.Add(self.tc_expressions, 0, wx.LEFT, 15) # description entry st = wx.StaticText(self.panel, -1, 'Description: ') vbox.Add(st, 0, wx.LEFT, 10) self.tc_description = wx.TextCtrl(self.panel, -1, style=wx.TE_MULTILINE) vbox.Add(self.tc_description, 1, wx.EXPAND | wx.TOP | wx.RIGHT | wx.LEFT, 15) self.tc_description.Value = self.graphdef.description # buttons button_save = wx.Button(self.panel, 1, 'Save') button_cancel = wx.Button(self.panel, 2, 'Cancel') button_test = wx.Button(self.panel, 3, 'Test') hbox_buttons = wx.BoxSizer(wx.HORIZONTAL) hbox_buttons.Add(button_save, 0, wx.LEFT, 10) hbox_buttons.Add(button_cancel, 0, wx.LEFT, 10) hbox_buttons.Add(button_test, 0, wx.LEFT, 10) vbox.Add(hbox_buttons, 0, wx.TOP, 10) self.Bind(wx.EVT_BUTTON, self.OnSave, id=1) self.Bind(wx.EVT_BUTTON, self.OnCancel, id=2) self.Bind(wx.EVT_BUTTON, self.OnTest, id=3) self.panel.SetSizer(vbox) self.Centre()
def __init__(self, *args, **kwargs): # customise the style kwargs.setdefault('style', wx.TE_READONLY) # initialise super class super(InstrumentDisplay, self).__init__(*args, **kwargs) # set the background colour (also for text controls) # self.SetBackgroundColour(wx.WHITE) # text controls self._label_text = wx.TextCtrl(self, style=wx.BORDER_NONE) self._label_text.SetFont( wx.Font(12, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self._label_text.SetBackgroundColour(self.GetBackgroundColour()) self._label_text.ChangeValue("---") self._value_text = wx.TextCtrl(self, style=wx.BORDER_NONE | wx.TE_CENTRE) self._value_text.SetFont( wx.Font(30, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self._value_text.SetBackgroundColour(self.GetBackgroundColour()) self._value_text.ChangeValue("-.-") self._value_text.SetMinSize((60, 40)) self._unit_text = wx.TextCtrl(self, style=wx.BORDER_NONE | wx.TE_RIGHT) self._unit_text.SetFont( wx.Font(12, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self._unit_text.SetBackgroundColour(self.GetBackgroundColour()) self._unit_text.ChangeValue("--") # value text needs a nested sizer to centre vertically self._value_sizer = wx.BoxSizer(wx.HORIZONTAL) self._value_sizer.Add( self._value_text, wx.SizerFlags(1).Align(wx.ALIGN_CENTRE_VERTICAL).Border(wx.ALL, 0)) # top level sizers self._top_sizer = wx.BoxSizer(wx.VERTICAL) self._top_sizer.Add( self._label_text, wx.SizerFlags(0).Align(wx.ALIGN_TOP | wx.ALIGN_LEFT).Border( wx.ALL, 2)) self._top_sizer.Add(self._value_sizer, wx.SizerFlags(1).Expand().Border(wx.ALL, 1)) self._top_sizer.Add( self._unit_text, wx.SizerFlags(0).Align(wx.ALIGN_RIGHT).Border(wx.ALL, 2)) # layout sizers self._top_sizer.SetSizeHints(self) self.SetSizer(self._top_sizer) self.SetAutoLayout(True)
def StartRow(self, label=None): if self.row: self.EndRow() if label: self.row = wx.BoxSizer(wx.HORIZONTAL) text = wx.StaticText(self.panel, label=label) font = wx.Font(16, wx.DEFAULT, wx.NORMAL, wx.BOLD) text.SetFont(font) self.row.Add(text, 0, wx.LEFT, 10) self.vbox.Add(self.row, 0, wx.TOP, 10) self.row = wx.BoxSizer(wx.HORIZONTAL)
def __init__(self, state, title): self.state = state wx.Frame.__init__(self, None, title=title, size=(800, 300)) self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') state.frame = self # values for the status bar self.values = {} self.menu = None self.menu_callback = None self.last_layout_send = time.time() #array of the names of my MPButtons self.buttonnames = {} #array of the MPButtons self.buttons = [] self.control = wx.TextCtrl(self.panel, size=(800, 150), style=wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_AUTO_URL) self.vbox = wx.BoxSizer(wx.VERTICAL) # start with one status row self.status = [wx.BoxSizer(wx.HORIZONTAL)] self.vbox.Add(self.status[0], 0, flag=wx.ALIGN_LEFT | wx.TOP) # place to hold up to 9 buttons self.buttongridsizer = wx.GridSizer(3, 3, 0) # for i in range(1, 2): # btn = "Btn" + str(i) # self.buttongridsizer.Add(wx.Button(self.panel, label=btn), 0, wx.EXPAND) self.vbox.Add(self.buttongridsizer, 1, flag=wx.GROW) self.vbox.Add(self.control, 0, flag=wx.LEFT | wx.BOTTOM | wx.GROW) self.panel.SetSizer(self.vbox) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.on_timer, self.timer) self.timer.Start(100) self.Bind(wx.EVT_IDLE, self.on_idle) self.Bind(wx.EVT_TEXT_URL, self.on_text_url) self.Show(True) self.pending = []
def InstructionsPanel(self, parent): panel = Panel(parent) panel.SetBackgroundColour(LIGHT_BACKGROUND) self.ref_vehicle = Vehicle(panel) self.ref_vehicle.SetMinSize((430, 430)) self.countdown_window = CountdownText(panel) self.countdown_window.SetMinSize((430, 430)) self.countdown_window.SetBorderColor(SECONDARY_HIGHLIGHT) self.countdown_window.SetForegroundColour(PRIMARY_HIGHLIGHT) font = self.countdown_window.GetFont() font.SetWeight(wx.FONTWEIGHT_BOLD) self.countdown_window.SetFont(font) self.instruction = InstructionText(panel) self.instruction.SetMinLines(3) font = self.instruction.GetFont() font.SetPointSize(26) self.instruction.SetFont(font) sizer = wx.BoxSizer(wx.VERTICAL) panel.SetSizer(sizer) sizer.AddStretchSpacer() sizer.Add(self.ref_vehicle, flag=wx.ALIGN_CENTER) sizer.Add(self.countdown_window, flag=wx.ALIGN_CENTER) sizer.AddStretchSpacer() sizer.Add(self.instruction, border=10, flag=wx.ALL | wx.EXPAND) sizer.AddStretchSpacer() sizer.Hide(self.countdown_window) return panel
def Body(self, parent): body = wx.BoxSizer(wx.HORIZONTAL) body.Add(self.InstructionsPanel(parent), proportion=2, flag=wx.EXPAND) body.AddSpacer(23) self.progress_panel = self.ProgressPanel(parent) body.Add(self.progress_panel, proportion=1, flag=wx.EXPAND) return body
def add_compass(self, id): if not self._magcal_panels: self._sizer.Clear(deleteWindows=True) self._magcal_panels_sizer = wx.BoxSizer(wx.HORIZONTAL) self._sizer.Add( self._magcal_panels_sizer, proportion=1, flag=wx.EXPAND, ) legend = MagcalPanel.legend_panel(self._main_panel, wx.ID_ANY) self._sizer.Add( legend, proportion=0, flag=wx.ALIGN_CENTER, ) self._magcal_panels[id] = MagcalPanel(self._main_panel, wx.ID_ANY) self._magcal_panels_sizer.Add( self._magcal_panels[id], proportion=1, border=10, flag=wx.EXPAND | wx.ALL, )
def __init__(self, state, title): self.state = state wx.Frame.__init__(self, None, title=title, size=(350, 400), style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER) #use tabs for the individual checklists self.createLists() self.panel = wx.Panel(self) self.nb = wx.Choicebook(self.panel, wx.ID_ANY) #create the tabs self.createWidgets() #assign events to the buttons on the tabs self.createActions() #add in the pipe from MAVProxy self.timer = wx.Timer(self) #self.Bind(wx.EVT_TIMER, self.on_timer, self.timer) self.Bind(wx.EVT_TIMER, lambda evt, notebook=self.nb: self.on_timer(evt, notebook), self.timer) self.timer.Start(100) # finally, put the notebook in a sizer for the panel to manage # the layout sizer = wx.BoxSizer() sizer.Add(self.nb, 1, wx.EXPAND) self.panel.SetSizer(sizer) self.Show(True) self.pending = []
def on_timer(self, event): state = self.state if state.close_event.wait(0.001): self.timer.Stop() self.Destroy() return while state.child_pipe_recv.poll(): try: obj = state.child_pipe_recv.recv() except EOFError: self.timer.Stop() self.Destroy() return if isinstance(obj, Value): # request to set a status field if not obj.name in self.values: # create a new status field value = wx.StaticText(self.panel, -1, obj.text) # possibly add more status rows for i in range(len(self.status), obj.row + 1): self.status.append(wx.BoxSizer(wx.HORIZONTAL)) self.vbox.Insert(len(self.status) - 1, self.status[i], 0, flag=wx.ALIGN_LEFT | wx.TOP) self.vbox.Layout() self.status[obj.row].Add(value, border=5) self.status[obj.row].AddSpacer(20) self.values[obj.name] = value value = self.values[obj.name] value.SetForegroundColour(obj.fg) value.SetBackgroundColour(obj.bg) value.SetLabel(obj.text) self.panel.Layout() #self.values_rest[obj.name] = {"text": obj.text, "fg": obj.fg, "bg": obj.bg, "row": obj.row} elif isinstance(obj, Text): '''request to add text to the console''' #self.text_rest.add({"text": obj.text, "fg": obj.fg, "bg": obj.bg}) self.pending.append(obj) for p in self.pending: # we're scrolled at the bottom oldstyle = self.control.GetDefaultStyle() style = wx.TextAttr() style.SetTextColour(p.fg) style.SetBackgroundColour(p.bg) self.control.SetDefaultStyle(style) self.control.AppendText(p.text) self.control.SetDefaultStyle(oldstyle) self.pending = [] elif isinstance(obj, mp_menu.MPMenuTop): if obj is not None: self.SetMenuBar(None) self.menu = obj self.SetMenuBar(self.menu.wx_menu()) self.Bind(wx.EVT_MENU, self.on_menu) self.Refresh() self.Update() elif isinstance(obj, win_layout.WinLayout): win_layout.set_wx_window_layout(self, obj)
def __init__(self, state, title): self.state = state wx.Frame.__init__(self, None, title=title, size=(800, 300)) # different icons for MAVExplorer and MAVProxy try: if title == "MAVExplorer": self.SetIcon(icon.SimpleIcon("EXPLORER").get_ico()) else: self.SetIcon(icon.SimpleIcon("CONSOLE").get_ico()) except Exception: pass self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') state.frame = self # values for the status bar self.values = {} self.menu = None self.menu_callback = None self.last_layout_send = time.time() self.control = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_AUTO_URL) self.vbox = wx.BoxSizer(wx.VERTICAL) # start with one status row self.status = [wx.BoxSizer(wx.HORIZONTAL)] self.vbox.Add(self.status[0], 0, flag=wx.ALIGN_LEFT | wx.TOP) self.vbox.Add(self.control, 1, flag=wx.LEFT | wx.BOTTOM | wx.GROW) self.panel.SetSizer(self.vbox) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.on_timer, self.timer) self.timer.Start(100) self.Bind(wx.EVT_IDLE, self.on_idle) self.Bind(wx.EVT_TEXT_URL, self.on_text_url) self.Show(True) self.pending = []
def __init__(self, state, title): self.state = state wx.Frame.__init__(self, None, title=title, size=(800, 300)) self.panel = wx.Panel(self) self.panel.SetBackgroundColour('white') state.frame = self # values for the status bar self.values = {} # values for restserver # self.values_rest = {} # text for restserver # self.text_rest = TextList() self.menu = None self.menu_callback = None self.last_layout_send = time.time() self.control = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_AUTO_URL) self.vbox = wx.BoxSizer(wx.VERTICAL) # start with one status row self.status = [wx.BoxSizer(wx.HORIZONTAL)] self.vbox.Add(self.status[0], 0, flag=wx.ALIGN_LEFT | wx.TOP) self.vbox.Add(self.control, 1, flag=wx.LEFT | wx.BOTTOM | wx.GROW) self.panel.SetSizer(self.vbox) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.on_timer, self.timer) self.timer.Start(100) self.Bind(wx.EVT_IDLE, self.on_idle) self.Bind(wx.EVT_TEXT_URL, self.on_text_url) self.Show(True) # comment out to hide console self.pending = []
def InitUI(self): color = wx.Colour() color.SetFromString(LIGHT_BACKGROUND) self.SetBackgroundColour(scale_color(color, 0.95)) font = self.GetFont() font.SetWeight(wx.FONTWEIGHT_BOLD) font.SetPointSize(24) self.SetFont(font) self.SetMinSize((400, -1)) self.compass_text = wx.StaticText(self) self.fitness_value_text = wx.StaticText(self) font.SetWeight(wx.FONTWEIGHT_NORMAL) self.fitness_value_text.SetFont(font) self.parameters_sizer = self.CalibrationParameters() fitness_sizer = wx.BoxSizer(wx.HORIZONTAL) text = wx.StaticText(self, label='Fitness') text.SetFont(self.fitness_value_text.GetFont()) fitness_sizer.Add(text, proportion=1, flag=wx.EXPAND) fitness_sizer.Add(self.fitness_value_text) sizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(sizer) sizer.AddSpacer(16) sizer.Add(self.compass_text, border=16, flag=wx.LEFT | wx.RIGHT) sizer.AddSpacer(16) sizer.Add(self.StatusPanel(), flag=wx.EXPAND) sizer.AddSpacer(16) sizer.Add(fitness_sizer, border=16, flag=wx.LEFT | wx.RIGHT | wx.EXPAND) sizer.AddSpacer(16) sizer.Add(self.parameters_sizer, border=16, flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND) sizer.Hide(self.parameters_sizer)
def __init__(self, state): wx.Frame.__init__(self, None, wx.ID_ANY, state.title) self.state = state state.frame = self self.last_layout_send = time.time() self.sizer = wx.BoxSizer(wx.VERTICAL) state.panel = MPImagePanel(self, state) self.sizer.Add(state.panel, 1, wx.EXPAND) self.SetSizer(self.sizer) self.Bind(wx.EVT_IDLE, self.on_idle) self.Bind(wx.EVT_SIZE, state.panel.on_size)
def createPlotPanel(self): '''Creates the figure and axes for the plotting panel.''' self.figure = Figure() self.axes = self.figure.add_subplot(111) self.canvas = FigureCanvas(self, -1, self.figure) self.canvas.SetSize(wx.Size(300, 300)) self.axes.axis('off') self.figure.subplots_adjust(left=0, right=1, top=1, bottom=0) self.sizer = wx.BoxSizer(wx.VERTICAL) self.sizer.Add(self.canvas, 1, wx.EXPAND, wx.ALL) self.SetSizerAndFit(self.sizer) self.Fit()
def __init__(self, tab_names, title='Title', size=wx.DefaultSize): wx.Dialog.__init__(self, None, -1, title, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER) self.tab_names = tab_names self.notebook = wx.Notebook(self, -1, size=size) self.panels = {} self.sizers = {} for t in tab_names: self.panels[t] = wx.Panel(self.notebook) self.notebook.AddPage(self.panels[t], t) self.sizers[t] = wx.BoxSizer(wx.VERTICAL) self.panels[t].SetSizer(self.sizers[t]) self.dialog_sizer = wx.BoxSizer(wx.VERTICAL) self.dialog_sizer.Add(self.notebook, 1, wx.EXPAND | wx.ALL, 5) self.controls = {} self.browse_option_map = {} self.control_map = {} self.setting_map = {} button_box = wx.BoxSizer(wx.HORIZONTAL) self.button_apply = wx.Button(self, -1, "Apply") self.button_cancel = wx.Button(self, -1, "Cancel") self.button_save = wx.Button(self, -1, "Save") self.button_load = wx.Button(self, -1, "Load") button_box.Add(self.button_cancel, 0, wx.ALL) button_box.Add(self.button_apply, 0, wx.ALL) button_box.Add(self.button_save, 0, wx.ALL) button_box.Add(self.button_load, 0, wx.ALL) self.dialog_sizer.Add(button_box, 0, wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5) wx.EVT_BUTTON(self, self.button_cancel.GetId(), self.on_cancel) wx.EVT_BUTTON(self, self.button_apply.GetId(), self.on_apply) wx.EVT_BUTTON(self, self.button_save.GetId(), self.on_save) wx.EVT_BUTTON(self, self.button_load.GetId(), self.on_load) self.Centre()
def __init__(self, parent, state): wx.Panel.__init__(self, parent) self.frame = parent self.state = state self.img = None self.redraw_timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.on_redraw_timer, self.redraw_timer) self.Bind(wx.EVT_SET_FOCUS, self.on_focus) self.redraw_timer.Start(100) self.mouse_down = None self.drag_step = 10 self.zoom = 1.0 self.menu = None self.popup_menu = None self.wx_popup_menu = None self.popup_pos = None self.last_size = None self.done_PIL_warning = False state.brightness = 1.0 # dragpos is the top left position in image coordinates self.dragpos = wx.Point(0, 0) self.need_redraw = True self.mainSizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(self.mainSizer) # panel for the main image with warnings.catch_warnings(): warnings.simplefilter('ignore') self.imagePanel = mp_widgets.ImagePanel( self, wx.EmptyImage(state.width, state.height)) self.mainSizer.Add(self.imagePanel, flag=wx.TOP | wx.LEFT | wx.GROW, border=0) if state.mouse_events: self.imagePanel.Bind(wx.EVT_MOUSE_EVENTS, self.on_event) else: self.imagePanel.Bind(wx.EVT_MOUSE_EVENTS, self.on_mouse_event) if state.key_events: self.imagePanel.Bind(wx.EVT_KEY_DOWN, self.on_event) else: self.imagePanel.Bind(wx.EVT_KEY_DOWN, self.on_key_event) self.imagePanel.Bind(wx.EVT_MOUSEWHEEL, self.on_mouse_wheel) self.redraw() state.frame.Fit()
def StatusPanel(self): panel = Panel(self) panel.SetBackgroundColour(ReportDialog.light_background) self.status_icon = ReportDialog.StatusIcon(panel, size=(44, 44)) self.status_text = wx.StaticText(panel) sizer = wx.BoxSizer(wx.HORIZONTAL) panel.SetSizer(sizer) sizer.AddSpacer(16) sizer.Add(self.status_icon, border=5, flag=wx.TOP | wx.BOTTOM) sizer.AddSpacer(16) sizer.Add(self.status_text, flag=wx.ALIGN_CENTER) sizer.AddSpacer(16) return panel
def _add_input(self, setting, ctrl, ctrl2=None, value=None): tab_name = setting.tab label = setting.label tab = self.panel(tab_name) box = wx.BoxSizer(wx.HORIZONTAL) labelctrl = wx.StaticText(tab, -1, label) box.Add(labelctrl, 0, wx.ALIGN_CENTRE | wx.ALL, 5) box.Add(ctrl, 1, wx.ALIGN_CENTRE | wx.ALL, 5) if ctrl2 is not None: box.Add(ctrl2, 0, wx.ALIGN_CENTRE | wx.ALL, 5) self.sizer(tab_name).Add(box, 0, wx.GROW | wx.ALL, 5) self.controls[label] = ctrl if value is not None: ctrl.Value = value else: ctrl.Value = str(setting.value) self.control_map[ctrl.GetId()] = label self.setting_map[label] = setting
def LoaderProgress(self, parent): panel = wx.Panel(parent) panel.SetBackgroundColour(parent.GetBackgroundColour()) font = panel.GetFont() font.MakeItalic() panel.SetFont(font) self.load_progress = wx.Gauge(panel, size=(-1, 10)) self.load_progress_last_time = time.time() self.load_text = wx.StaticText(panel) sizer = wx.BoxSizer(wx.VERTICAL) panel.SetSizer(sizer) sizer.Add(self.load_progress, border=10, flag=wx.EXPAND | wx.LEFT | wx.RIGHT) sizer.Add(self.load_text, border=10, flag=wx.LEFT | wx.RIGHT) return panel
def Footer(self): footer = Panel(self) footer.SetBackgroundColour(ReportDialog.light_background) font = footer.GetFont() font.SetPointSize(16) font.SetWeight(wx.FONTWEIGHT_BOLD) footer.SetFont(font) self.show_more_button = Button(footer) self.show_more_button.SetLabel('Show more') self.show_more_button.SetBackgroundColour(wx.TransparentColour) self.Bind(wx.EVT_BUTTON, self.OnShowMoreButton, self.show_more_button) if not self.success: self.try_again_button = Button(footer, wx.ID_REDO) self.try_again_button.SetLabel('TRY AGAIN') self.try_again_button.SetBackgroundColour(wx.TransparentColour) self.try_again_button.SetForegroundColour(PRIMARY_HIGHLIGHT) self.Bind(wx.EVT_BUTTON, self.OnActionButton, self.try_again_button) self.close_button = Button(footer, wx.ID_CLOSE) self.close_button.SetLabel('CLOSE') self.close_button.SetBackgroundColour(wx.TransparentColour) self.close_button.SetForegroundColour(PRIMARY_HIGHLIGHT) self.Bind(wx.EVT_BUTTON, self.OnActionButton, self.close_button) sizer = wx.BoxSizer(wx.HORIZONTAL) footer.SetSizer(sizer) sizer.AddSpacer(16) sizer.Add(self.show_more_button) sizer.AddStretchSpacer() if not self.success: sizer.Add(self.try_again_button) sizer.AddSpacer(32) sizer.Add(self.close_button) sizer.AddSpacer(16) return footer
def InitUI(self): color = wx.Colour() color.SetFromString(DARK_BACKGROUND) self.SetBackgroundColour(scale_color(color, .9)) cols = 2 if len(self.mavlink_messages) > 1 else 1 compass_sizer = wx.GridSizer(0, cols, 2, 2) self.compass_panels = [] for m in self.mavlink_messages: p = self.CompassPanel(self, m) compass_sizer.Add(p) self.compass_panels.append(p) sizer = wx.BoxSizer(wx.VERTICAL) self.SetSizer(sizer) sizer.Add(compass_sizer) sizer.Add(self.Footer(), flag=wx.EXPAND) sizer.Fit(self)
def Footer(self, parent): footer = wx.BoxSizer(wx.HORIZONTAL) self.button = button = Button(parent, size=(180, -1)) button.SetPadding((0, 16)) button.SetBackgroundColour(LIGHT_BACKGROUND) button.SetBorderRadius(10) button.SetBorderWidth(2) font = button.GetFont() font.SetWeight(wx.FONTWEIGHT_BOLD) font.SetPointSize(20) button.SetFont(font) self.Bind(wx.EVT_BUTTON, self.OnButton, button) footer.Add(self.LoaderProgress(parent), proportion=1, flag=wx.EXPAND) footer.Add(button) return footer
def InitUI(self): font = self.GetFont() font.SetFamily(wx.FONTFAMILY_SWISS) self.SetFont(font) self.main_panel = wx.ScrolledWindow(self) self.main_panel.SetScrollbars(1, 1, 1, 1) self.main_panel.SetBackgroundColour(DARK_BACKGROUND) sizer = wx.BoxSizer(wx.VERTICAL) self.main_panel.SetSizer(sizer) kw = dict(border=32, flag=wx.EXPAND | wx.LEFT | wx.RIGHT) sizer.AddSpacer(16) sizer.Add(self.Header(self.main_panel), **kw) sizer.AddSpacer(23) sizer.Add(self.Body(self.main_panel), proportion=1, **kw) sizer.AddSpacer(23) sizer.Add(self.Footer(self.main_panel), **kw) sizer.AddSpacer(23)
def __init__(self, *k, **kw): super(MagcalPanel, self).__init__(*k, **kw) facecolor = self.GetBackgroundColour().GetAsString(wx.C2S_HTML_SYNTAX) fig = plt.figure(facecolor=facecolor, figsize=(1, 1)) self._canvas = FigureCanvas(self, wx.ID_ANY, fig) self._canvas.SetMinSize((300, 300)) self._id_text = wx.StaticText(self, wx.ID_ANY) self._status_text = wx.StaticText(self, wx.ID_ANY) self._completion_pct_text = wx.StaticText(self, wx.ID_ANY) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self._id_text) sizer.Add(self._status_text) sizer.Add(self._completion_pct_text) sizer.Add(self._canvas, proportion=1, flag=wx.EXPAND) self.SetSizer(sizer) ax = fig.add_subplot(111, axis_bgcolor=facecolor, projection='3d') self.configure_plot(ax)
def legend_panel(*k, **kw): if MagcalPanel._legend_panel: return MagcalPanel._legend_panel p = MagcalPanel._legend_panel = wx.Panel(*k, **kw) sizer = wx.BoxSizer(wx.HORIZONTAL) p.SetSizer(sizer) marker = wx.Panel(p, wx.ID_ANY, size=(10, 10)) marker.SetBackgroundColour(MagcalPanel._empty_color) sizer.Add(marker, flag=wx.ALIGN_CENTER) text = wx.StaticText(p, wx.ID_ANY) text.SetLabel('Sections not hit') sizer.Add(text, border=4, flag=wx.ALIGN_CENTER | wx.LEFT) marker = wx.Panel(p, wx.ID_ANY, size=(10, 10)) marker.SetBackgroundColour(MagcalPanel._filled_color) sizer.Add(marker, border=10, flag=wx.ALIGN_CENTER | wx.LEFT) text = wx.StaticText(p, wx.ID_ANY) text.SetLabel('Sections hit') sizer.Add(text, border=4, flag=wx.ALIGN_CENTER | wx.LEFT) return p
def __init__(self, state, parent): wx.Panel.__init__(self, parent) # , style=wx.BORDER_SIMPLE) self.state = state self.sizer = wx.BoxSizer(wx.VERTICAL) self.titleText = wx.StaticText( self, label="Unassigned Vehicles -->\n\nTools:") self.sizer.Add(self.titleText, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5) self.getParamsButton = wx.Button( self, label="Get offsets", size=wx.Size(100, 50)) self.Bind(wx.EVT_BUTTON, self.getParams, self.getParamsButton) self.resetButton = wx.Button( self, label="Reset layout", size=wx.Size(100, 50)) self.Bind(wx.EVT_BUTTON, self.reset, self.resetButton) self.sizer.Add(self.getParamsButton) self.sizer.Add(self.resetButton) # Do the sizer layout self.SetSizer(self.sizer)
def ProgressPanel(self, parent): panel = Panel(parent) panel.SetBackgroundColour(LIGHT_BACKGROUND) self.progress = wx.StaticText(panel, label='0%') font = self.progress.GetFont() font.SetPointSize(70) font.SetWeight(wx.FONTWEIGHT_BOLD) self.progress.SetFont(font) self.grid = GeodesicGrid(panel) self.grid.SetMinSize((365, 365)) sizer = wx.BoxSizer(wx.VERTICAL) panel.SetSizer(sizer) sizer.AddStretchSpacer() sizer.Add(self.grid, flag=wx.ALIGN_CENTER) sizer.AddStretchSpacer() sizer.AddSpacer(16) sizer.Add(self.progress, flag=wx.ALIGN_CENTER) sizer.AddStretchSpacer() return panel
def Header(self, parent): header = Panel(parent) header.SetBackgroundColour(LIGHT_BACKGROUND) sizer = wx.BoxSizer(wx.VERTICAL) header.SetSizer(sizer) font = header.GetFont() font.SetWeight(wx.FONTWEIGHT_BOLD) text = wx.StaticText(header) text.SetLabel('Compass Calibration') text.SetForegroundColour(PRIMARY_HIGHLIGHT) font.SetPointSize(26) text.SetFont(font) sizer.Add(text, border=16, flag=wx.ALL & ~wx.BOTTOM) text = wx.StaticText(header) text.SetLabel('Follow the procedure to calibrate your compass') font.SetPointSize(14) text.SetFont(font) sizer.Add(text, border=16, flag=wx.ALL & ~wx.TOP) return header
def __init__(self, conn): super(MagcalFrame, self).__init__( None, wx.ID_ANY, title='Magcal Graph', ) self.SetMinSize((300, 300)) self._conn = conn self._main_panel = wx.ScrolledWindow(self, wx.ID_ANY) self._main_panel.SetScrollbars(1, 1, 1, 1) self._magcal_panels = {} self._sizer = wx.BoxSizer(wx.VERTICAL) self._main_panel.SetSizer(self._sizer) idle_text = wx.StaticText(self._main_panel, wx.ID_ANY) idle_text.SetLabelMarkup( '<i>No calibration messages received yet...</i>') idle_text.SetForegroundColour('#444444') self._sizer.AddStretchSpacer() self._sizer.Add( idle_text, proportion=0, flag=wx.ALIGN_CENTER | wx.ALL, border=10, ) self._sizer.AddStretchSpacer() self._timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.timer_callback, self._timer) self._timer.Start(200)