def __init__(self, parent: wx.Window) -> None: super().__init__(parent, title="Move Stage") self._spins = [] position = cockpit.interfaces.stageMover.getPosition() limits = cockpit.interfaces.stageMover.getSoftLimits() for i in range(3): self._spins.append( wx.SpinCtrlDouble(self, min=limits[i][0], max=limits[i][1], initial=position[i])) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(wx.StaticText(self, label="Select stage position"), wx.SizerFlags().Border().Centre()) spins_sizer = wx.FlexGridSizer(cols=2, gap=(0, 0)) for spin, name in zip(self._spins, ['X', 'Y', 'Z']): spins_sizer.Add(wx.StaticText(self, label=name), wx.SizerFlags().Border().Centre()) spins_sizer.Add(spin, wx.SizerFlags().Border().Expand()) sizer.Add(spins_sizer, wx.SizerFlags().Border().Centre()) buttons_sizer = self.CreateStdDialogButtonSizer(wx.OK | wx.CANCEL) sizer.Add(buttons_sizer, wx.SizerFlags().Border().Centre()) self.SetSizerAndFit(sizer)
def func_button(self, panel): bbox, rxbox = BaseMode.func_button(self, panel) sizers = [0, 0, 0, 0, 0, 1, 1] for label in ('cos', '\u221A', 'pi', 'abs', '^', 'e', 'load output\nto input'): if len(label) == 20: b = wx.Button(panel, label=label, size=(105, int(conf.get('button_params', 'h')))) b.Bind(wx.EVT_BUTTON, self.load_o_to_i) else: b = wx.Button(panel, label=label, size=(int(conf.get('button_params', 'w')), int(conf.get('button_params', 'h')))) b.Bind(wx.EVT_BUTTON, self.on_button_click) font = b.GetFont() font.PointSize += 5 b.SetFont(font) rxbox[sizers.pop(0)].Add(b, wx.SizerFlags().Border(wx.LEFT, 5)) bbox.Add(rxbox.pop(0)) for row in rxbox: bbox.Add(row, wx.SizerFlags().Border(wx.TOP, 5)) return bbox
def __init__(self, parent, config): wx.Panel.__init__(self, parent) sizer = wx.BoxSizer(wx.VERTICAL) self.check_for_updates = wx.CheckBox( self, wx.ID_ANY, "Automatically check for updates on startup.") self.check_for_updates.SetValue(config.get("auto_check_for_updates")) sizer.Add(self.check_for_updates, wx.SizerFlags(1).Align(wx.TOP).Expand().Border(wx.ALL, 10)) l1 = wx.StaticText(self, label="Update Channel:") sizer.Add(l1, wx.SizerFlags(1).Align(wx.TOP).Expand().Border(wx.ALL, 1)) self.update_channel = wx.Choice(self, choices=["stable", "beta", "alpha"]) self.update_channel.SetSelection( self.update_channel.FindString(config.get("update_channel"))) sizer.Add(self.update_channel, wx.SizerFlags(1).Align(wx.TOP).Expand().Border(wx.ALL, 10)) self.show_tips_at_startup = wx.CheckBox( self, wx.ID_ANY, "Show program tips at startup.") self.show_tips_at_startup.SetValue(config.get("show_tips_at_startup")) sizer.Add(self.show_tips_at_startup, wx.SizerFlags(1).Align(wx.TOP).Expand().Border(wx.ALL, 10)) self.SetSizer(sizer)
def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self._dir_ctrl = wx.DirPickerCtrl( self, path=cockpit.util.files.getUserSaveDir()) self._template_ctrl = wx.TextCtrl(self) self._template_ctrl.SetToolTip( "Template for the name of the data file. The values '{date}' and" " '{time}' will be replaced with their current values.") self._fname_ctrl = wx.TextCtrl(self, value="") self._update_btn = wx.Button(self, label="Update") self._update_btn.SetToolTip("Update 'Filename' based on 'Template'.") self._update_btn.Bind(wx.EVT_BUTTON, self._OnUpdateFilename) self.UpdateFilename() grid = wx.BoxSizer(wx.HORIZONTAL) static_sizer = wx.SizerFlags(0).CentreVertical().Border() expand_sizer = wx.SizerFlags(1).CentreVertical().Border() def add_pair(label, ctrl): grid.Add(wx.StaticText(self, label=label), static_sizer) grid.Add(ctrl, expand_sizer) add_pair("Directory:", self._dir_ctrl) add_pair("Template:", self._template_ctrl) add_pair("Filename:", self._fname_ctrl) grid.Add(self._update_btn, static_sizer) self.SetSizer(grid)
def test_sizerSpacers6(self): bs = wx.BoxSizer() w = 5 h = 10 bs.Insert(0, w, h, wx.SizerFlags(1)) bs.Insert(0, (w, h), wx.SizerFlags(2)) bs.Insert(0, wx.Size(w, h), wx.SizerFlags(3))
def __init__(self, parent): IB.InfoBar.__init__(self, parent) self.button_ids = [] # some system themes have alpha, remove it self._background_color = wx.SystemSettings.GetColour( wx.SYS_COLOUR_HIGHLIGHT).Get(False) self._foreground_color = wx.SystemSettings.GetColour( wx.SYS_COLOUR_HIGHLIGHTTEXT).Get(False) self.SetBackgroundColour(self._background_color) self.SetForegroundColour(self._foreground_color) self._text.SetBackgroundColour(self._background_color) self._text.SetForegroundColour(self._foreground_color) self._button.SetBackgroundColour(self._background_color) # layout self._unInitLayout() sizer = wx.BoxSizer(wx.VERTICAL) subSizerText = wx.BoxSizer(wx.HORIZONTAL) self.subSizerButtons = wx.BoxSizer(wx.HORIZONTAL) subSizerText.Add(self._icon, wx.SizerFlags().Centre().Border()) subSizerText.Add(self._text, 1, wx.ALIGN_CENTER_VERTICAL) self.subSizerButtons.AddStretchSpacer() self.subSizerButtons.Add(self._button, wx.SizerFlags().Centre().Border()) sizer.Add(subSizerText, wx.SizerFlags().Expand()) sizer.Add(self.subSizerButtons, wx.SizerFlags().Expand()) self.SetSizer(sizer)
def __init__(self, parent, model): super().__init__(parent, title='Listening for keyboard input...', style=wx.CAPTION | wx.PD_APP_MODAL) self._presenter = KeyListenerPresenter(self, model) panel = wx.Panel(self) self._sizer = wx.BoxSizer(wx.VERTICAL) txt = wx.StaticText(panel, label='Press ctrl+q to stop!', style=wx.ALIGN_CENTER_HORIZONTAL) self._stateOutput = wx.StaticText(panel, label="\n") self._stateOutput.SetForegroundColour('white') self._stateOutput.SetBackgroundColour('black') self._stateOutput.SetFont( wx.Font(wx.FONTSIZE_SMALL, wx.FONTFAMILY_TELETYPE, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self._sizer.Add((0, 0), wx.SizerFlags(1).Expand()) self._sizer.Add(txt, wx.SizerFlags(0).Expand().Border(wx.ALL, 5)) self._sizer.Add(self._stateOutput, wx.SizerFlags(0).Expand().Border(wx.ALL, 20)) self._sizer.Add((0, 0), wx.SizerFlags(1).Expand()) panel.SetSizer(self._sizer) panel.Layout() self._presenter.ready() self.CenterOnParent() self.ShowModal()
def _initAccountPanel(self, width, height): panel = wx.Panel(self, size=(width, height)) panel.SetBackgroundColour(wx.WHITE) mainSizer = wx.BoxSizer(wx.VERTICAL) title = wx.StaticText(panel, -1, 'Minha conta') font = wx.Font(wx.FontInfo(13).Bold()) title.SetFont(font) userFont = wx.Font(wx.FontInfo(10)) self.txtEmail = wx.StaticText(panel, -1, '') self.txtEmail.SetFont(userFont) self.txtEmail.SetForegroundColour(colors.GREY) self.txtOrg = wx.StaticText(panel, -1, '') self.txtOrg.SetFont(userFont) self.btnUnlinkAccount = widgets.SecondaryButton(panel, 'DESCONECTAR CONTA', size=(125, 30)) mainSizer.Add(title, wx.SizerFlags(0).Border(wx.TOP, 35)) mainSizer.Add(self.txtOrg, wx.SizerFlags(0).Border(wx.TOP, 25)) mainSizer.Add(self.txtEmail, wx.SizerFlags(0).Border(wx.TOP, 5)) mainSizer.Add(self.btnUnlinkAccount, wx.SizerFlags(0).Border(wx.TOP, 25)) panel.SetSizer(mainSizer) return panel
def _initLayout(self): self.SetBackgroundColour(wx.WHITE) windowWidth, windowHeight = self.GetSize() menuWidth = windowWidth * 0.25 self.menu = self._initMenu(menuWidth, windowHeight) footerWidth = windowWidth - self.menu.GetSize()[0] footerHeight = windowHeight * 0.17 self.footer = self._initFooter(footerWidth, footerHeight) contentWidth = windowWidth - self.menu.GetSize()[0] contentHeight = windowHeight - self.footer.GetSize()[1] self.configPanel = self._initConfigPanel(contentWidth, contentHeight) self.accountPanel = self._initAccountPanel(contentWidth, contentHeight) hMainSizer = wx.BoxSizer(wx.HORIZONTAL) hMainSizer.Add(self.menu) vMainSizer = wx.BoxSizer(wx.VERTICAL) vMainSizer.Add(self.configPanel, wx.SizerFlags(0).Border(wx.LEFT | wx.RIGHT, 25)) vMainSizer.Add(self.accountPanel, wx.SizerFlags(0).Border(wx.LEFT | wx.RIGHT, 25)) vMainSizer.Add(self.footer) hMainSizer.Add(vMainSizer) self.SetSizer(hMainSizer)
def __init__(self, parent, log): self.log = log wx.Panel.__init__(self, parent, -1) self.listbox = wx.ListBox(self, style=wx.LB_SINGLE, size=(250, -1)) self.listbox.Append(ADD_NEW) self.listbox.Append(glob.glob(os.path.join('data', '*.svg'))) self.renderPanel = SVGRenderPanel(self) rightSizer = wx.BoxSizer(wx.VERTICAL) rightSizer.Add(self.renderPanel, wx.SizerFlags(1).Expand()) self.Sizer = wx.BoxSizer(wx.HORIZONTAL) self.Sizer.Add(self.listbox, wx.SizerFlags(1).Border(wx.ALL, 10).Expand()) self.Sizer.Add( rightSizer, wx.SizerFlags(2).Border(wx.RIGHT | wx.BOTTOM | wx.TOP, 10).Expand()) self.Bind(wx.EVT_LISTBOX, self.OnSelectItem) self.Bind(wx.EVT_LISTBOX_DCLICK, self.OnDClickItem) self.listbox.SetSelection(1) # TODO: Add ability for the user to select the renderer if 'wxMSW' in wx.PlatformInfo: renderer = wx.GraphicsRenderer.GetDirect2DRenderer() # renderer = wx.GraphicsRenderer.GetCairoRenderer() else: renderer = wx.GraphicsRenderer.GetDefaultRenderer() self.renderPanel.SetRenderer(renderer) # Load the first SVG in the list into the static bitmaps self.renderPanel.SetSVGFile(self.listbox.GetString(1))
def __init__(self, parent, axes: typing.Sequence[str], *args, **kwargs) -> None: super().__init__(parent, *args, **kwargs) for axis_name in axes: if axis_name not in stageMover.AXIS_MAP: raise ValueError('unknown axis named\'%s\'' % axis_name) n_stages = cockpit.interfaces.stageMover.mover.n_stages positions = [] # type: typing.List[typing.List[AxisPositionCtrl]] step_sizes = [] # type: typing.List[StageStepCtrl] for axis_name in axes: axis_index = stageMover.AXIS_MAP[axis_name] axis_positions = [] # type: typing.List[AxisPositionCtrl] for handler_index in range(n_stages): position = HandlerPositionCtrl(self, axis=axis_index, handler_index=handler_index) axis_positions.append(position) positions.append(axis_positions) step_sizes.append(AxisStepCtrl(self, axis=axis_index)) sizer = wx.FlexGridSizer(3 + n_stages) sizer.SetFlexibleDirection(wx.HORIZONTAL) for i, axis_name in enumerate(axes): sizer.Add(wx.StaticText(self, label=axis_name + ':'), flags=wx.SizerFlags().Centre()) for position in positions[i]: sizer.Add(position) sizer.Add(wx.StaticText(self, label='step (µm):'), flags=wx.SizerFlags().Centre().Border(wx.LEFT)) sizer.Add(step_sizes[i]) self.SetSizer(sizer)
def build_widgets(self): """Building the interface""" panel = wx.BoxSizer(wx.VERTICAL) # components self.text_box = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_READONLY) self.message_box = wx.TextCtrl(self) self.message_box.SetHint("Your message") self.submit_button = wx.Button(self, label="Submit") # setup location panel.Add(self.text_box, flags=wx.SizerFlags(1).Expand()) panel.Add(self.message_box, flags=wx.SizerFlags().Expand().Border(wx.ALL, 5)) panel.Add(self.submit_button, flags=wx.SizerFlags().Expand().Border( wx.LEFT | wx.BOTTOM | wx.RIGHT, 5)) # handlers self.submit_button.Bind(wx.EVT_BUTTON, self.send_message) # apply location to window self.SetSizer(panel)
def __init__(self, parent, text): wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY) sizer = wx.BoxSizer(wx.HORIZONTAL) font = wx.Font(-1, wx.DEFAULT, wx.NORMAL, wx.BOLD) #font = wx.Font(-1, wx.DECORATIVE, wx.ITALIC, wx.BOLD) text_hashrate = wx.StaticText(self, wx.ID_ANY, "Mh/s", size=(53, 28), style=wx.BOLD) text_watts = wx.StaticText(self, wx.ID_ANY, "Watts", size=(62, 28), style=wx.BOLD) text_browser = wx.StaticText(self, wx.ID_ANY, text, style=wx.BOLD) text_browser.SetFont(font) text_hashrate.SetFont(font) text_watts.SetFont(font) flags_browser = wx.SizerFlags(2) flags_browser.Border(wx.LEFT | wx.RIGHT | wx.BOTTOM, 6) flags_browser.Expand().Border(wx.ALL, 1) sizer.AddF(wx.StaticText(self, wx.ID_ANY, size=(55, -1)), wx.SizerFlags().Border(wx.LEFT, 6)) sizer.AddF(text_hashrate, wx.SizerFlags().Expand().Border(wx.LEFT, 40)) sizer.AddF(text_watts, wx.SizerFlags().Expand().Border(wx.LEFT, 24)) sizer.AddF(wx.StaticText(self, wx.ID_ANY, size=(15, -1)), wx.SizerFlags().Border(wx.LEFT, 6)) sizer.AddF(text_browser, flags_browser) self.SetSizer(sizer) self.Show()
def create_window(self, dialog): """ Create a window with an information message, a color picker, and a sizer. Args: self dialog """ # Create top-level window window = wx.Window(dialog, size=(300, 400)) # Create info message self.text = wx.StaticText(window) self.update_text() # Create colorpicker picker = wx.ColourPickerCtrl(window) picker.Bind(wx.EVT_COLOURPICKER_CHANGED, self.color_callback) # Set sizer sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.text, wx.SizerFlags().CenterHorizontal().Border(wx.TOP, 10)) sizer.Add(picker, wx.SizerFlags().CenterHorizontal().Border(wx.TOP, 10)) window.SetSizer(sizer) return window
def __init__(self, parent, log): self.log = log wx.Panel.__init__(self, parent, -1) # Create some controls self.chc = wx.CollapsibleHeaderCtrl(self, label='the label') setBtn = wx.Button(self, label='Set Collapsed') unsetBtn = wx.Button(self, label='Unset Collapsed') # Set up the layout sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(wx.StaticText(self, label='wx.CollapsibleHeaderCtrl: '), wx.SizerFlags().CenterVertical()) sizer.Add(self.chc, wx.SizerFlags().Border(wx.LEFT, 10)) sizer.Add(setBtn, wx.SizerFlags().Border(wx.LEFT, 40)) sizer.Add(unsetBtn, wx.SizerFlags().Border(wx.LEFT, 10)) # Put it all in an outer box with a border box = wx.BoxSizer() box.Add(sizer, wx.SizerFlags(1).Border(wx.ALL, 30)) self.SetSizer(box) # Set up the event handlers self.Bind(wx.EVT_BUTTON, self.OnSetBtn, setBtn) self.Bind(wx.EVT_BUTTON, self.OnUnsetBtn, unsetBtn) self.Bind(wx.EVT_UPDATE_UI, self.OnCheckBtnStatus, setBtn) self.Bind(wx.EVT_UPDATE_UI, self.OnCheckBtnStatus, unsetBtn) self.Bind(wx.EVT_COLLAPSIBLEHEADER_CHANGED, self.OnCollapseChanged)
def _Repopulate(self): allAlgorithms = sum([miner.algorithms for miner in self._Miners], []) self._Items = {} for device in self._Devices: cp = self._DeviceCp[device] pane = cp.GetPane() oldSizer = pane.GetSizer() if oldSizer: oldSizer.Clear(True) algorithms = [ algorithm for algorithm in allAlgorithms if algorithm.accepts(device) ] sizer = wx.FlexGridSizer(len(algorithms), 4, wx.Size(0, 0)) pane.SetSizer(sizer, deleteOld=True) sizer.AddGrowableCol(3) for algorithm in algorithms: item = Item(pane, algorithm) sizer.Add(item.checkbox) sizer.Add(item.label, wx.SizerFlags().Expand()) sizer.AddSpacer(main.PADDING_PX) sizer.Add(item.speeds, wx.SizerFlags().Expand()) self._Items[(device, algorithm)] = item self._ResetSpeedCtrl(device, algorithm) cp.Expand() self._SelectUnmeasured() self.Layout()
def AddButton(self, btnid, label): """ Adds a button to be shown in the info bar. """ sizer = self.GetSizer() assert sizer is not None, "Sizer must be created first" # user-added buttons replace the standard close button so remove it if we # hadn't done it yet if sizer.Detach(self._button): self._button.Hide() button = wx.Button(self, btnid, label) button.SetBackgroundColour(self._background_color) button.SetForegroundColour(self._foreground_color) if wx.Platform == '__WXMAC__': # smaller buttons look better in the(narrow)info bar under OS X button.SetWindowVariant(wx.WINDOW_VARIANT_SMALL) num_items = self.subSizerButtons.GetItemCount() if num_items == 1: self.subSizerButtons.Add(button, wx.SizerFlags().Centre().Border()) self.subSizerButtons.Add(self._button, wx.SizerFlags().Centre().Border()) self._button.Show() else: self.subSizerButtons.Insert(num_items - 1, button, wx.SizerFlags().Centre().Border()) if self.IsShown(): self.UpdateParent()
def __init__(self, *args, **kw): super(ScreenWatchdogFrame, self).__init__(*args, **kw) #self.Bind(wx.EVT_CLOSE, self.OnExit) self.shots = 0 self.disturb = False self.watchdog = ScreenAreaWatchdog( EventScreenAreaWatchdogListener(self)) self.watchdog.rate = 1.0 self.triggered = False self.green = wx.Colour(0, 255, 0) self.red = wx.Colour(255, 0, 0) self.color = None panel = wx.Panel(self) self.btn_select_area = wx.Button(panel) self.btn_select_area.SetLabel('Select area') self.btn_select_area.Bind(wx.EVT_BUTTON, self.OnSelectArea) self.btn_reset_area = wx.Button(panel) self.btn_reset_area.SetLabel('Reset') self.btn_reset_area.Hide() self.btn_reset_area.Bind(wx.EVT_BUTTON, self.OnReset) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.btn_select_area, wx.SizerFlags().Border(wx.TOP | wx.LEFT, 25)) sizer.Add(self.btn_reset_area, wx.SizerFlags().Center()) panel.SetSizer(sizer) self.CreateStatusBar() self.SetStatusText("Select area to watch...") self.Center() EVT_AREA_CHANGED(self, self.area_changed) EVT_AREA_RESET(self, self.area_reset) EVT_AREA_SET(self, self.area_set) EVT_SCREENSHOT(self, self.screenshot) EVT_EXIT(self, self.exit)
def __init__(self): wx.Frame.__init__(self, None, title="Otii") # Setup UI self.SetBackgroundColour(wx.Colour(38, 47, 56)) self.device_list = wx.ListBox(self) turn_on_button = wx.Button(self, label="Turn on") turn_off_button = wx.Button(self, label="Turn off") # Bind actions self.device_list.Bind(wx.EVT_LISTBOX, self.on_device_list_clicked) turn_on_button.Bind(wx.EVT_BUTTON, self.on_turn_on_clicked) turn_off_button.Bind(wx.EVT_BUTTON, self.on_turn_off_clicked) # Layout UI device_sizer = wx.BoxSizer(wx.VERTICAL) device_sizer.Add(turn_on_button, wx.SizerFlags().Expand()) device_sizer.Add(turn_off_button, wx.SizerFlags().Expand()) sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(self.device_list, wx.SizerFlags().Expand()) sizer.Add(device_sizer, wx.SizerFlags().Expand().Border(wx.ALL, 10)) self.SetSizer(sizer) self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.update, self.timer) self.timer.Start(1000)
def create_blendshapes_column(self, parent, blendshape_names): column_panel = wx.Panel(parent, style=wx.SIMPLE_BORDER) column_panel_sizer = wx.FlexGridSizer(cols=3) column_panel_sizer.AddGrowableCol(1) column_panel.SetSizer(column_panel_sizer) column_panel.SetAutoLayout(1) for blendshape_name in blendshape_names: self.blendshape_labels[blendshape_name] = wx.StaticText( column_panel, label=blendshape_name, style=wx.ALIGN_RIGHT) column_panel_sizer.Add(self.blendshape_labels[blendshape_name], wx.SizerFlags(1).Expand().Border(wx.ALL, 3)) self.blendshape_gauges[blendshape_name] = wx.Gauge( column_panel, style=wx.GA_HORIZONTAL, size=(100, -1)) column_panel_sizer.Add(self.blendshape_gauges[blendshape_name], wx.SizerFlags(1).Expand().Border(wx.ALL, 3)) self.blendshape_value_labels[blendshape_name] = wx.TextCtrl( column_panel, style=wx.TE_RIGHT, size=(40, -1)) self.blendshape_value_labels[blendshape_name].SetValue("0.00") self.blendshape_value_labels[blendshape_name].Disable() column_panel_sizer.Add(self.blendshape_value_labels[blendshape_name], wx.SizerFlags(0).Border(wx.ALL, 3)) column_panel.GetSizer().Fit(column_panel) return column_panel
def __init__(self, parent, log): self.log = log wx.Panel.__init__(self, parent, -1) # Create some controls self.ai = wx.ActivityIndicator(self) self.ai.Start() startBtn = wx.Button(self, label='Start') stopBtn = wx.Button(self, label='Stop') # Set up the layout sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(wx.StaticText(self, label='wx.ActivityIndicator: '), wx.SizerFlags().CenterVertical()) sizer.Add(self.ai, wx.SizerFlags().Border(wx.LEFT, 10)) sizer.Add(startBtn, wx.SizerFlags().Border(wx.LEFT, 40)) sizer.Add(stopBtn, wx.SizerFlags().Border(wx.LEFT, 10)) # Put it all in an outer box with a border box = wx.BoxSizer() box.Add(sizer, wx.SizerFlags(1).Border(wx.ALL, 30)) self.SetSizer(box) # Set up the event handlers self.Bind(wx.EVT_BUTTON, self.OnStart, startBtn) self.Bind(wx.EVT_BUTTON, self.OnStop, stopBtn) self.Bind(wx.EVT_UPDATE_UI, self.OnCheckBtnStatus, startBtn) self.Bind(wx.EVT_UPDATE_UI, self.OnCheckBtnStatus, stopBtn)
def __init__(self, parent, controller: IController, zoom_callback, edit_panel_callback, **kw): super().__init__(parent, **kw) sizer = wx.BoxSizer(wx.HORIZONTAL) zoom_in_btn = wx.Button(self, label="Zoom In") # TODO make this a method sizerflags = wx.SizerFlags().Align(wx.ALIGN_CENTER_VERTICAL).Border( wx.LEFT, 10) undo_button = wx.Button(self, label="Undo") sizer.Add(undo_button, sizerflags) undo_button.Bind(wx.EVT_BUTTON, lambda _: controller.undo()) redo_button = wx.Button(self, label="Redo") sizer.Add(redo_button, sizerflags) redo_button.Bind(wx.EVT_BUTTON, lambda _: controller.redo()) sizer.Add(zoom_in_btn, sizerflags) zoom_in_btn.Bind(wx.EVT_BUTTON, lambda _: zoom_callback(True)) zoom_out_btn = wx.Button(self, label="Zoom Out") sizer.Add(zoom_out_btn, sizerflags) zoom_out_btn.Bind(wx.EVT_BUTTON, lambda _: zoom_callback(False)) # Note: Right align after this sizer.Add((0, 0), proportion=1, flag=wx.EXPAND) toggle_panel_button = wx.Button(self, label="Toggle Details") sizer.Add( toggle_panel_button, wx.SizerFlags().Align(wx.ALIGN_CENTER_VERTICAL).Border( wx.RIGHT, 10)) toggle_panel_button.Bind(wx.EVT_BUTTON, edit_panel_callback) self.SetSizer(sizer)
def test_sizerSpacers4(self): bs = wx.BoxSizer() w = 5 h = 10 bs.Prepend(w, h, wx.SizerFlags(1)) bs.Prepend((w, h), wx.SizerFlags(2)) bs.Prepend(wx.Size(w, h), wx.SizerFlags(3))
def __init__(self, parent, pos=wx.DefaultPosition, size=wx.Size(24, 24), style=0, orientation=wx.HORIZONTAL, main=True, font=None, res=None, bg="D", fg="L", edge="V", sync=True, fpsLimit=0): super().__init__(parent=parent, pos=pos, size=size, style=style, font=font, res=res, bg=bg, fg=fg, edge=edge, sync=sync, fpsLimit=fpsLimit) self.SetSizer(wx.BoxSizer(orientation)) self.SizerFlags1 = wx.SizerFlags().Expand().Border(wx.ALL, 1) self.SizerFlags2 = wx.SizerFlags().Center().Border(wx.ALL, 1) self.SizerFlags3 = wx.SizerFlags().Center().Border(wx.ALL, 1).Proportion(1) if main: self.GetTopLevelParent().SetStatus = self.SetStatus
def __init__(self, parent, characterisation_assay): super().__init__(parent, title="Characterisation Asssay") root_panel = wx.Panel(self) figure = Figure() img_ax = figure.add_subplot(1, 2, 1) img_ax.imshow(characterisation_assay) diag_ax = figure.add_subplot(1, 2, 2) assay_diag = np.diag(characterisation_assay) diag_ax.plot(assay_diag) canvas = FigureCanvas(root_panel, wx.ID_ANY, figure) info_txt = wx.StaticText( root_panel, label=("Mean Zernike reconstruction accuracy: %0.5f" % np.mean(assay_diag)), ) panel_sizer = wx.BoxSizer(wx.VERTICAL) panel_sizer.Add(info_txt, wx.SizerFlags().Centre().Border()) panel_sizer.Add(canvas, wx.SizerFlags(1).Expand()) root_panel.SetSizer(panel_sizer) frame_sizer = wx.BoxSizer(wx.VERTICAL) frame_sizer.Add(root_panel, wx.SizerFlags().Expand()) self.SetSizerAndFit(frame_sizer)
def __init__(self, parent, commit_callback=lambda settings: None, *args, **kwargs): wx.Panel.__init__(self, parent, *args, **kwargs) self.settings = self.new_settings = None self.commit_callback = commit_callback sizer = wx.BoxSizer(orient=wx.VERTICAL) sizer_flags = wx.SizerFlags().Border(wx.ALL, FIELD_BORDER) # basic settings self.create_basic_form() sizer.AddF(self.basic_form, sizer_flags) # divider sizer.AddF(wx.StaticLine(self), wx.SizerFlags().Expand()) # advanced settings self.create_advanced_form() sizer.AddF(self.advanced_form, sizer_flags) # spacer sizer.AddStretchSpacer() # io controls self.create_io_controls() sizer.AddF(self.io_controls, sizer_flags.Right()) self.SetSizer(sizer)
def __init__(self, parent, input_image, image_ft, RMS_error): super().__init__(parent, title="Phase View") self._panel = wx.Panel(self) wx_img_real = _np_grey_img_to_wx_image(input_image) wx_img_fourier = _np_grey_img_to_wx_image(image_ft) self._canvas = FloatCanvas(self._panel, size=wx_img_real.GetSize()) self._real_bmp = self._canvas.AddBitmap(wx_img_real, (0, 0), Position="cc") self._fourier_bmp = self._canvas.AddBitmap(wx_img_fourier, (0, 0), Position="cc") # By default, show real and hide the fourier transform. self._fourier_bmp.Hide() save_btn = wx.ToggleButton(self._panel, label="Show Fourier") save_btn.Bind(wx.EVT_TOGGLEBUTTON, self.OnToggleFourier) rms_txt = wx.StaticText(self._panel, label="RMS difference: %.05f" % (RMS_error)) panel_sizer = wx.BoxSizer(wx.VERTICAL) panel_sizer.Add(self._canvas) bottom_sizer = wx.BoxSizer(wx.HORIZONTAL) bottom_sizer.Add(save_btn, wx.SizerFlags().Center().Border()) bottom_sizer.Add(rms_txt, wx.SizerFlags().Center().Border()) panel_sizer.Add(bottom_sizer) self._panel.SetSizer(panel_sizer) frame_sizer = wx.BoxSizer(wx.VERTICAL) frame_sizer.Add(self._panel) self.SetSizerAndFit(frame_sizer)
def __init__(self, parent, msg, caption, pos=wx.DefaultPosition, size=(500, 300), style=wx.DEFAULT_DIALOG_STYLE): wx.Dialog.__init__(self, parent, -1, caption, pos, size, style) x, y = pos if x == -1 and y == -1: self.CenterOnScreen(wx.BOTH) self.text = text = wx.TextCtrl(self, -1, msg, style=wx.TE_MULTILINE | wx.TE_READONLY) ok = wx.Button(self, wx.ID_OK, "OK") ok.SetDefault() sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.text, wx.SizerFlags(1).Border().Expand()) sizer.Add(ok, wx.SizerFlags().Border().Center()) self.SetSizer(sizer) self.Layout()
def build_widgets(self): """Построение интерфейса""" panel = wx.BoxSizer(wx.VERTICAL) # компоненты self.text_box = wx.TextCtrl(self, style=wx.TE_MULTILINE | wx.TE_READONLY) self.message_box = wx.TextCtrl(self) self.message_box.SetHint("Your message") self.submit_button = wx.Button(self, label="Submit") # установка расположения panel.Add(self.text_box, flags=wx.SizerFlags(1).Expand()) panel.Add(self.message_box, flags=wx.SizerFlags().Expand().Border(wx.ALL, 5)) panel.Add(self.submit_button, flags=wx.SizerFlags().Expand().Border( wx.LEFT | wx.BOTTOM | wx.RIGHT, 5)) # обработчики self.submit_button.Bind(wx.EVT_BUTTON, self.send_message) # применяем расположение в окне self.SetSizer(panel)
def ExceptionBox(caption="", parent=None): """Show python exception in a modal dialog. Creates a modal dialog without any option other than dismising the exception information. The exception traceback is displayed in a monospaced font and its text can be copied into the clipboard. This only works during the handling of an exception since it is not possible to retrieve the traceback after the handling. Args: caption (str): the dialog title. parent (wx.Window): parent window. """ current_exception = sys.exc_info()[1] if current_exception is None: raise RuntimeError('Not handling an exception') ## wx.MessageDialog looks better than plain wx.Dialog but we want ## to include the traceback without line-wrapping and to be able ## to copy its text. We can't easily reimplement wx.MessageDialog ## with this extras because wx.MessageDialog is not a simple ## subclass of wx.Dialog, it uses native widgets for simpler ## dialogs, such as gtk_message_dialog_new. dialog = wx.Dialog(parent, title=caption, name="exception-dialog") message = wx.StaticText(dialog, label=str(current_exception)) details = wx.TextCtrl(dialog, value=traceback.format_exc(), style=(wx.TE_MULTILINE|wx.TE_DONTWRAP|wx.TE_READONLY)) ## 'w.Font.Family = f' does not work because it 'w.Font' returns a ## copy of the font. We need to modify that copy and assign back. details_font = details.Font details_font.Family = wx.FONTFAMILY_TELETYPE details.Font = details_font sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(message, wx.SizerFlags(0).Expand().Border()) sizer.Add(details, wx.SizerFlags(1).Expand().Border()) sizer.Add(dialog.CreateSeparatedButtonSizer(wx.OK), wx.SizerFlags(0).Expand().Border()) ## The default width of a TextCtrl does not take into account its ## actual content. We need to manually set its size (issue #497) if wx.Platform != '__WXMSW__': details_text_size = details.GetTextExtent(details.Value) else: ## On Windows, GetTextExtent ignores newlines so we need to ## manually compute the text extent. traceback_lines = details.Value.splitlines() longest_line = max(traceback_lines, key=len) one_line_size = details.GetTextExtent(longest_line) details_text_size = wx.Size(one_line_size[0], one_line_size[1] * len(traceback_lines)) details.SetInitialSize(details.GetSizeFromTextSize(details_text_size)) dialog.SetSizerAndFit(sizer) dialog.Centre() dialog.ShowModal()