def _create_menus(self): """ Create the menus. """ menu_bar = self.menuBar() file_menu = menu_bar.addMenu("&File") file_menu.addAction("&New", self._new_project, QKeySequence.New) file_menu.addAction("&Open...", self._open_project, QKeySequence.Open) self._save_action = file_menu.addAction("&Save", self._save_project, QKeySequence.Save) file_menu.addAction("Save &As...", self._save_as_project, QKeySequence.SaveAs) file_menu.addSeparator() file_menu.addAction("E&xit", self.close, QKeySequence.Quit) menu_bar.addSeparator() help_menu = menu_bar.addMenu("&Help") help_menu.addAction("About pyqtdeploy...", self._about) help_menu.addAction(QWhatsThis.createAction(help_menu))
def __init__(self, parent, *args, **kwargs): """ Create and fill menu bar widget :param parent: :param args: :param kwargs: """ super(MyMenuBar, self).__init__(*args, **kwargs) self.parent = parent #create action to plot measurement data plot_measurement_data_action = QAction("Plot &measurement data", self) plot_measurement_data_action.setStatusTip( "Select a file containing measurements to plot them") plot_measurement_data_action.setWhatsThis( "Plot measurement data from file into the plotting area.") plot_measurement_data_action.triggered.connect( self.parent.plot_measurement_data) # create action to load input file for inversion and do inversion with errors load_dat_file_action_with_errors = QAction("&Inversion with Errors", self) load_dat_file_action_with_errors.setStatusTip( "Select a file containing measurements with errors for inversion") load_dat_file_action_with_errors.setWhatsThis( "Select a .dat file to invert the measurement results into a density model. Results will be shown in the plotting area. Toolbar at the top of the plotting area is used to manipulate the plot." ) load_dat_file_action_with_errors.triggered.connect( lambda: self.parent.do_inversion(True)) load_dat_file_action_with_errors.showStatusText(self) # create action to load input file for inversion and do inversion without errors load_dat_file_action_no_errors = QAction("&Inversion No Errors", self) load_dat_file_action_no_errors.setStatusTip( "Select a file containing measurements without errors for inversion" ) load_dat_file_action_no_errors.setWhatsThis( "Select a .dat file to invert the measurement results into a density model. Results will be shown in the plotting area. Toolbar at the top of the plotting area is used to manipulate the plot." ) load_dat_file_action_no_errors.triggered.connect( self.parent.do_inversion) load_dat_file_action_no_errors.showStatusText(self) # create action to load input file for interpolation and do interpolation load_interpolation_input_action = QAction("Interpolate data", self) load_interpolation_input_action.setStatusTip( "Select a file containing data for interpolation") load_interpolation_input_action.setWhatsThis( "Select a .dat file to interpolate between the given points. Results will be shown in the plotting area. " ) load_interpolation_input_action.triggered.connect( self.parent.do_interpolation) # create action to plot density model plot_inversion_results_action = QAction( "Plot &inversion result from file", self) plot_inversion_results_action.setStatusTip( "Select a file containing density inversion to plot the model") plot_inversion_results_action.setWhatsThis( "Select a .dens file to plot the density model from a previous inversion" ) plot_inversion_results_action.triggered.connect( functools.partial(self.parent.plot_inversion_results, None)) # create quit action, closes application quit_action = QAction("&Quit", self) quit_action.setStatusTip("Leave application") quit_action.setWhatsThis("Goodbye") quit_action.triggered.connect(qApp.quit) # resolution single asks user for parameters to a density model, which is used to create synthetic # measurement data. The density model is made with a constant background density and a single spike. # This data is inverted and the original density model and the inversion model is plotted resolution_single_action = QAction("Resolution Analysis Single", self) resolution_single_action.setStatusTip("Enter parameters") resolution_single_action.setWhatsThis( "asks user for parameters to a density model, which is used to create " + "synthetic measurement data. This data is inverted and the original density model and the inversion model is plotted" ) resolution_single_action.triggered.connect( self.parent.resolution_analysis_single) # resolution multiple will ask for parameters for a density model, which is used to generate synthetic data. # The density model has a constant background density and a spike at a certain depth. The depth of the spike # will be varied, and the resulting multiple models (after inversion) will be plottet over the spike depth. resolution_multiple_action = QAction("Resolution Analysis Multi", self) resolution_multiple_action.setStatusTip("Enter parameters") resolution_multiple_action.setWhatsThis( "resolution multiple will ask for parameters for a density model, " + "which is used to generate synthetic data. The density model has a constant background density and a spike " + "at a certain depth. The depth of the spike will be varied, and the resulting multiple models " + "(after inversion) will be plottet over the spike depth") resolution_multiple_action.triggered.connect( self.parent.resolution_analysis_multiple) # simple settings action asks user for number of discretization steps get_steps_action = QAction("&Discretization steps", self) get_steps_action.setStatusTip( "Enter number of points to use for discretization") get_steps_action.setWhatsThis( "Set the number of points used to discretize the density function." ) get_steps_action.triggered.connect(self.parent.get_steps_from_user) # settings action that asks the user which norm to use get_norm_action = QAction("&Select norm", self) get_norm_action.setStatusTip("Select a norm to use for the inversion") get_norm_action.setWhatsThis( "Select a norm that is used for the inversion. Different norms influence the resulting model differently." ) get_norm_action.triggered.connect(self.parent.get_norm_from_user) # create help action that explains user interface elements help_action = QWhatsThis.createAction(self) help_action.setStatusTip("Get info about components of this program") help_action.triggered.connect(QWhatsThis.enterWhatsThisMode) # attach actions to menubar file_menu = self.menuBar().addMenu("&File") file_menu.addAction(plot_measurement_data_action) file_menu.addAction(load_dat_file_action_no_errors) file_menu.addAction(load_dat_file_action_with_errors) file_menu.addAction(load_interpolation_input_action) file_menu.addAction(plot_inversion_results_action) file_menu.addAction(quit_action) resolution_menu = self.menuBar().addMenu("&Resolution") resolution_menu.addAction(resolution_single_action) resolution_menu.addAction(resolution_multiple_action) settings_menu = self.menuBar().addMenu("&Settings") settings_menu.addAction(get_steps_action) settings_menu.addAction(get_norm_action) help_menu = self.menuBar().addMenu("&Help") help_menu.addAction(help_action)
def createActions(self, parent=None): self.file_new = QAction(parent) self.file_open = QAction(parent) self.file_open_recent = QAction(parent) self.file_insert_file = QAction(parent) self.file_open_current_directory = QAction(parent) self.file_open_command_prompt = QAction(parent) self.file_save = QAction(parent) self.file_save_as = QAction(parent) self.file_save_copy_as = QAction(parent) self.file_save_all = QAction(parent) self.file_reload = QAction(parent) self.file_reload_all = QAction(parent) self.file_external_changes = QAction(parent) self.file_print_source = QAction(parent) self.file_close = QAction(parent) self.file_close_other = QAction(parent) self.file_close_all = QAction(parent) self.file_quit = QAction(parent) self.file_restart = QAction(parent) self.export_colored_html = QAction(parent) self.edit_undo = QAction(parent) self.edit_redo = QAction(parent) self.edit_cut = QAction(parent) self.edit_copy = QAction(parent) self.edit_copy_colored_html = QAction(parent) self.edit_paste = QAction(parent) self.edit_select_all = QAction(parent) self.edit_select_current_toplevel = QAction(parent) self.edit_select_none = QAction(parent) self.edit_select_full_lines_up = QAction(parent) self.edit_select_full_lines_down = QAction(parent) self.edit_find = QAction(parent) self.edit_find_next = QAction(parent) self.edit_find_previous = QAction(parent) self.edit_replace = QAction(parent) self.edit_preferences = QAction(parent) self.view_next_document = QAction(parent) self.view_previous_document = QAction(parent) self.view_wrap_lines = QAction(parent, checkable=True) self.view_scroll_up = QAction(parent) self.view_scroll_down = QAction(parent) self.window_new = QAction(parent) self.window_fullscreen = QAction(parent) self.window_fullscreen.setCheckable(True) self.help_manual = QAction(parent) self.help_whatsthis = QWhatsThis.createAction(parent) self.help_about = QAction(parent) self.help_bugreport = QAction(parent) # icons self.file_new.setIcon(icons.get('document-new')) self.file_open.setIcon(icons.get('document-open')) self.file_open_recent.setIcon(icons.get('document-open-recent')) self.file_open_current_directory.setIcon(icons.get('folder-open')) self.file_open_command_prompt.setIcon(icons.get('utilities-terminal')) self.file_save.setIcon(icons.get('document-save')) self.file_save_as.setIcon(icons.get('document-save-as')) self.file_save_copy_as.setIcon(icons.get('document-save-as')) self.file_save_all.setIcon(icons.get('document-save-all')) self.file_reload.setIcon(icons.get('reload')) self.file_reload_all.setIcon(icons.get('reload-all')) self.file_print_source.setIcon(icons.get('document-print')) self.file_close.setIcon(icons.get('document-close')) self.file_quit.setIcon(icons.get('application-exit')) self.edit_undo.setIcon(icons.get('edit-undo')) self.edit_redo.setIcon(icons.get('edit-redo')) self.edit_cut.setIcon(icons.get('edit-cut')) self.edit_copy.setIcon(icons.get('edit-copy')) self.edit_paste.setIcon(icons.get('edit-paste')) self.edit_select_all.setIcon(icons.get('edit-select-all')) self.edit_select_current_toplevel.setIcon(icons.get('edit-select')) self.edit_find.setIcon(icons.get('edit-find')) self.edit_find_next.setIcon(icons.get('go-down-search')) self.edit_find_previous.setIcon(icons.get('go-up-search')) self.edit_replace.setIcon(icons.get('edit-find-replace')) self.edit_preferences.setIcon(icons.get('preferences-system')) self.view_next_document.setIcon(icons.get('go-next')) self.view_previous_document.setIcon(icons.get('go-previous')) self.window_new.setIcon(icons.get('window-new')) self.window_fullscreen.setIcon(icons.get('view-fullscreen')) self.help_manual.setIcon(icons.get('help-contents')) self.help_whatsthis.setIcon(icons.get('help-contextual')) self.help_bugreport.setIcon(icons.get('tools-report-bug')) self.help_about.setIcon(icons.get('help-about')) # shortcuts self.file_new.setShortcuts(QKeySequence.New) self.file_open.setShortcuts(QKeySequence.Open) self.file_save.setShortcuts(QKeySequence.Save) self.file_save_as.setShortcuts(QKeySequence.SaveAs) self.file_close.setShortcuts(QKeySequence.Close) self.file_quit.setShortcuts(QKeySequence.Quit) self.edit_undo.setShortcuts(QKeySequence.Undo) self.edit_redo.setShortcuts(QKeySequence.Redo) self.edit_cut.setShortcuts(QKeySequence.Cut) self.edit_copy.setShortcuts(QKeySequence.Copy) self.edit_paste.setShortcuts(QKeySequence.Paste) self.edit_select_all.setShortcuts(QKeySequence.SelectAll) self.edit_select_current_toplevel.setShortcut(QKeySequence(Qt.SHIFT+Qt.CTRL+Qt.Key_B)) self.edit_select_none.setShortcut(QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_A)) self.edit_select_full_lines_up.setShortcut(QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Up)) self.edit_select_full_lines_down.setShortcut(QKeySequence(Qt.SHIFT + Qt.CTRL + Qt.Key_Down)) self.edit_find.setShortcuts(QKeySequence.Find) self.edit_find_next.setShortcuts(QKeySequence.FindNext) self.edit_find_previous.setShortcuts(QKeySequence.FindPrevious) self.edit_replace.setShortcuts(QKeySequence.Replace) self.edit_preferences.setShortcuts(QKeySequence.Preferences) self.view_next_document.setShortcuts(QKeySequence.Forward) self.view_previous_document.setShortcuts(QKeySequence.Back) self.view_scroll_up.setShortcut(Qt.CTRL + Qt.Key_Up) self.view_scroll_down.setShortcut(Qt.CTRL + Qt.Key_Down) self.window_fullscreen.setShortcuts([QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_F), QKeySequence(Qt.Key_F11)]) self.help_manual.setShortcuts(QKeySequence.HelpContents) # Mac OS X-specific roles? if sys.platform.startswith('darwin'): import macosx if macosx.use_osx_menu_roles(): self.file_quit.setMenuRole(QAction.QuitRole) self.edit_preferences.setMenuRole(QAction.PreferencesRole) self.help_about.setMenuRole(QAction.AboutRole) else: self.file_quit.setMenuRole(QAction.NoRole) self.edit_preferences.setMenuRole(QAction.NoRole) self.help_about.setMenuRole(QAction.NoRole)