def __setupMenu_(self): """Used to create the default menu""" # Create the menu bar self.__menu_ = QMenuBar(self) self.setMenuBar(self.__menu_) # File self.menuFile = QMenu(self.__menu_) self.menuFile.setTitle(_("&File")) self.actionQuit = QAction(self) self.actionQuit.setText(_("&Quit")) self.actionQuit.setShortcut(_("Ctrl+Q")) self.menuFile.addAction(self.actionQuit) # Settings self.menuSettings = QMenu(self.__menu_) self.menuSettings.setTitle(_("&Settings")) self.actionConfigure = QAction(self) self.actionConfigure.setText(_("&Configure xc2424scan")) self.menuSettings.addAction(self.actionConfigure) # Add the menus to the menu self.__menu_.addAction(self.menuFile.menuAction()) self.__menu_.addAction(self.menuSettings.menuAction()) self.connect(self.actionQuit, SIGNAL("triggered(bool)"), self.close) self.connect(self.actionConfigure, SIGNAL("triggered(bool)"), self.__change_config_)
class Ui_SLim(object): def setupUi(self, SLim): SLim.setObjectName(_fromUtf8("SLim")) SLim.resize(800, 601) self.centralwidget = QWidget(SLim) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.verticalLayout = QVBoxLayout(self.centralwidget) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) SLim.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(SLim) self.menubar.setGeometry(QRect(0, 0, 800, 20)) self.menubar.setObjectName(_fromUtf8("menubar")) SLim.setMenuBar(self.menubar) self.statusbar = QStatusBar(SLim) self.statusbar.setObjectName(_fromUtf8("statusbar")) SLim.setStatusBar(self.statusbar) ui_settings = slimUISettings() QMetaObject.connectSlotsByName(SLim) self.loopers = [] self.loopers.append(LooperWidget(self.centralwidget, 0, ui_settings.looper)) self.loopers.append(LooperWidget(self.centralwidget, 1, ui_settings.looper)) for looper in self.loopers: self.verticalLayout.addWidget(looper) self.retranslateUi(SLim) def retranslateUi(self, SLim): for looper in SLim.ui.loopers: looper.retranslateUi() SLim.setWindowTitle(QApplication.translate("SLim", "MainWindow", None, QApplication.UnicodeUTF8))
class BaseFenetrePrinc(QMainWindow): """ Classe BaseFenetrePrinc Cette classe définit les widgets contenus dans la fenetre principale de PyFt. Elle est héritée par fen.FenetrePrinc. """ def __init__(self, parent=None): """ Fait des initialisations """ super(BaseFenetrePrinc, self).__init__(parent) self.resize(800, 600) self.setWindowTitle('PyFt - 0.1') # barre de menu self.menuBar = QMenuBar() self.mFic = QMenu('Fichier') self.a_quit = QAction('Quitter', self) self.menuBar.addMenu(self.mFic) self.setMenuBar(self.menuBar) # zone centrale self.mdi = QMdiArea() self.setCentralWidget(self.mdi)
def initStartScreen(self): self.startscreen = StartScreen(self) self.startscreen.clicked.connect(self.connectActivated) if have_maemo: menu = QMenuBar(self.startscreen) menu.addAction(self.actionConnect) menu.addAction(self.actionPrefs)
def __init__(self, parent, actionManager): QMenuBar.__init__(self, parent) self._manager = actionManager for action in self._manager.allActions(): self._onActionInserted( action ) self._manager.actionInserted.connect(self._onActionInserted) self._manager.actionRemoved.connect(self._onActionRemoved)
def menubar(): """Return a newly created parent-less menu bar that's used when there is no main window.""" m = QMenuBar() m.addMenu(menu_file(m)) m.addMenu(menu_edit(m)) m.addMenu(menu_window(m)) m.addMenu(menu_sessions(m)) m.addMenu(menu_help(m)) return m
def __init__(self, config): # Initialize the object as a QWidget and # set its title and minimum width QWidget.__init__(self) self.config = config self.peerList = config.peerList self.setWindowTitle('BlastShare') self.setMinimumSize(320, 480) self.setMaximumWidth(320) self.prefw = None # connects the signals! self.connect(self.peerList, SIGNAL("initTransfer"), self.sendFileToPeer) ''' Will add feature in future version ''' ''' shareFilesAction = QAction(QIcon('exit.png'), '&Share File(s)', self) shareFilesAction.setShortcut('Ctrl+O') shareFilesAction.setStatusTip('Share File(s)') shareFilesAction.triggered.connect(quitApp) ''' preferencesAction = QAction(QIcon('exit.png'), '&Preferences', self) preferencesAction.setShortcut('Ctrl+P') preferencesAction.setStatusTip('Preferences') preferencesAction.triggered.connect(self.editPreferences) exitAction = QAction(QIcon('exit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(quitApp) menubar = QMenuBar() fileMenu = menubar.addMenu('&File') ''' Will enable in future versions ''' # fileMenu.addAction(shareFilesAction) fileMenu.addAction(preferencesAction) fileMenu.addAction(exitAction) layout = QVBoxLayout() layout.setContentsMargins(QMargins(0, 0, 0, 0)) self.setLayout(layout) statusBar = QStatusBar() statusBar.showMessage('Ready') layout.addWidget(menubar) layout.addWidget(self.peerList) layout.addWidget(statusBar)
def menuUi(self): extractQuit = QAction(self) extractQuit.setStatusTip('File') mainMenu = QMenuBar() fileMenu = mainMenu.addMenu('&File') exitMenu = QAction('&Exit', self) exitMenu.setShortcut('CTRL+Q') exitMenu.setStatusTip('Close Dialog') #exitMenu.triggered.connect(self.lunchUnitForm) fileMenu.addAction(exitMenu) printMenu = mainMenu.addMenu('&Print') printPrevMenu = QAction('&Print Preview', self) printPrevMenu.setShortcut('CTRL+P') printPrevMenu.setStatusTip('Print Preview') printPrevMenu.triggered.connect(self.lunchPrintForm) printMenu.addAction(printPrevMenu) printPDF = QAction('&Print PDF', self) printPDF.setShortcut('CTRL+D') printPDF.setStatusTip('PDF') printPDF.triggered.connect(self.lunchPrintPdf) printMenu.addAction(printPDF) printEXCEL = QAction('&Print EXCEL', self) printEXCEL.setShortcut('CTRL+E') printEXCEL.setStatusTip('EXCEL') printEXCEL.triggered.connect(self.lunchPrintExcel) printMenu.addAction(printEXCEL) printCSV = QAction('&Print CSV', self) printCSV.setShortcut('CTRL+C') printCSV.setStatusTip('PDF') printCSV.triggered.connect(self.lunchPrintCsv) printMenu.addAction(printCSV) selMenu = mainMenu.addMenu('Column Visibility') self.hold = {} for a in self.header: d = QAction(self.header[a], self, checkable = True) d.changed.connect(lambda:self.loadPage()) self.hold[a] = d if a in self.columns: d.setChecked(True) selMenu.addAction(d) return mainMenu
def setupUi(self, SLim): SLim.setObjectName(_fromUtf8("SLim")) SLim.resize(800, 601) self.centralwidget = QWidget(SLim) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.verticalLayout = QVBoxLayout(self.centralwidget) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) SLim.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(SLim) self.menubar.setGeometry(QRect(0, 0, 800, 20)) self.menubar.setObjectName(_fromUtf8("menubar")) SLim.setMenuBar(self.menubar) self.statusbar = QStatusBar(SLim) self.statusbar.setObjectName(_fromUtf8("statusbar")) SLim.setStatusBar(self.statusbar) ui_settings = slimUISettings() QMetaObject.connectSlotsByName(SLim) self.loopers = [] self.loopers.append(LooperWidget(self.centralwidget, 0, ui_settings.looper)) self.loopers.append(LooperWidget(self.centralwidget, 1, ui_settings.looper)) for looper in self.loopers: self.verticalLayout.addWidget(looper) self.retranslateUi(SLim)
def setupUi(self, MainWindow): """ """ MainWindow.resize(100,200) # Create the "Central Widget" and add a "Layout" self.centralwidget = QWidget(MainWindow) MainWindow.setCentralWidget(self.centralwidget) self.verticalLayout= QVBoxLayout(self.centralwidget) # Add a Temperature sensor and Label Widgets self.t1 = QFellesThermocouple(self.centralwidget) self.label = QLabel(self.centralwidget) self.label.setText("[C]") # Add Widgets to Layout self.verticalLayout.addWidget(self.t1) self.verticalLayout.addWidget(self.label) # Add connections self.t1.measurement_updated.connect(self.label.setText) # Create the Menu bar self.menubar = QMenuBar(MainWindow) MainWindow.setMenuBar(self.menubar) # Create the Status Bar self.statusbar = QStatusBar(MainWindow) MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow)
def initMenuBar(self): menuBar = QMenuBar() file = menuBar.addMenu("&File") quit = file.addAction("&Quit", QApplication.instance().quit) quit.setShortcutContext(Qt.ApplicationShortcut) quit.setShortcut(QKeySequence.Quit) self.changeName = QAction("Change Name", self, triggered=self.__changeName) self.changeColor = QAction("Change Color", self, triggered=self.__changeColor) self.cashCards = QAction("Cash in Cards", self, enabled=False, triggered=self.__cashCards) self.endAttack = QAction("End Attack", self, enabled=False, triggered=self.endAttackReleased) self.endTurn = QAction("End Turn", self, enabled=False, triggered=self.endTurnReleased) menuBar.addAction(self.changeName) menuBar.addAction(self.changeColor) menuBar.addAction(self.cashCards) menuBar.addAction(self.endAttack) menuBar.addAction(self.endTurn) self.setMenuBar(menuBar)
def __init__(self, parent): QMenuBar.__init__(self, parent) file = self.addMenu("&Archivo") n = file.addAction("&Nuevo Modelo") n.triggered.connect(self.trigger_new) n = file.addAction("Nueva &Pagina") n.triggered.connect(self.trigger_newpage) n = file.addAction("A&brir Modelo") n.triggered.connect(self.load_dialog) n = file.addAction("&Guardar Modelo") n.triggered.connect(self.save_as_dialog) n = file.addAction("&Importar Modulo") n.triggered.connect(self.get_from_fich) n = file.addAction("E&xportar Modulo") n.triggered.connect(self.put_to_fich) n = file.addAction("&Cerrar Modelo") n.triggered.connect(self.trigger_reset) file.addSeparator() n = file.addAction("&Salir") n.triggered.connect(self.exit.emit) edit = self.addMenu("&Editar") ex = self.addMenu("Ejecuc&ion") n = ex.addAction("E&jecutar") n.triggered.connect(self.play.emit) n = ex.addAction("&Construir") n.triggered.connect(self.build.emit) #view = self.addMenu("V&istas") opt = self.addMenu("&Opciones") help = self.addMenu("Ay&uda") help.addAction("&Tutorial") help.addAction("Sobre el autor") help.addAction("Sobre la aplicacion") self.parent().say("Menu creado")
def _setupMenu(self): self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 42, 22)) self.menuFile = QMenu(self.menubar) self.menuFile.setTitle(tr("File")) self.menuHelp = QMenu(self.menubar) self.menuHelp.setTitle(tr("Help")) self.setMenuBar(self.menubar) self.menuFile.addAction(self.actionLoadPDF) self.menuFile.addAction(self.app.actionLoadProject) self.menuFile.addAction(self.app.actionSaveProject) self.menuFile.addAction(self.app.actionQuit) self.menuHelp.addAction(self.app.actionShowHelp) self.menuHelp.addAction(self.app.actionCheckForUpdate) self.menuHelp.addAction(self.app.actionOpenDebugLog) self.menuHelp.addAction(self.app.actionAbout) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuHelp.menuAction())
class MainWindow(QMainWindow): def __init__(self): QMainWindow.__init__(self) self.menubar = QMenuBar() file_ = self.menubar.addMenu(u"&Fichier") exit = QAction(u"Quitter", self) exit.setShortcut("Ctrl+Q") exit.setToolTip("Quitter l'application") self.menubar.connect(exit, SIGNAL("triggered()"), \ self, \ SLOT("close()")) file_.addAction(exit) self.setMenuBar(self.menubar) self.web = QWebView() self.web.load(QUrl(APP_URL)) self.setCentralWidget(self.web) def goto(self, url): self.web.load(QUrl(url))
def __init__(self, tree_main, tree_second, configuration, right_window, main_window, signal_wrapper): """ Creates menu elements. @param tree_main: Tree object of main file / tree (left side) @param tree_second: Tree object of second file / tree (right side) @param text_output_instance: QTextEdit object which should be used / bind with the tree wiget. @param configuration: Current Configuration object. @param right_window: QWidget object of the second (right) file/tree @param main_window: QMainWindow object to change the title @param signal_wrapper: SignalWrapper object which wraps signals """ QMenuBar.__init__(self, main_window.centralWidget()) logging.info("menu foo") self.tree_main = tree_main self.tree_second = tree_second self._conf = configuration self.widget_right_window = right_window self.main_window = main_window self.signal_wrapper = signal_wrapper self.two_windows_action = QAction("Two Windows", self) self._importer = TextImporter(self._conf) self._init_gui_menu_view() self._init_gui_menu_main_file() self.menu_second_file = QMenu("SecondFile", self.main_window.centralWidget()) self._init_gui_menu_second_file() gui_helper.change_window_title("", self.main_window)
def create_menu_bar ( self, parent, controller = None ): """ Creates a menu bar representation of the manager. """ # If a controller is required it can either be set as a facet on the # menu bar manager (the facet is part of the 'ActionManager' API), or # passed in here (if one is passed in here it takes precedence over the # facet). if controller is None: controller = self.controller menu_bar = QMenuBar( parent ) # Every item in every group must be a menu manager: for group in self.groups: for item in group.items: menu = item.create_menu( parent, controller ) menu.menuAction().setText( item.name ) menu_bar.addMenu( menu ) return menu_bar #-- EOF ------------------------------------------------------------------------
def _setupMenu(self): self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 42, 22)) self.menuFile = QMenu(self.menubar) self.menuFile.setTitle(tr("File")) self.menuView = QMenu(self.menubar) self.menuView.setTitle(tr("View")) self.menuHelp = QMenu(self.menubar) self.menuHelp.setTitle(tr("Help")) self.menuLoadRecent = QMenu(self.menuFile) self.menuLoadRecent.setTitle(tr("Load Recent Results")) self.setMenuBar(self.menubar) self.menuFile.addAction(self.actionLoadResults) self.menuFile.addAction(self.menuLoadRecent.menuAction()) self.menuFile.addSeparator() self.menuFile.addAction(self.app.actionQuit) self.menuView.addAction(self.app.actionPreferences) self.menuView.addAction(self.actionShowResultsWindow) self.menuView.addAction(self.app.actionIgnoreList) self.menuHelp.addAction(self.app.actionShowHelp) self.menuHelp.addAction(self.app.actionRegister) self.menuHelp.addAction(self.app.actionCheckForUpdate) self.menuHelp.addAction(self.app.actionOpenDebugLog) self.menuHelp.addAction(self.app.actionAbout) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuView.menuAction()) self.menubar.addAction(self.menuHelp.menuAction()) # Recent folders menu self.menuRecentFolders = QMenu() self.menuRecentFolders.addAction(self.actionAddFolder) self.menuRecentFolders.addSeparator() # Recent results menu self.menuRecentResults = QMenu() self.menuRecentResults.addAction(self.actionLoadResults) self.menuRecentResults.addSeparator()
def setupUi(self): if self.prop.isPortraitMode(): self.setAttributeAndCatch(self.WA_Maemo5PortraitOrientation, True) self.changeOrientationText = self.switchToLandscapeText else: self.setAttributeAndCatch(self.WA_Maemo5LandscapeOrientation, True) self.changeOrientationText = self.switchToPortraitText self.setWindowTitle(self.tr("MaeMoney")) self.setMinimumSize(QtCore.QSize(400, 400)) self.gridLayout = QGridLayout() widget = QWidget(self) widget.setLayout(self.gridLayout) self.setCentralWidget(widget) self.btnLoadPortfolio = QtGui.QPushButton(self.tr("Sign in to Google Finance")) self.gridLayout.addWidget(self.btnLoadPortfolio, 0, 0, 1, 1) # List of portfolios self.portfolioListView = QComboBox() self.portfolioListView.setStyleSheet("QComboBox, QListView { font: 28px; } ") self.portfolioListView.setProperty(self.PROP_FINGER_SCROLLABLE, True) # Positions within the selected portfolio self.positionsListView = PortfolioListView(self) self.positionsListView.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.positionsListView.setProperty(self.PROP_FINGER_SCROLLABLE, True) menuBar = QMenuBar() self.setMenuBar(menuBar) self.changeAppLocaleAction = QAction(self.tr("Change language"), self) menuBar.addAction(self.changeAppLocaleAction) self.changeUrlAction = QAction(self.tr("Change Google Finance URL"), self) menuBar.addAction(self.changeUrlAction) self.changeOrientationAction = QAction(self.changeOrientationText, self) menuBar.addAction(self.changeOrientationAction) self.changeUpdateIntervalAction = QAction(self.tr("Change update interval"), self) menuBar.addAction(self.changeUpdateIntervalAction)
def __init__(self, iface, plugin_dir, with_ramp): """ Initial setup of toolbar (pre-login) """ self.iface = iface self.plugin_dir = plugin_dir self.with_ramp = with_ramp self.canvas = self.iface.mapCanvas() # Create toolbar self.toolbar = self.iface.addToolBar(u'Roadnet') self.toolbar.setObjectName(u'Roadnet') # Create menubar self.menubar = QMenuBar() self.define_button_icons_and_actions() self.populate_menubar() # Add menubar to toolbar self.toolbar.addWidget(self.menubar) self.toolbar.setIconSize(QSize(100, 100)) # Set initial state self.set_state('init')
def setup_menu_bar(self): self.menu_bar = QMenuBar(self) menu = QMenu("Peakmap Explorer", self.menu_bar) self.menu_bar.addMenu(menu) if not self.dual_mode: self.load_action = QAction("Load Peakmap", self) self.load_action.setShortcut(QKeySequence("Ctrl+L")) self.load_action2 = None menu.addAction(self.load_action) else: self.load_action = QAction("Load Yellow Peakmap", self) self.load_action2 = QAction("Load Blue Peakmap", self) menu.addAction(self.load_action) menu.addAction(self.load_action2) self.save_action = QAction("Save selected range as image", self) self.save_action.setShortcut(QKeySequence("Ctrl+S")) menu.addAction(self.save_action) menu = QMenu("Help", self.menu_bar) self.help_action = QAction("Help", self) self.help_action.setShortcut(QKeySequence("F1")) menu.addAction(self.help_action) self.menu_bar.addMenu(menu)
def createMenubar(self): self._menuBar_ = QMenuBar(None) #Create File Menu self._fileMenu_ = QMenu(self) am = ActionManager.getInstance() #todo add actions from ActionManager for action in am.getBloopFileMenuActions(): print "MainView.createMenuBar() adding action to file menu", action print self._fileMenu_.addAction(action) #Create Help Menu self._menuBar_.addMenu(self._fileMenu_) #self.setMenuWidget(self._menuBar_) #self._menuBar_.setVisible(True)
def __init__(self, parent=None): """ Fait des initialisations """ super(BaseFenetrePrinc, self).__init__(parent) self.resize(800, 600) self.setWindowTitle('PyFt - 0.1') # barre de menu self.menuBar = QMenuBar() self.mFic = QMenu('Fichier') self.a_quit = QAction('Quitter', self) self.menuBar.addMenu(self.mFic) self.setMenuBar(self.menuBar) # zone centrale self.mdi = QMdiArea() self.setCentralWidget(self.mdi)
def setupUi(self, MainWindow): """ """ MainWindow.resize(100, 200) #Create central widget and add a Layout self.centralwidget = QWidget(MainWindow) MainWindow.setCentralWidget(self.centralwidget) self.verticalLayout = QVBoxLayout(self.centralwidget) # Add a Temperature sensor and Label Widgets self.t1 = QFellesController(self.centralwidget) # Add Widgets to Layout self.verticalLayout.addWidget(self.t1) # Create the Menu bar self.menubar = QMenuBar(MainWindow) MainWindow.setMenuBar(self.menubar) # Create the Status Bar self.statusbar = QStatusBar(MainWindow) MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow)
class ResultWindow(QMainWindow): def __init__(self, app): QMainWindow.__init__(self, None) self.app = app self._setupUi() self.resultsModel = app.RESULT_MODEL_CLASS(self.app, self.resultsView) self.stats = StatsLabel(app.model.stats_label, self.statusLabel) self._update_column_actions_status() self.menuColumns.triggered[QAction].connect(self.columnToggled) self.resultsView.doubleClicked.connect(self.resultsDoubleClicked) self.resultsView.spacePressed.connect(self.resultsSpacePressed) self.detailsButton.clicked.connect(self.actionDetails.triggered) self.dupesOnlyCheckBox.stateChanged.connect(self.powerMarkerTriggered) self.deltaValuesCheckBox.stateChanged.connect(self.deltaTriggered) self.searchEdit.searchChanged.connect(self.searchChanged) self.app.willSavePrefs.connect(self.appWillSavePrefs) def _setupActions(self): # (name, shortcut, icon, desc, func) ACTIONS = [ ('actionDetails', 'Ctrl+I', '', tr("Details"), self.detailsTriggered), ('actionActions', '', '', tr("Actions"), self.actionsTriggered), ('actionPowerMarker', 'Ctrl+1', '', tr("Show Dupes Only"), self.powerMarkerTriggered), ('actionDelta', 'Ctrl+2', '', tr("Show Delta Values"), self.deltaTriggered), ('actionDeleteMarked', 'Ctrl+D', '', tr("Send Marked to Recycle Bin..."), self.deleteTriggered), ('actionMoveMarked', 'Ctrl+M', '', tr("Move Marked to..."), self.moveTriggered), ('actionCopyMarked', 'Ctrl+Shift+M', '', tr("Copy Marked to..."), self.copyTriggered), ('actionRemoveMarked', 'Ctrl+R', '', tr("Remove Marked from Results"), self.removeMarkedTriggered), ('actionReprioritize', '', '', tr("Re-Prioritize Results..."), self.reprioritizeTriggered), ('actionRemoveSelected', 'Ctrl+Del', '', tr("Remove Selected from Results"), self.removeSelectedTriggered), ('actionIgnoreSelected', 'Ctrl+Shift+Del', '', tr("Add Selected to Ignore List"), self.addToIgnoreListTriggered), ('actionMakeSelectedReference', 'Ctrl+Space', '', tr("Make Selected into Reference"), self.app.model.make_selected_reference), ('actionOpenSelected', 'Ctrl+O', '', tr("Open Selected with Default Application"), self.openTriggered), ('actionRevealSelected', 'Ctrl+Shift+O', '', tr("Open Containing Folder of Selected"), self.revealTriggered), ('actionRenameSelected', 'F2', '', tr("Rename Selected"), self.renameTriggered), ('actionMarkAll', 'Ctrl+A', '', tr("Mark All"), self.markAllTriggered), ('actionMarkNone', 'Ctrl+Shift+A', '', tr("Mark None"), self.markNoneTriggered), ('actionInvertMarking', 'Ctrl+Alt+A', '', tr("Invert Marking"), self.markInvertTriggered), ('actionMarkSelected', '', '', tr("Mark Selected"), self.markSelectedTriggered), ('actionExportToHTML', '', '', tr("Export To HTML"), self.app.model.export_to_xhtml), ('actionExportToCSV', '', '', tr("Export To CSV"), self.app.model.export_to_csv), ('actionSaveResults', 'Ctrl+S', '', tr("Save Results..."), self.saveResultsTriggered), ('actionInvokeCustomCommand', 'Ctrl+Alt+I', '', tr("Invoke Custom Command"), self.app.invokeCustomCommand), ] createActions(ACTIONS, self) self.actionDelta.setCheckable(True) self.actionPowerMarker.setCheckable(True) def _setupMenu(self): self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 630, 22)) self.menuFile = QMenu(self.menubar) self.menuFile.setTitle(tr("File")) self.menuMark = QMenu(self.menubar) self.menuMark.setTitle(tr("Mark")) self.menuActions = QMenu(self.menubar) self.menuActions.setTitle(tr("Actions")) self.menuColumns = QMenu(self.menubar) self.menuColumns.setTitle(tr("Columns")) self.menuView = QMenu(self.menubar) self.menuView.setTitle(tr("View")) self.menuHelp = QMenu(self.menubar) self.menuHelp.setTitle(tr("Help")) self.setMenuBar(self.menubar) self.menuActions.addAction(self.actionDeleteMarked) self.menuActions.addAction(self.actionMoveMarked) self.menuActions.addAction(self.actionCopyMarked) self.menuActions.addAction(self.actionRemoveMarked) self.menuActions.addAction(self.actionReprioritize) self.menuActions.addSeparator() self.menuActions.addAction(self.actionRemoveSelected) self.menuActions.addAction(self.actionIgnoreSelected) self.menuActions.addAction(self.actionMakeSelectedReference) self.menuActions.addSeparator() self.menuActions.addAction(self.actionOpenSelected) self.menuActions.addAction(self.actionRevealSelected) self.menuActions.addAction(self.actionInvokeCustomCommand) self.menuActions.addAction(self.actionRenameSelected) self.menuMark.addAction(self.actionMarkAll) self.menuMark.addAction(self.actionMarkNone) self.menuMark.addAction(self.actionInvertMarking) self.menuMark.addAction(self.actionMarkSelected) self.menuView.addAction(self.actionPowerMarker) self.menuView.addAction(self.actionDelta) self.menuView.addSeparator() self.menuView.addAction(self.actionDetails) self.menuView.addAction(self.app.actionIgnoreList) self.menuView.addAction(self.app.actionPreferences) self.menuHelp.addAction(self.app.actionShowHelp) self.menuHelp.addAction(self.app.actionCheckForUpdate) self.menuHelp.addAction(self.app.actionOpenDebugLog) self.menuHelp.addAction(self.app.actionAbout) self.menuFile.addAction(self.actionSaveResults) self.menuFile.addAction(self.actionExportToHTML) self.menuFile.addAction(self.actionExportToCSV) self.menuFile.addSeparator() self.menuFile.addAction(self.app.actionQuit) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuMark.menuAction()) self.menubar.addAction(self.menuActions.menuAction()) self.menubar.addAction(self.menuColumns.menuAction()) self.menubar.addAction(self.menuView.menuAction()) self.menubar.addAction(self.menuHelp.menuAction()) # Columns menu menu = self.menuColumns self._column_actions = [] for index, (display, visible) in enumerate(self.app.model.result_table.columns.menu_items()): action = menu.addAction(display) action.setCheckable(True) action.setChecked(visible) action.item_index = index self._column_actions.append(action) menu.addSeparator() action = menu.addAction(tr("Reset to Defaults")) action.item_index = -1 # Action menu actionMenu = QMenu(tr("Actions"), self.menubar) actionMenu.addAction(self.actionDeleteMarked) actionMenu.addAction(self.actionMoveMarked) actionMenu.addAction(self.actionCopyMarked) actionMenu.addAction(self.actionRemoveMarked) actionMenu.addSeparator() actionMenu.addAction(self.actionRemoveSelected) actionMenu.addAction(self.actionIgnoreSelected) actionMenu.addAction(self.actionMakeSelectedReference) actionMenu.addSeparator() actionMenu.addAction(self.actionOpenSelected) actionMenu.addAction(self.actionRevealSelected) actionMenu.addAction(self.actionInvokeCustomCommand) actionMenu.addAction(self.actionRenameSelected) self.actionActions.setMenu(actionMenu) self.actionsButton.setMenu(self.actionActions.menu()) def _setupUi(self): self.setWindowTitle(tr("{} Results").format(self.app.NAME)) self.resize(630, 514) self.centralwidget = QWidget(self) self.verticalLayout = QVBoxLayout(self.centralwidget) self.verticalLayout.setMargin(0) self.verticalLayout.setSpacing(0) self.actionsButton = QPushButton(tr("Actions")) self.detailsButton = QPushButton(tr("Details")) self.dupesOnlyCheckBox = QCheckBox(tr("Dupes Only")) self.deltaValuesCheckBox = QCheckBox(tr("Delta Values")) self.searchEdit = SearchEdit() self.searchEdit.setMaximumWidth(300) self.horizontalLayout = horizontalWrap([self.actionsButton, self.detailsButton, self.dupesOnlyCheckBox, self.deltaValuesCheckBox, None, self.searchEdit, 8]) self.horizontalLayout.setSpacing(8) self.verticalLayout.addLayout(self.horizontalLayout) self.resultsView = ResultsView(self.centralwidget) self.resultsView.setSelectionMode(QAbstractItemView.ExtendedSelection) self.resultsView.setSelectionBehavior(QAbstractItemView.SelectRows) self.resultsView.setSortingEnabled(True) self.resultsView.verticalHeader().setVisible(False) h = self.resultsView.horizontalHeader() h.setHighlightSections(False) h.setMovable(True) h.setStretchLastSection(False) h.setDefaultAlignment(Qt.AlignLeft) self.verticalLayout.addWidget(self.resultsView) self.setCentralWidget(self.centralwidget) self._setupActions() self._setupMenu() self.statusbar = QStatusBar(self) self.statusbar.setSizeGripEnabled(True) self.setStatusBar(self.statusbar) self.statusLabel = QLabel(self) self.statusbar.addPermanentWidget(self.statusLabel, 1) if self.app.prefs.resultWindowIsMaximized: self.setWindowState(self.windowState() | Qt.WindowMaximized) else: if self.app.prefs.resultWindowRect is not None: self.setGeometry(self.app.prefs.resultWindowRect) else: moveToScreenCenter(self) #--- Private def _update_column_actions_status(self): # Update menu checked state menu_items = self.app.model.result_table.columns.menu_items() for action, (display, visible) in zip(self._column_actions, menu_items): action.setChecked(visible) #--- Actions def actionsTriggered(self): self.actionsButton.showMenu() def addToIgnoreListTriggered(self): self.app.model.add_selected_to_ignore_list() def copyTriggered(self): self.app.model.copy_or_move_marked(True) def deleteTriggered(self): self.app.model.delete_marked() def deltaTriggered(self, state=None): # The sender can be either the action or the checkbox, but both have a isChecked() method. self.resultsModel.delta_values = self.sender().isChecked() self.actionDelta.setChecked(self.resultsModel.delta_values) self.deltaValuesCheckBox.setChecked(self.resultsModel.delta_values) def detailsTriggered(self): self.app.show_details() def markAllTriggered(self): self.app.model.mark_all() def markInvertTriggered(self): self.app.model.mark_invert() def markNoneTriggered(self): self.app.model.mark_none() def markSelectedTriggered(self): self.app.model.toggle_selected_mark_state() def moveTriggered(self): self.app.model.copy_or_move_marked(False) def openTriggered(self): self.app.model.open_selected() def powerMarkerTriggered(self, state=None): # see deltaTriggered self.resultsModel.power_marker = self.sender().isChecked() self.actionPowerMarker.setChecked(self.resultsModel.power_marker) self.dupesOnlyCheckBox.setChecked(self.resultsModel.power_marker) def preferencesTriggered(self): self.app.show_preferences() def removeMarkedTriggered(self): self.app.model.remove_marked() def removeSelectedTriggered(self): self.app.model.remove_selected() def renameTriggered(self): index = self.resultsView.selectionModel().currentIndex() # Our index is the current row, with column set to 0. Our filename column is 1 and that's # what we want. index = index.sibling(index.row(), 1) self.resultsView.edit(index) def reprioritizeTriggered(self): dlg = PrioritizeDialog(self, self.app) result = dlg.exec() if result == QDialog.Accepted: dlg.model.perform_reprioritization() def revealTriggered(self): self.app.model.reveal_selected() def saveResultsTriggered(self): title = tr("Select a file to save your results to") files = tr("dupeGuru Results (*.dupeguru)") destination = QFileDialog.getSaveFileName(self, title, '', files) if destination: if not destination.endswith('.dupeguru'): destination = '{}.dupeguru'.format(destination) self.app.model.save_as(destination) self.app.recentResults.insertItem(destination) #--- Events def appWillSavePrefs(self): prefs = self.app.prefs prefs.resultWindowIsMaximized = self.isMaximized() prefs.resultWindowRect = self.geometry() def columnToggled(self, action): index = action.item_index if index == -1: self.app.model.result_table.columns.reset_to_defaults() self._update_column_actions_status() else: visible = self.app.model.result_table.columns.toggle_menu_item(index) action.setChecked(visible) def contextMenuEvent(self, event): self.actionActions.menu().exec_(event.globalPos()) def resultsDoubleClicked(self, modelIndex): self.app.model.open_selected() def resultsSpacePressed(self): self.app.model.toggle_selected_mark_state() def searchChanged(self): self.app.model.apply_filter(self.searchEdit.text())
class DirectoriesDialog(QMainWindow): def __init__(self, parent, app): QMainWindow.__init__(self, None) self.app = app self.lastAddedFolder = platform.INITIAL_FOLDER_IN_DIALOGS self.recentFolders = Recent(self.app, 'recentFolders') self._setupUi() self.directoriesModel = DirectoriesModel(self.app.model.directory_tree, view=self.treeView) self.directoriesDelegate = DirectoriesDelegate() self.treeView.setItemDelegate(self.directoriesDelegate) self._setupColumns() self.app.recentResults.addMenu(self.menuLoadRecent) self.app.recentResults.addMenu(self.menuRecentResults) self.recentFolders.addMenu(self.menuRecentFolders) self._updateAddButton() self._updateRemoveButton() self._updateLoadResultsButton() self._setupBindings() def _setupBindings(self): self.scanButton.clicked.connect(self.scanButtonClicked) self.loadResultsButton.clicked.connect(self.actionLoadResults.trigger) self.addFolderButton.clicked.connect(self.actionAddFolder.trigger) self.removeFolderButton.clicked.connect(self.removeFolderButtonClicked) self.treeView.selectionModel().selectionChanged.connect( self.selectionChanged) self.app.recentResults.itemsChanged.connect( self._updateLoadResultsButton) self.recentFolders.itemsChanged.connect(self._updateAddButton) self.recentFolders.mustOpenItem.connect(self.app.model.add_directory) self.directoriesModel.foldersAdded.connect( self.directoriesModelAddedFolders) self.app.willSavePrefs.connect(self.appWillSavePrefs) def _setupActions(self): # (name, shortcut, icon, desc, func) ACTIONS = [ ('actionLoadResults', 'Ctrl+L', '', tr("Load Results..."), self.loadResultsTriggered), ('actionShowResultsWindow', '', '', tr("Results Window"), self.app.showResultsWindow), ('actionAddFolder', '', '', tr("Add Folder..."), self.addFolderTriggered), ] createActions(ACTIONS, self) def _setupMenu(self): self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 42, 22)) self.menuFile = QMenu(self.menubar) self.menuFile.setTitle(tr("File")) self.menuView = QMenu(self.menubar) self.menuView.setTitle(tr("View")) self.menuHelp = QMenu(self.menubar) self.menuHelp.setTitle(tr("Help")) self.menuLoadRecent = QMenu(self.menuFile) self.menuLoadRecent.setTitle(tr("Load Recent Results")) self.setMenuBar(self.menubar) self.menuFile.addAction(self.actionLoadResults) self.menuFile.addAction(self.menuLoadRecent.menuAction()) self.menuFile.addSeparator() self.menuFile.addAction(self.app.actionQuit) self.menuView.addAction(self.app.actionPreferences) self.menuView.addAction(self.actionShowResultsWindow) self.menuView.addAction(self.app.actionIgnoreList) self.menuHelp.addAction(self.app.actionShowHelp) self.menuHelp.addAction(self.app.actionRegister) self.menuHelp.addAction(self.app.actionCheckForUpdate) self.menuHelp.addAction(self.app.actionOpenDebugLog) self.menuHelp.addAction(self.app.actionAbout) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuView.menuAction()) self.menubar.addAction(self.menuHelp.menuAction()) # Recent folders menu self.menuRecentFolders = QMenu() self.menuRecentFolders.addAction(self.actionAddFolder) self.menuRecentFolders.addSeparator() # Recent results menu self.menuRecentResults = QMenu() self.menuRecentResults.addAction(self.actionLoadResults) self.menuRecentResults.addSeparator() def _setupUi(self): self.setWindowTitle(self.app.NAME) self.resize(420, 338) self.centralwidget = QWidget(self) self.verticalLayout = QVBoxLayout(self.centralwidget) self.promptLabel = QLabel( tr("Select folders to scan and press \"Scan\"."), self.centralwidget) self.verticalLayout.addWidget(self.promptLabel) self.treeView = QTreeView(self.centralwidget) self.treeView.setSelectionMode(QAbstractItemView.ExtendedSelection) self.treeView.setSelectionBehavior(QAbstractItemView.SelectRows) self.treeView.setAcceptDrops(True) triggers = QAbstractItemView.DoubleClicked|QAbstractItemView.EditKeyPressed\ |QAbstractItemView.SelectedClicked self.treeView.setEditTriggers(triggers) self.treeView.setDragDropOverwriteMode(True) self.treeView.setDragDropMode(QAbstractItemView.DropOnly) self.treeView.setUniformRowHeights(True) self.verticalLayout.addWidget(self.treeView) self.horizontalLayout = QHBoxLayout() self.removeFolderButton = QPushButton(self.centralwidget) self.removeFolderButton.setIcon(QIcon(QPixmap(":/minus"))) self.removeFolderButton.setShortcut("Del") self.horizontalLayout.addWidget(self.removeFolderButton) self.addFolderButton = QPushButton(self.centralwidget) self.addFolderButton.setIcon(QIcon(QPixmap(":/plus"))) self.horizontalLayout.addWidget(self.addFolderButton) spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.loadResultsButton = QPushButton(self.centralwidget) self.loadResultsButton.setText(tr("Load Results")) self.horizontalLayout.addWidget(self.loadResultsButton) self.scanButton = QPushButton(self.centralwidget) self.scanButton.setText(tr("Scan")) self.scanButton.setDefault(True) self.horizontalLayout.addWidget(self.scanButton) self.verticalLayout.addLayout(self.horizontalLayout) self.setCentralWidget(self.centralwidget) self._setupActions() self._setupMenu() if self.app.prefs.directoriesWindowRect is not None: self.setGeometry(self.app.prefs.directoriesWindowRect) else: moveToScreenCenter(self) def _setupColumns(self): header = self.treeView.header() header.setStretchLastSection(False) header.setResizeMode(0, QHeaderView.Stretch) header.setResizeMode(1, QHeaderView.Fixed) header.resizeSection(1, 100) def _updateAddButton(self): if self.recentFolders.isEmpty(): self.addFolderButton.setMenu(None) else: self.addFolderButton.setMenu(self.menuRecentFolders) def _updateRemoveButton(self): indexes = self.treeView.selectedIndexes() if not indexes: self.removeFolderButton.setEnabled(False) return self.removeFolderButton.setEnabled(True) def _updateLoadResultsButton(self): if self.app.recentResults.isEmpty(): self.loadResultsButton.setMenu(None) else: self.loadResultsButton.setMenu(self.menuRecentResults) #--- QWidget overrides def closeEvent(self, event): event.accept() if self.app.model.results.is_modified: title = tr("Unsaved results") msg = tr("You have unsaved results, do you really want to quit?") if not self.app.confirm(title, msg): event.ignore() if event.isAccepted(): QApplication.quit() #--- Events def addFolderTriggered(self): title = tr("Select a folder to add to the scanning list") flags = QFileDialog.ShowDirsOnly dirpath = str( QFileDialog.getExistingDirectory(self, title, self.lastAddedFolder, flags)) if not dirpath: return self.lastAddedFolder = dirpath self.app.model.add_directory(dirpath) self.recentFolders.insertItem(dirpath) def appWillSavePrefs(self): self.app.prefs.directoriesWindowRect = self.geometry() def directoriesModelAddedFolders(self, folders): for folder in folders: self.recentFolders.insertItem(folder) def loadResultsTriggered(self): title = tr("Select a results file to load") files = ';;'.join( [tr("dupeGuru Results (*.dupeguru)"), tr("All Files (*.*)")]) destination = QFileDialog.getOpenFileName(self, title, '', files) if destination: self.app.model.load_from(destination) self.app.recentResults.insertItem(destination) def removeFolderButtonClicked(self): self.directoriesModel.model.remove_selected() def scanButtonClicked(self): if self.app.model.results.is_modified: title = tr("Start a new scan") msg = tr( "You have unsaved results, do you really want to continue?") if not self.app.confirm(title, msg): return self.app.model.start_scanning() def selectionChanged(self, selected, deselected): self._updateRemoveButton()
def __init__(self, parent): QMenuBar.__init__(self, parent) # TBD: manage the size # self.setGeometry(QRect(0, 0, 929, 22)) self.setObjectName("menubar") self.setNativeMenuBar(True)
class FScan(QMainWindow): """This is the main windown of the xc2424scan software""" def __init__(self, parent=None): """Create a new main window @param parent: Parent widget @type parent: QWidget """ QMainWindow.__init__(self, parent) self.setWindowTitle( _("Xerox WorkCentre C2424 Scanner Utility v%s") % version.__version__) # Get the software configuration (~/.xc2424scan) or show the config # dialog if there is no configuration file self.__config_ = Config() if self.__config_.address is None: if self.__show_config_() is False: sys.exit() self.__config_.reload() # Set the main widget self.__scanWidget_ = ScanWidget(self) self.setCentralWidget(self.__scanWidget_) self.__scanWidget_.connectToScanner(self.__config_.address, self.__config_.port) # Create the menu self.__setupMenu_() def __setupMenu_(self): """Used to create the default menu""" # Create the menu bar self.__menu_ = QMenuBar(self) self.setMenuBar(self.__menu_) # File self.menuFile = QMenu(self.__menu_) self.menuFile.setTitle(_("&File")) self.actionQuit = QAction(self) self.actionQuit.setText(_("&Quit")) self.actionQuit.setShortcut(_("Ctrl+Q")) self.menuFile.addAction(self.actionQuit) # Settings self.menuSettings = QMenu(self.__menu_) self.menuSettings.setTitle(_("&Settings")) self.actionConfigure = QAction(self) self.actionConfigure.setText(_("&Configure xc2424scan")) self.menuSettings.addAction(self.actionConfigure) # Add the menus to the menu self.__menu_.addAction(self.menuFile.menuAction()) self.__menu_.addAction(self.menuSettings.menuAction()) self.connect(self.actionQuit, SIGNAL("triggered(bool)"), self.close) self.connect(self.actionConfigure, SIGNAL("triggered(bool)"), self.__change_config_) def __change_config_(self): """Called when the configuration has changed and we need to reconnect to the scanner""" if self.__show_config_(): self.__scanWidget_.connectToScanner(self.__config_.address, self.__config_.port) def __show_config_(self): """Called when we need to show the config dialog @return: True if the config has changed, False otherwise @rtype: bool """ fconfig = FScanConfig(self) fconfig.config.setAddress(self.__config_.address) fconfig.config.setPort(self.__config_.port) if fconfig.exec_() == QDialog.Accepted: self.__config_.address = fconfig.config.getAddress() self.__config_.port = fconfig.config.getPort() return True else: return False
class DBManager(QMainWindow): def __init__(self, iface, parent=None): QMainWindow.__init__(self, parent) self.setAttribute(Qt.WA_DeleteOnClose) self.setupUi() self.iface = iface # restore the window state settings = QSettings() self.restoreGeometry(settings.value("/DB_Manager/mainWindow/geometry", QByteArray(), type=QByteArray)) self.restoreState(settings.value("/DB_Manager/mainWindow/windowState", QByteArray(), type=QByteArray)) self.connect(self.tabs, SIGNAL("currentChanged(int)"), self.tabChanged) self.connect(self.tree, SIGNAL("selectedItemChanged"), self.itemChanged) self.itemChanged(None) def closeEvent(self, e): self.unregisterAllActions() # save the window state settings = QSettings() settings.setValue("/DB_Manager/mainWindow/windowState", self.saveState()) settings.setValue("/DB_Manager/mainWindow/geometry", self.saveGeometry()) QMainWindow.closeEvent(self, e) def refreshItem(self, item=None): QApplication.setOverrideCursor(Qt.WaitCursor) try: if item is None: item = self.tree.currentItem() self.tree.refreshItem(item) # refresh item children in the db tree except BaseError as e: DlgDbError.showError(e, self) return finally: QApplication.restoreOverrideCursor() def itemChanged(self, item): QApplication.setOverrideCursor(Qt.WaitCursor) try: self.reloadButtons() self.refreshTabs() except BaseError as e: DlgDbError.showError(e, self) return finally: QApplication.restoreOverrideCursor() def reloadButtons(self): db = self.tree.currentDatabase() if not hasattr(self, '_lastDb'): self._lastDb = db elif db == self._lastDb: return # remove old actions if self._lastDb is not None: self.unregisterAllActions() # add actions of the selected database self._lastDb = db if self._lastDb is not None: self._lastDb.registerAllActions(self) def tabChanged(self, index): QApplication.setOverrideCursor(Qt.WaitCursor) try: self.refreshTabs() except BaseError as e: DlgDbError.showError(e, self) return finally: QApplication.restoreOverrideCursor() def refreshTabs(self): index = self.tabs.currentIndex() item = self.tree.currentItem() table = self.tree.currentTable() # enable/disable tabs self.tabs.setTabEnabled(self.tabs.indexOf(self.table), table is not None) self.tabs.setTabEnabled(self.tabs.indexOf(self.preview), table is not None and table.type in [table.VectorType, table.RasterType] and table.geomColumn is not None) # show the info tab if the current tab is disabled if not self.tabs.isTabEnabled(index): self.tabs.setCurrentWidget(self.info) current_tab = self.tabs.currentWidget() if current_tab == self.info: self.info.showInfo(item) elif current_tab == self.table: self.table.loadData(item) elif current_tab == self.preview: self.preview.loadPreview(item) def refreshActionSlot(self): self.info.setDirty() self.table.setDirty() self.preview.setDirty() self.refreshItem() def importActionSlot(self): db = self.tree.currentDatabase() if db is None: self.infoBar.pushMessage(self.tr("No database selected or you are not connected to it."), QgsMessageBar.INFO, self.iface.messageTimeout()) return outUri = db.uri() schema = self.tree.currentSchema() if schema: outUri.setDataSource(schema.name, "", "", "") from .dlg_import_vector import DlgImportVector dlg = DlgImportVector(None, db, outUri, self) dlg.exec_() def exportActionSlot(self): table = self.tree.currentTable() if table is None: self.infoBar.pushMessage(self.tr("Select the table you want export to file."), QgsMessageBar.INFO, self.iface.messageTimeout()) return inLayer = table.toMapLayer() from .dlg_export_vector import DlgExportVector dlg = DlgExportVector(inLayer, table.database(), self) dlg.exec_() inLayer.deleteLater() def runSqlWindow(self): db = self.tree.currentDatabase() if db is None: self.infoBar.pushMessage(self.tr("No database selected or you are not connected to it."), QgsMessageBar.INFO, self.iface.messageTimeout()) # force displaying of the message, it appears on the first tab (i.e. Info) self.tabs.setCurrentIndex(0) return from dlg_sql_window import DlgSqlWindow query = DlgSqlWindow(self.iface, db, self) dbname = db.connection().connectionName() tabname = self.tr("Query") + u" (%s)" % dbname index = self.tabs.addTab(query, tabname) self.tabs.setTabIcon(index, db.connection().icon()) self.tabs.setCurrentIndex(index) query.nameChanged.connect(functools.partial(self.update_query_tab_name, index, dbname)) def update_query_tab_name(self, index, dbname, queryname): if not queryname: queryname = self.tr("Query") tabname = u"%s (%s)" % (queryname, dbname) self.tabs.setTabText(index, tabname) def showSystemTables(self): self.tree.showSystemTables(self.actionShowSystemTables.isChecked()) def registerAction(self, action, menuName, callback=None): """ register an action to the manager's main menu """ if not hasattr(self, '_registeredDbActions'): self._registeredDbActions = {} if callback is not None: invoke_callback = lambda x: self.invokeCallback(callback) if menuName is None or menuName == "": self.addAction(action) if menuName not in self._registeredDbActions: self._registeredDbActions[menuName] = list() self._registeredDbActions[menuName].append(action) if callback is not None: QObject.connect(action, SIGNAL("triggered(bool)"), invoke_callback) return True # search for the menu actionMenu = None helpMenuAction = None for a in self.menuBar.actions(): if not a.menu() or a.menu().title() != menuName: continue if a.menu() != self.menuHelp: helpMenuAction = a actionMenu = a break # not found, add a new menu before the help menu if actionMenu is None: menu = QMenu(menuName, self) if helpMenuAction is not None: actionMenu = self.menuBar.insertMenu(helpMenuAction, menu) else: actionMenu = self.menuBar.addMenu(menu) menu = actionMenu.menu() menuActions = menu.actions() # get the placeholder's position to insert before it pos = 0 for pos in range(len(menuActions)): if menuActions[pos].isSeparator() and menuActions[pos].objectName().endswith("_placeholder"): menuActions[pos].setVisible(True) break if pos < len(menuActions): before = menuActions[pos] menu.insertAction(before, action) else: menu.addAction(action) actionMenu.setVisible(True) # show the menu if menuName not in self._registeredDbActions: self._registeredDbActions[menuName] = list() self._registeredDbActions[menuName].append(action) if callback is not None: QObject.connect(action, SIGNAL("triggered(bool)"), invoke_callback) return True def invokeCallback(self, callback, *params): """ Call a method passing the selected item in the database tree, the sender (usually a QAction), the plugin mainWindow and optionally additional parameters. This method takes care to override and restore the cursor, but also catches exceptions and displays the error dialog. """ QApplication.setOverrideCursor(Qt.WaitCursor) try: callback(self.tree.currentItem(), self.sender(), self, *params) except BaseError as e: # catch database errors and display the error dialog DlgDbError.showError(e, self) return finally: QApplication.restoreOverrideCursor() def unregisterAction(self, action, menuName): if not hasattr(self, '_registeredDbActions'): return if menuName is None or menuName == "": self.removeAction(action) if menuName in self._registeredDbActions: if self._registeredDbActions[menuName].count(action) > 0: self._registeredDbActions[menuName].remove(action) action.deleteLater() return True for a in self.menuBar.actions(): if not a.menu() or a.menu().title() != menuName: continue menu = a.menu() menuActions = menu.actions() menu.removeAction(action) if menu.isEmpty(): # hide the menu a.setVisible(False) if menuName in self._registeredDbActions: if self._registeredDbActions[menuName].count(action) > 0: self._registeredDbActions[menuName].remove(action) # hide the placeholder if there're no other registered actions if len(self._registeredDbActions[menuName]) <= 0: for i in range(len(menuActions)): if menuActions[i].isSeparator() and menuActions[i].objectName().endswith("_placeholder"): menuActions[i].setVisible(False) break action.deleteLater() return True return False def unregisterAllActions(self): if not hasattr(self, '_registeredDbActions'): return for menuName in self._registeredDbActions: for action in list(self._registeredDbActions[menuName]): self.unregisterAction(action, menuName) del self._registeredDbActions def close_tab(self, index): widget = self.tabs.widget(index) if widget not in [self.info, self.table, self.preview]: self.tabs.removeTab(index) widget.deleteLater() def setupUi(self): self.setWindowTitle(self.tr("DB Manager")) self.setWindowIcon(QIcon(":/db_manager/icon")) self.resize(QSize(700, 500).expandedTo(self.minimumSizeHint())) # create central tab widget and add the first 3 tabs: info, table and preview self.tabs = QTabWidget() self.info = InfoViewer(self) self.tabs.addTab(self.info, self.tr("Info")) self.table = TableViewer(self) self.tabs.addTab(self.table, self.tr("Table")) self.preview = LayerPreview(self) self.tabs.addTab(self.preview, self.tr("Preview")) self.setCentralWidget(self.tabs) # display close button for all tabs but the first 3 ones, i.e. # HACK: just hide the close button where not needed (GS) self.tabs.setTabsClosable(True) self.tabs.tabCloseRequested.connect(self.close_tab) tabbar = self.tabs.tabBar() for i in range(3): btn = tabbar.tabButton(i, QTabBar.RightSide) if tabbar.tabButton(i, QTabBar.RightSide) else tabbar.tabButton(i, QTabBar.LeftSide) btn.resize(0, 0) btn.hide() # Creates layout for message bar self.layout = QGridLayout(self.info) self.layout.setContentsMargins(0, 0, 0, 0) spacerItem = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) self.layout.addItem(spacerItem, 1, 0, 1, 1) # init messageBar instance self.infoBar = QgsMessageBar(self.info) sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) self.infoBar.setSizePolicy(sizePolicy) self.layout.addWidget(self.infoBar, 0, 0, 1, 1) # create database tree self.dock = QDockWidget("Tree", self) self.dock.setObjectName("DB_Manager_DBView") self.dock.setFeatures(QDockWidget.DockWidgetMovable) self.tree = DBTree(self) self.dock.setWidget(self.tree) self.addDockWidget(Qt.LeftDockWidgetArea, self.dock) # create status bar self.statusBar = QStatusBar(self) self.setStatusBar(self.statusBar) # create menus self.menuBar = QMenuBar(self) self.menuDb = QMenu(self.tr("&Database"), self) self.menuBar.addMenu(self.menuDb) self.menuSchema = QMenu(self.tr("&Schema"), self) actionMenuSchema = self.menuBar.addMenu(self.menuSchema) self.menuTable = QMenu(self.tr("&Table"), self) actionMenuTable = self.menuBar.addMenu(self.menuTable) self.menuHelp = None # QMenu(self.tr("&Help"), self) # actionMenuHelp = self.menuBar.addMenu(self.menuHelp) self.setMenuBar(self.menuBar) # create toolbar self.toolBar = QToolBar("Default", self) self.toolBar.setObjectName("DB_Manager_ToolBar") self.addToolBar(self.toolBar) # create menus' actions # menu DATABASE sep = self.menuDb.addSeparator() sep.setObjectName("DB_Manager_DbMenu_placeholder") sep.setVisible(False) self.actionRefresh = self.menuDb.addAction(QIcon(":/db_manager/actions/refresh"), self.tr("&Refresh"), self.refreshActionSlot, QKeySequence("F5")) self.actionSqlWindow = self.menuDb.addAction(QIcon(":/db_manager/actions/sql_window"), self.tr("&SQL window"), self.runSqlWindow, QKeySequence("F2")) self.menuDb.addSeparator() self.actionClose = self.menuDb.addAction(QIcon(), self.tr("&Exit"), self.close, QKeySequence("CTRL+Q")) # menu SCHEMA sep = self.menuSchema.addSeparator() sep.setObjectName("DB_Manager_SchemaMenu_placeholder") sep.setVisible(False) actionMenuSchema.setVisible(False) # menu TABLE sep = self.menuTable.addSeparator() sep.setObjectName("DB_Manager_TableMenu_placeholder") sep.setVisible(False) self.actionImport = self.menuTable.addAction(QIcon(":/db_manager/actions/import"), self.tr("&Import layer/file"), self.importActionSlot) self.actionExport = self.menuTable.addAction(QIcon(":/db_manager/actions/export"), self.tr("&Export to file"), self.exportActionSlot) self.menuTable.addSeparator() #self.actionShowSystemTables = self.menuTable.addAction(self.tr("Show system tables/views"), self.showSystemTables) #self.actionShowSystemTables.setCheckable(True) #self.actionShowSystemTables.setChecked(True) actionMenuTable.setVisible(False) # add actions to the toolbar self.toolBar.addAction(self.actionRefresh) self.toolBar.addAction(self.actionSqlWindow) self.toolBar.addAction(self.actionImport) self.toolBar.addAction(self.actionExport)
def create_widget(self): """ Create the underlying menu bar widget. """ # Qt behaves better when creating the menu bar without a parent. self.widget = QMenuBar()
def __init__(self, appid, base, name): super(BrowserWindow, self).__init__() self.appid = appid self.name = name self.original_name = name self.base = base # Main widgets self.centralwidget = QWidget(self) self.gridLayout_2 = QGridLayout(self.centralwidget) self.setCentralWidget(self.centralwidget) self.urlLineEdit = QLineEdit(self) self.progressBar = QProgressBar(self) # Custom webview self.page = LocalWebPage() self.page.setFeaturePermission(self.page.mainFrame(), LocalWebPage.Notifications, LocalWebPage.PermissionGrantedByUser) self.webkitNotifications = WebkitNotifications(self) self.webViewMain = LocalWebView(self.centralwidget) self.webViewMain.setPage(self.page) self.gridLayout_2.addWidget(self.webViewMain, 0, 0, 1, 1) self.webViewMain.setContentsMargins(0, 0, 0, 0) self.gridLayout_2.setContentsMargins(0, 0, 0, 0) self.menubar = QMenuBar(self) self.menuFile = QMenu(self.menubar) self.menuView = QMenu(self.menubar) self.menuEdit = QMenu(self.menubar) self.menuHelp = QMenu(self.menubar) self.setMenuBar(self.menubar) self.statusbar = QStatusBar(self) self.setStatusBar(self.statusbar) self.toolBar = QToolBar(self) self.toolBar.setMovable(False) self.toolBar.setFloatable(False) self.addToolBar(Qt.TopToolBarArea, self.toolBar) # Create actions self.actionOpenLinkInNewWindow = self.page.action( self.page.OpenLinkInNewWindow) self.actionOpenLinkInNewWindow.setText( tr('BrowserWindow', 'Open in &Browser')) self.actionBack = self.page.action(self.page.Back) self.actionForward = self.page.action(self.page.Forward) self.actionStop = self.page.action(self.page.Stop) self.actionReload = self.page.action(self.page.Reload) self.actionHome = QAction(self) self.actionShowMenu = QAction(self) self.actionShowMenu.setCheckable(True) self.actionShowToolbar = QAction(self) self.actionShowToolbar.setCheckable(True) self.actionClose = QAction(self) self.actionModifyWebapp = QAction(self) self.actionEditPreferences = QAction(self) self.actionPrint = QAction(self) self.actionSaveLink = self.page.action(self.page.DownloadLinkToDisk) self.actionSaveLink.setEnabled(False) self.actionAbout = QAction(self) # Populate menu and toolbars self.menuFile.addAction(self.actionHome) self.menuFile.addAction(self.actionBack) self.menuFile.addAction(self.actionForward) self.menuFile.addAction(self.actionStop) self.menuFile.addAction(self.actionReload) self.menuFile.addSeparator() self.menuFile.addAction(self.actionPrint) self.menuFile.addSeparator() self.menuFile.addAction(self.actionClose) self.menuView.addAction(self.actionShowMenu) self.menuView.addAction(self.actionShowToolbar) self.menuView.addSeparator() self.menuEdit.addAction(self.actionModifyWebapp) #self.menuEdit.addAction(self.actionEditPreferences) self.menuHelp.addAction(self.actionAbout) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuEdit.menuAction()) self.menubar.addAction(self.menuView.menuAction()) self.menubar.addAction(self.menuHelp.menuAction()) self.toolBar.addAction(self.actionHome) self.toolBar.addAction(self.actionBack) self.toolBar.addAction(self.actionForward) self.toolBar.addWidget(self.urlLineEdit) self.toolBar.addAction(self.actionStop) self.toolBar.addAction(self.actionReload) self.retranslateUi() QMetaObject.connectSlotsByName(self) self.setWindowTitle(self.name) # Set up cookie jar that persists sessions self.cookieJar = PersistableCookieJar(self, identifier=self.appid) self.cookieJar.load() self.webViewMain.page().networkAccessManager().setCookieJar( self.cookieJar) # Set up link delegation so that external links open in web browser. self.webViewMain.page().setLinkDelegationPolicy( QWebPage.DelegateExternalLinks) self.desktopEntry = desktop.getEntry(self.appid) # Set icons for actions; this can't be done in the designer, AFAICT self.actionHome.setIcon(QIcon.fromTheme('go-home')) self.actionAbout.setIcon(QIcon.fromTheme('help-about')) # Set up shortcuts self.actionStop.setShortcut(Qt.Key_Escape) self.actionBack.setShortcut(QKeySequence.Back) self.actionForward.setShortcut(QKeySequence.Forward) self.actionReload.setShortcut(QKeySequence.Refresh) self.actionHome.setShortcut('Ctrl+Home') self.actionShowMenu.setShortcut('Ctrl+m') self.actionShowToolbar.setShortcut('Ctrl+t') self.actionPrint.setShortcut(QKeySequence.Print) self.backShortcut = QShortcut(self) self.backShortcut.setKey(Qt.Key_Back) self.backShortcut.activated.connect(self.webViewMain.back) self.forwardShortcut = QShortcut(self) self.forwardShortcut.setKey(Qt.Key_Forward) self.forwardShortcut.activated.connect(self.webViewMain.forward) # Set up context menu self.webViewMain.setContextMenuPolicy(Qt.CustomContextMenu) self.webViewMain.customContextMenuRequested.connect(self.showMenu) # Setup statusbar and toolbar for c in self.statusBar().children()[0].children(): c.removeWidget(c) self.statusBar().addPermanentWidget(self.progressBar, 1) self.actionShowToolbar.setChecked(True) self.actionShowMenu.setChecked(True) # Icon if self.desktopEntry.hasKey('Icon'): self.icon = QIcon(self.desktopEntry.get('Icon')) self.setWindowIcon(self.icon) else: self.webViewMain.iconChanged.connect(self.setWindowIcon) # Set up events if self.desktopEntry.get('X-%s-menu-enabled' % APP_NAME) == '0': self.actionShowMenu.setChecked(False) else: self.actionShowMenu.setChecked(True) if self.desktopEntry.get('X-%s-toolbar-enabled' % APP_NAME) == '0': self.actionShowToolbar.setChecked(False) else: self.actionShowToolbar.setChecked(True) self.webViewMain.linkClicked.connect(self._onLinkClick) self.webViewMain.titleChanged.connect(self.setWindowTitle) self.webViewMain.loadProgress.connect(self._setLoadingStatus) self.webViewMain.urlChanged.connect( lambda x: self.urlLineEdit.setText(x.toString())) self.page.printRequested.connect(self._onPrint) self.page.loadFinished.connect(self._loadingFinished) self.actionHome.triggered.connect( lambda x: self.webViewMain.load(QUrl(self.base))) self.actionClose.triggered.connect(self.close) self.actionPrint.triggered.connect(self._onPrint) self.urlLineEdit.returnPressed.connect(self._onUrlEdit) self.actionShowToolbar.triggered.connect(self._onShowToolbar) self.actionShowMenu.triggered.connect(self._onShowMenu) self.actionAbout.triggered.connect(lambda x: about.show(self)) self.actionModifyWebapp.triggered.connect(self._onModify) self._onShowMenu() self._onShowToolbar() try: self.resize(int(self.desktopEntry.getWindowWidth()), int(self.desktopEntry.getWindowHeight())) except (ValueError, TypeError): self.resize(800, 600) # Load first page self.webViewMain.load(QUrl(base)) self.editor = SiteEditorWindow(self.desktopEntry, isNew=False)
def __init__(self, panel = None, *contenu): # parent : wxgeometrie (Frame principal) QMenuBar.__init__(self) self.panel = panel self.parent = panel.parent self.canvas = panel.canvas self.fenetre = self.parent.parent ## self.historique = panel.historique ## self.commande = panel.commande def canparam(parametre): return partial(attrgetter(parametre), self.canvas) IDEM = True # Menus predefinis: self.menus = { "nouveau": [u"Nouveau", u"Créer un nouveau fichier.", u"Ctrl+N", self.parent.NewFile], "ouvrir": [u"Ouvrir", u"Ouvrir un fichier.", u"Ctrl+O", self.parent.OpenFile], "ouvrir ici": [u"Ouvrir ici", u"Essayer d'ouvrir le fichier dans le module courant.", u"Alt+Ctrl+O", self.parent.OpenFileHere], "enregistrer": [u"Enregistrer", u"Enregistrer le document.", u"Ctrl+S", self.parent.SaveFile], "enregistrer_sous": [u"Enregistrer sous...", u"Enregistrer le document sous un nouveau nom.", u"Alt+Ctrl+S", self.parent.SaveFileAs], "exporter": [u"Exporter...", u"Exporter l'image.", u"Ctrl+E", self.parent.ExportFile], "exporter&sauver": [u"Exporter et sauver", u"Exporter l'image, et sauvegarder le document.", u"Alt+Ctrl+E", self.parent.ExportAndSaveFile], ##"mise en page": [u"Paramètres d'impression", u"Régler les paramètres d'impression.", None, self.parent.PageSetup], "session": [u"Sessions", [u'Nouvelle session', u'Réinitialiser la session.', None, self.parent.NouvelleSession], [u'Session précédente', u'Recharger la session précédente.', None, self.parent.ChargerSessionPrecedente], [u'Ouvrir la session...', u'Charger une autre session.', None, self.parent.ChargerSession], [u'Enregistrer sous...', u'Enregistrer la session actuelle.', None, self.parent.SauverSession], ], "imprimer": [u"Imprimer", u"Imprimer la figure géométrique courante.", u"Ctrl+P", self.parent.Printout], "proprietes": [u"Propriétés", u"Modifier les informations relatives au document", None, self.parent.Proprietes], "fermer": [u"Fermer", u"Fermer la feuille courante.", u"Ctrl+W", self.parent.CloseFile], "quitter": [u"Quitter", u"Fermer le programme.", u"Alt+F4", self.parent.parent.close], "onglet": [u"Onglet suivant", u"Changer d'onglet.", u"Ctrl+TAB", self.parent.onglet_suivant], "plein_ecran": [u"Plein écran", u"Passer en mode plein écran ou revenir en mode normal.", u"F11", self.parent.parent.plein_ecran], "debug": [u"Déboguer", u"Déboguer le programme (afficher les erreurs, ...).", None, self.fenetre.mode_debug, self.fenetre.mode_debug], "ligne_commande": [u"Afficher la ligne de commande", u"Afficher la ligne de commande.", None, self.fenetre.afficher_ligne_commande, self.fenetre.afficher_ligne_commande], "options": [u"Options", u"Paramètres du programme.", None, self.parent.Options], "aide": [u"Aide", u"Obtenir de l'aide sur le programme.", None, self.parent.Aide], "infos": [u"Configuration", u"Visualiser la configuration actuelle du système.", None, self.parent.Informations], "contact": [u"Signaler un problème", u"Envoyer un rapport de bug.", None, self.parent.Contacter], "versions": [u"Rechercher des mises à jour", u"Vérifier si une nouvelle version est disponible.", None, self.parent.gestionnaire_de_mises_a_jour.verifier_version], "about": [u"A propos...", u"WxGeometrie (c) 2005-2007 Nicolas Pourcelot - License : GPL version 2", None, self.parent.About], } self.menus["fichier"] = ["Fichier", ["nouveau"], ["ouvrir"], ["ouvrir ici"], None, ["enregistrer"], ["enregistrer_sous"], ["exporter"], ["exporter&sauver"], None, ['session'], None, ["imprimer"], None, ["fermer"], ["quitter"]] self.menus["avance1"] = [u"Avancé", [u"historique"], [u"ligne_commande"], [u"debug"]] self.menus["avance2"] = [u"Avancé", [u"ligne_commande"], ["debug"]] self.menus["?"] = ["?", ["aide"], ["infos"], ["contact"], None, ["versions"], None, ["about"]] if self.canvas: self.menus.update({ "annuler": [u"Annuler", u"Annuler la dernière action.", u"Ctrl+Z", self.panel.annuler], "refaire": [u"Refaire", u"Refait la dernière action annulée.", u"Ctrl+Y", self.panel.retablir], "historique": [u"Contenu interne de la feuille", u"Édition du contenu interne de la feuille.", u"Ctrl+H", self.parent.Histo], "presse-papier": [u"Copier dans le presse-papier", u"Copier l'image dans le presse-papier.", None, self.canvas.Copy_to_Clipboard], "barre_outils": [u"Afficher la barre d'outils", u"Afficher la barre d'outils de dessin en haut de la fenêtre.", None, self.panel.afficher_barre_outils, IDEM], "console_geolib": [u"Afficher la ligne de commande", u"Afficher la ligne de commande en bas de la fenêtre.", None, self.panel.afficher_console_geolib, IDEM], "repere": [u"Afficher le repère", u"Afficher le repère et les axes.", None, self.canvas.gerer_parametre_afficher_axes, canparam("afficher_axes")], "quadrillage": [u"Afficher le quadrillage", u"Afficher le quadrillage.", None, self.canvas.gerer_parametre_afficher_quadrillage, canparam('afficher_quadrillage')], "orthonorme": [u"Repère orthonormé", u"Garder un repère toujours orthonormé.", None, self.canvas.gerer_parametre_orthonorme, canparam('orthonorme')], "aimanter": [u"Aimanter la grille", u"Forcer les points à se placer sur la grille.", None, self.canvas.gerer_parametre_grille_aimantee, canparam('grille_aimantee')], "reperage": [u"Repérage", [u"par des points", u"Repérage par l'origine et 2 points.", None, self.canvas.repere_OIJ], [u"par des vecteurs", u"Repérage par l'origine et les 2 vecteurs de base.", None, self.canvas.repere_Oij], [u"par des valeurs numériques", u"Graduation numérique des axes", None, self.canvas.repere_011], [u"Personnaliser le repère", u"Personnaliser l'affichage du repère, et les graduations", "Ctrl+Alt+R", self.canvas.regler_repere], ], "quadrillages": [u"Quadrillage", [u"Par défaut", u"Rétablir le quadrillage par défaut.", None, self.canvas.quadrillage_defaut], [u"Graduations intermédiaires", u"Ajouter un quadrillage intermédiaire entre deux graduations.", None, self.canvas.quadrillage_demigraduation], [u"Graduations intermédiaires (coloré)", u"jouter un quadrillage intermédiaire entre deux graduations (version colorée).", None, self.canvas.quadrillage_demigraduation_colore], [u"Papier millimétré", u"Créer un papier millimétré.", None, self.canvas.quadrillage_millimetre], [u"Papier millimétré coloré", u"Créer un papier millimétré coloré.", None, self.canvas.quadrillage_millimetre_colore], ], "zoom_texte": [u"Zoom texte", [u"100 %", u"Afficher les textes à leur taille par défaut.", None, partial(self.canvas.zoom_text, valeur=100)], None, [u"50 %", u"Réduire les textes à 50 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=50)], [u"60 %", u"Réduire les textes à 60 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=60)], [u"70 %", u"Réduire les textes à 70 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=70)], [u"80 %", u"Réduire les textes à 80 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=80)], [u"90 %", u"Réduire les textes à 90 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=90)], None, [u"120 %", u"Agrandir les textes à 120 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=120)], [u"140 %", u"Agrandir les textes à 140 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=140)], [u"160 %", u"Agrandir les textes à 160 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=160)], [u"180 %", u"Agrandir les textes à 180 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=180)], [u"200 %", u"Agrandir les textes à 200 % de leur taille.", None, partial(self.canvas.zoom_text, valeur=200)], ], "zoom_ligne": [u"Zoom ligne", [u"100 %", u"Afficher les lignes à leur taille par défaut.", None, partial(self.canvas.zoom_line, valeur=100)], None, [u"50 %", u"Réduire les lignes à 50 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=50)], [u"60 %", u"Réduire les lignes à 60 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=60)], [u"70 %", u"Réduire les lignes à 70 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=70)], [u"80 %", u"Réduire les lignes à 80 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=80)], [u"90 %", u"Réduire les lignes à 90 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=90)], None, [u"120 %", u"Agrandir les lignes à 120 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=120)], [u"140 %", u"Agrandir les lignes à 140 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=140)], [u"160 %", u"Agrandir les lignes à 160 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=160)], [u"180 %", u"Agrandir les lignes à 180 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=180)], [u"200 %", u"Agrandir les lignes à 200 % de leur taille.", None, partial(self.canvas.zoom_line, valeur=200)], ], "zoom_general": [u"Zoom général", [u"Mode normal", u"Affichage par défaut.", None, self.canvas.zoom_normal], [u"Léger grossissement", u"Textes et lignes (un peu) grossis.", None, self.canvas.zoom_large], None, [u"Mode vidéoprojecteur (grossissement)", u"Réglage adapté à la vidéoprojection (textes et lignes grossis).", None, self.canvas. zoom_videoprojecteur], [u"Mode vidéoprojecteur accentué", u"Grossissement très important des objets.", None, self.canvas. zoom_videoprojecteur_large], ], "fenetre": [u"Réglage de la fenêtre", u"Réglage de la fenêtre d'affichage.", u"Alt+Ctrl+F", self.parent.creer["Fenetre"]], "zoomer": [u"Zoomer", u"Se rapprocher de la figure.", u"Ctrl+PGUP", self.canvas.zoom_in], "dezoomer": [u"Dézoomer", u"S'éloigner de la figure.", u"Ctrl+PGDOWN", self.canvas.zoom_out], "orthonormaliser": [u"Orthonormaliser", u"Obtenir un repère orthonormal.", u"Alt+Ctrl+O", self.canvas.orthonormer], "zoom_auto": [u"Zoom intelligent", u"Réglage automatique de la fenêtre d'affichage.", u"Alt+Ctrl+A", self.canvas.zoom_auto], "modifier": [u"Modifier", u"Editer les propriétes d'un ou plusieurs objets géométriques.", u"Ctrl+M", self.parent.editer], "supprimer":[u"Supprimer", u"Supprime un ou plusieurs objets géométriques.", u"Ctrl+DEL", self.parent.supprimer], "coder": [u"Codage automatique", u"Codage automatique de la figure.", u"Alt+Ctrl+C", self.canvas.coder], "decoder": [u"Effacer le codage", u"Supprimer le codage de la figure.", u"Alt+Ctrl+D", self.canvas.decoder], "traces": [u"Effacer les traces", u"Supprimer toutes les traces de la figure (laisse les objets en mode Trace).", None, self.canvas.effacer_traces], ##"detecter": [u"Détecter les objets cachés", u"Signaler la présence des objets cachés au passage du pointeur.", None, self.canvas.detecter_caches, self.canvas.detecter_caches], "detecter": [u"Afficher les objets cachés", u"Afficher en semi-transparent les objets cachés.", None, self.canvas.gerer_parametre_afficher_objets_caches, canparam('afficher_objets_caches')], "nettoyer": [u"Supprimer les objets inutiles", u"Supprimer les objets cachés qui ne servent pas pour la construction.", None, self.canvas.nettoyer_feuille], "animer": [u"Créer une animation", u"Faire varier automatiquement une valeur.", None, self.parent.Animer], "affichage": [u"Affichage", ["onglet"], ["plein_ecran"], None, ["barre_outils"], ["console_geolib"], None, ["repere"], ["quadrillage"], ["orthonorme"], ["reperage"], ["quadrillages"], None, ["zoom_texte"], ["zoom_ligne"], ["zoom_general"], None, ["fenetre"], ["zoomer"], ["dezoomer"], ["orthonormaliser"], [u"zoom_auto"]], "autres": [u"Autres actions", [u"coder"], [u"decoder"], [u"traces"], None, [u"detecter"], [u"nettoyer"], None, [u"animer"], [u"aimanter"]], "creer": [u"Créer", [u"Points", [u"Point libre", u"Point quelconque.", u"Ctrl+L", self.parent.creer["Point"]], [u"Milieu", u"Milieu d'un segment.", None, self.parent.creer["Milieu"]], [u"Barycentre", u"Barycentre de n points.", u"Ctrl+B", self.parent.creer["Barycentre"]], [u"Point final", u"Point défini par une relation vectorielle.", u"Ctrl+F", self.parent.creer["PointFinal"]], [u"Point sur droite", u"Point appartenant à une droite.", None, self.parent.creer["GlisseurDroite"]], [u"Point sur segment", u"Point appartenant à un segment.", None, self.parent.creer["GlisseurSegment"]], [u"Point sur cercle", u"Point appartenant à un cercle.", None, self.parent.creer["GlisseurCercle"]], ], [u"Intersections", [u"Intersection de deux droites", u"Point défini par l'intersection de deux droites (ou demi-droites, ou segments).", u"Ctrl+I", self.parent.creer["InterDroites"]], [u"Intersection d'une droite et d'un cercle", u"Point défini par l'intersection d'une droite et d'un cercle.", u"Alt+Ctrl+I", self.parent.creer["InterDroiteCercle"]], [u"Intersection de deux cercles", u"Point défini par l'intersection de deux cercles (ou arcs de cercles).", None, self.parent.creer["InterCercles"]], ], [u"Centres", [u"Centre d'un cercle", u"Centre d'un cercle.", None, self.parent.creer["Centre"]], [u"Centre de gravité", u"Centre de gravite d'un triangle (intersection des médianes).", None, self.parent.creer["CentreGravite"]], [u"Orthocentre", u"Orthocentre d'un triangle (intersection des hauteurs).", None, self.parent.creer["Orthocentre"]], [u"Centre du cercle circonscrit", u"Centre du cercle circonscrit d'un triangle (intersection des médiatrices).", None, self.parent.creer["CentreCercleCirconscrit"]], [u"Centre du cercle inscrit", u"Centre du cercle inscrit d'un triangle (intersection des bissectrices).", None, self.parent.creer["CentreCercleInscrit"]], ], [u"Lignes", [u"Segment", u"Segment défini par deux points.", u"Ctrl+G", self.parent.creer["Segment"]], None, [u"Droite", u"Droite définie par deux points.", u"Ctrl+D", self.parent.creer["Droite"]], [u"Demi-droite", u"Demi-droite définie par son origine et un autre point.", None, self.parent.creer["Demidroite"]], None, [u"Vecteur", u"Vecteur défini par deux points.", u"Ctrl+U", self.parent.creer["Vecteur"]], [u"Vecteur libre", u"Vecteur défini par ses coordonnées.", None, self.parent.creer["VecteurLibre"]], [u"Representant", u"Représentant d'origine donnée d'un vecteur.", None, self.parent.creer["Representant"]], None, [u"Parallèle", u"Parallèle à une droite passant par un point.", None, self.parent.creer["Parallele"]], [u"Perpendiculaire", u"Perpendiculaire à une droite passant par un point.", None, self.parent.creer["Perpendiculaire"]], [u"Médiatrice", u"Médiatrice d'un segment.", None, self.parent.creer["Mediatrice"]], [u"Bissectrice", u"Bissectrice d'un angle.", None, self.parent.creer["Bissectrice"]], [u"Tangente", u"Tangente à un cercle.", None, self.parent.creer["Tangente"]], ], [u"Cercles", [u"Cercle défini par son centre et un point", u"Cercle défini par son centre et un autre point.", u"Ctrl+K", self.parent.creer["Cercle"]], [u"Cercle défini par son centre et son rayon", u"Cercle défini par son centre et la valeur de son rayon.", u"Ctrl+R", self.parent.creer["CercleRayon"]], [u"Cercle défini par un diamètre", u"Cercle défini par deux points diamétralement opposés.", None, self.parent.creer["CercleDiametre"]], [u"Cercle défini par 3 points", u"Cercle défini par trois points.", None, self.parent.creer["CerclePoints"]], None, [u"Arc de centre donné", u"Arc de sens direct, défini par son centre, son origine, et un autre point.", None, self.parent.creer["ArcCercle"]], [u"Arc défini par 3 points", u"Arc défini par ses extrémités, et un point intermédiaire.", None, self.parent.creer["ArcPoints"]], [u"Arc orienté", u"Arc orienté, défini par ses extrémités, et un point intermédiaire.", None, self.parent.creer["ArcOriente"]], [u"Demi-cercle", u"Demi-cercle de diamètre donné, de sens direct.", None, self.parent.creer["DemiCercle"]], None, [u"Disque", u"Disque circonscrit par un cercle donné.", None, self.parent.creer["Disque"]], ], [u"Polygones", [u"Triangle", u"Triangle défini par ses sommets.", None, self.parent.creer["Triangle"]], [u"Polygone quelconque", u"Polygone quelconque, défini par ses sommets.", None, self.parent.creer["Polygone"]], [u"Parallélogramme", u"Parallélogramme de sens direct défini par 3 sommets.", None, self.parent.creer["Parallelogramme"]], [u"Polygone régulier", u"Polygone régulier de sens direct défini par 2 sommets consécutifs.", None, self.parent.creer["PolygoneRegulier"]], [u"Polygone régulier de centre donné", u"Polygone régulier défini son centre et un sommet.", None, self.parent.creer["PolygoneRegulierCentre"]], ], [u"Interpolation", [u"Interpolation linéaire", u"Ligné brisée reliant les points désignés.", None, self.parent.creer["InterpolationLineaire"]], [u"Interpolation quadratique", u"Courbe lisse (ie. de classe C1) reliant les points désignés.", None, self.parent.creer["InterpolationQuadratique"]], ], [u"Angles", [u"Angle", u"Angle non orienté défini par trois points.", None, self.parent.creer["Angle"]], [u"Angle orienté", u"Angle orienté défini par trois points.", None, self.parent.creer["AngleOriente"]], [u"Angle orienté (non affiché)", u"Angle orienté (non affiché) défini par 2 vecteurs.", None, self.parent.creer["AngleVectoriel"]], [u"Angle libre (non affiché)", u"Angle orienté (non affiché) défini par 2 vecteurs.", None, self.parent.creer["AngleLibre"]], ], [u"Transformations", [u"Translation", u"Translation de vecteur donné.", None, self.parent.creer["Translation"]], [u"Symétrie centrale", u"Symétrie par rapport à un point.", None, self.parent.creer["SymetrieCentrale"]], [u"Symétrie axiale", u"Symétrie par rapport à une droite.", None, self.parent.creer["Reflexion"]], [u"Rotation", u"Rotation de centre et d'angle donnés.", None, self.parent.creer["Rotation"]], [u"Homothétie", u"Translation de vecteur donné.", None, self.parent.creer["Homothetie"]], None, [u"Image par transformation", u"Créer l'image d'un objet par une transformation géométrique.", None, self.parent.creer["Image"]], ], [u"Divers", [u"Texte", u"Champ de texte.", None, self.parent.creer["Texte"]], [u"Variable", u"Variable liée ou non.", None, self.parent.creer["Variable"]], ], ] }) for item in contenu: self.ajouter(*item)
class MainWindow(QMainWindow, object): """ QMainWindow displays pipeline Parameters ---------- port : str used port to communicate with pipeline Note: The firewall must be configure to accept input/output on this port """ def __init__(self, port): super(MainWindow, self).__init__() self.setupUi(port) def setupUi(self, port): self.setObjectName("MainWindow") self.resize(600, 600) self.centralwidget = QWidget(self) p = self.centralwidget.palette() self.centralwidget.setAutoFillBackground(True) p.setColor(self.centralwidget.backgroundRole(), QColor(126, 135, 152)) self.centralwidget.setPalette(p) self.centralwidget.setObjectName("centralwidget") self.gridLayout = QGridLayout(self.centralwidget) self.gridLayout.setObjectName("gridLayout") self.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 808, 25)) self.menubar.setObjectName("menubar") self.menuFile = QMenu(self.menubar) self.menuFile.setObjectName("menuFile") self.setMenuBar(self.menubar) self.statusbar = QStatusBar(self) self.statusbar.setObjectName("statusbar") self.setStatusBar(self.statusbar) self.actionQuit = QAction(self) self.actionQuit.setObjectName("actionQuit") self.menuFile.addSeparator() self.menuFile.addAction(self.actionQuit) self.menubar.addAction(self.menuFile.menuAction()) self.actionReset = QAction(self) self.actionReset.setObjectName("reset") self.menuFile.addSeparator() self.menuFile.addAction(self.actionReset) self.menubar.addAction(self.menuFile.menuAction()) # add other GUI objects self.graph_widget = GraphWidget(self.statusbar) self.gridLayout.addWidget(self.graph_widget, 1, 11, 10, 10) pixmap = QPixmap(':/images/cta-logo-mini.png') lbl = QLabel() lbl.setPixmap(pixmap) self.gridLayout.addWidget(lbl, 0, 0) p = self.graph_widget.palette() self.graph_widget.setAutoFillBackground(True) p.setColor(self.graph_widget.backgroundRole(), QColor(255, 255, 255)) # QColor(226, 235, 252)) self.graph_widget.setPalette(p) self.quitButton = QPushButton() # self.centralwidget) self.quitButton.setObjectName("quitButton") self.quitButton.setText( QApplication.translate("MainWindow", "Quit", None, QApplication.UnicodeUTF8)) self.gridLayout.addWidget(self.quitButton, 12, 0, 1, 1) self.info_label = InfoLabel(0, 4) self.info_label.setAutoFillBackground(True) self.gridLayout.addWidget(self.info_label, 1, 0, 1, 5) #self.info_label.setAlignment(PyQt4.Qt.AlignCenter); palette = QPalette() palette.setColor(self.info_label.backgroundRole(), Qt.lightGray) self.info_label.setPalette(palette) QObject.connect(self.quitButton, SIGNAL("clicked()"), self.stop) QObject.connect(self.actionQuit, SIGNAL("triggered()"), self.stop) QMetaObject.connectSlotsByName(self) self.retranslateUi() QObject.connect(self.actionQuit, SIGNAL("triggered()"), self.close) QMetaObject.connectSlotsByName(self) # Create GuiConnexion for ZMQ comminucation with pipeline self.guiconnection = GuiConnexion(gui_port=port, statusBar=self.statusbar) self.guiconnection.message.connect(self.graph_widget.pipechange) self.guiconnection.message.connect(self.info_label.pipechange) self.guiconnection.reset_message.connect(self.graph_widget.reset) self.guiconnection.reset_message.connect(self.info_label.reset) self.guiconnection.mode_message.connect(self.info_label.mode_receive) QObject.connect(self.actionReset, SIGNAL("triggered()"), self.guiconnection.reset) QMetaObject.connectSlotsByName(self) # start the process self.guiconnection.start() def retranslateUi(self): self.setWindowTitle( QApplication.translate("ctapipe flow based GUI", "ctapipe flow based GUI", None, QApplication.UnicodeUTF8)) self.menuFile.setTitle( QApplication.translate("MainWindow", "File", None, QApplication.UnicodeUTF8)) self.actionQuit.setText( QApplication.translate("MainWindow", "Quit", None, QApplication.UnicodeUTF8)) self.actionReset.setText( QApplication.translate("MainWindow", "Reset", None, QApplication.UnicodeUTF8)) def stop(self): """Method connect (via Qt slot) to exit button Stops self.guiconnection (for ZMQ communication) process. Close main_windows """ self.guiconnection.finish() self.guiconnection.join() self.close() def closeEvent(self, event): self.guiconnection.finish() self.guiconnection.join() event.accept() # let the window close
def setupUi(self): self.setWindowTitle(self.tr("DB Manager")) self.setWindowIcon(QIcon(":/db_manager/icon")) self.resize(QSize(700, 500).expandedTo(self.minimumSizeHint())) # create central tab widget and add the first 3 tabs: info, table and preview self.tabs = QTabWidget() self.info = InfoViewer(self) self.tabs.addTab(self.info, self.tr("Info")) self.table = TableViewer(self) self.tabs.addTab(self.table, self.tr("Table")) self.preview = LayerPreview(self) self.tabs.addTab(self.preview, self.tr("Preview")) self.setCentralWidget(self.tabs) # display close button for all tabs but the first 3 ones, i.e. # HACK: just hide the close button where not needed (GS) self.tabs.setTabsClosable(True) self.tabs.tabCloseRequested.connect(self.close_tab) tabbar = self.tabs.tabBar() for i in range(3): btn = tabbar.tabButton(i, QTabBar.RightSide) if tabbar.tabButton( i, QTabBar.RightSide) else tabbar.tabButton( i, QTabBar.LeftSide) btn.resize(0, 0) btn.hide() # Creates layout for message bar self.layout = QGridLayout(self.info) self.layout.setContentsMargins(0, 0, 0, 0) spacerItem = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) self.layout.addItem(spacerItem, 1, 0, 1, 1) # init messageBar instance self.infoBar = QgsMessageBar(self.info) sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) self.infoBar.setSizePolicy(sizePolicy) self.layout.addWidget(self.infoBar, 0, 0, 1, 1) # create database tree self.dock = QDockWidget("Tree", self) self.dock.setObjectName("DB_Manager_DBView") self.dock.setFeatures(QDockWidget.DockWidgetMovable) self.tree = DBTree(self) self.dock.setWidget(self.tree) self.addDockWidget(Qt.LeftDockWidgetArea, self.dock) # create status bar self.statusBar = QStatusBar(self) self.setStatusBar(self.statusBar) # create menus self.menuBar = QMenuBar(self) self.menuDb = QMenu(self.tr("&Database"), self) self.menuBar.addMenu(self.menuDb) self.menuSchema = QMenu(self.tr("&Schema"), self) actionMenuSchema = self.menuBar.addMenu(self.menuSchema) self.menuTable = QMenu(self.tr("&Table"), self) actionMenuTable = self.menuBar.addMenu(self.menuTable) self.menuHelp = None # QMenu(self.tr("&Help"), self) # actionMenuHelp = self.menuBar.addMenu(self.menuHelp) self.setMenuBar(self.menuBar) # create toolbar self.toolBar = QToolBar("Default", self) self.toolBar.setObjectName("DB_Manager_ToolBar") self.addToolBar(self.toolBar) # create menus' actions # menu DATABASE sep = self.menuDb.addSeparator() sep.setObjectName("DB_Manager_DbMenu_placeholder") sep.setVisible(False) self.actionRefresh = self.menuDb.addAction( QIcon(":/db_manager/actions/refresh"), self.tr("&Refresh"), self.refreshActionSlot, QKeySequence("F5")) self.actionSqlWindow = self.menuDb.addAction( QIcon(":/db_manager/actions/sql_window"), self.tr("&SQL window"), self.runSqlWindow, QKeySequence("F2")) self.menuDb.addSeparator() self.actionClose = self.menuDb.addAction(QIcon(), self.tr("&Exit"), self.close, QKeySequence("CTRL+Q")) # menu SCHEMA sep = self.menuSchema.addSeparator() sep.setObjectName("DB_Manager_SchemaMenu_placeholder") sep.setVisible(False) actionMenuSchema.setVisible(False) # menu TABLE sep = self.menuTable.addSeparator() sep.setObjectName("DB_Manager_TableMenu_placeholder") sep.setVisible(False) self.actionImport = self.menuTable.addAction( QIcon(":/db_manager/actions/import"), self.tr("&Import layer/file"), self.importActionSlot) self.actionExport = self.menuTable.addAction( QIcon(":/db_manager/actions/export"), self.tr("&Export to file"), self.exportActionSlot) self.menuTable.addSeparator() #self.actionShowSystemTables = self.menuTable.addAction(self.tr("Show system tables/views"), self.showSystemTables) #self.actionShowSystemTables.setCheckable(True) #self.actionShowSystemTables.setChecked(True) actionMenuTable.setVisible(False) # add actions to the toolbar self.toolBar.addAction(self.actionRefresh) self.toolBar.addAction(self.actionSqlWindow) self.toolBar.addAction(self.actionImport) self.toolBar.addAction(self.actionExport)
class DBManager(QMainWindow): def __init__(self, iface, parent=None): QMainWindow.__init__(self, parent) self.setAttribute(Qt.WA_DeleteOnClose) self.setupUi() self.iface = iface # restore the window state settings = QSettings() self.restoreGeometry( settings.value("/DB_Manager/mainWindow/geometry", QByteArray(), type=QByteArray)) self.restoreState( settings.value("/DB_Manager/mainWindow/windowState", QByteArray(), type=QByteArray)) self.connect(self.tabs, SIGNAL("currentChanged(int)"), self.tabChanged) self.connect(self.tree, SIGNAL("selectedItemChanged"), self.itemChanged) self.itemChanged(None) def closeEvent(self, e): self.unregisterAllActions() # save the window state settings = QSettings() settings.setValue("/DB_Manager/mainWindow/windowState", self.saveState()) settings.setValue("/DB_Manager/mainWindow/geometry", self.saveGeometry()) QMainWindow.closeEvent(self, e) def refreshItem(self, item=None): QApplication.setOverrideCursor(Qt.WaitCursor) try: if item is None: item = self.tree.currentItem() self.tree.refreshItem(item) # refresh item children in the db tree except BaseError as e: DlgDbError.showError(e, self) return finally: QApplication.restoreOverrideCursor() def itemChanged(self, item): QApplication.setOverrideCursor(Qt.WaitCursor) try: self.reloadButtons() self.refreshTabs() except BaseError as e: DlgDbError.showError(e, self) return finally: QApplication.restoreOverrideCursor() def reloadButtons(self): db = self.tree.currentDatabase() if not hasattr(self, '_lastDb'): self._lastDb = db elif db == self._lastDb: return # remove old actions if self._lastDb is not None: self.unregisterAllActions() # add actions of the selected database self._lastDb = db if self._lastDb is not None: self._lastDb.registerAllActions(self) def tabChanged(self, index): QApplication.setOverrideCursor(Qt.WaitCursor) try: self.refreshTabs() except BaseError as e: DlgDbError.showError(e, self) return finally: QApplication.restoreOverrideCursor() def refreshTabs(self): index = self.tabs.currentIndex() item = self.tree.currentItem() table = self.tree.currentTable() # enable/disable tabs self.tabs.setTabEnabled(self.tabs.indexOf(self.table), table is not None) self.tabs.setTabEnabled( self.tabs.indexOf(self.preview), table is not None and table.type in [table.VectorType, table.RasterType] and table.geomColumn is not None) # show the info tab if the current tab is disabled if not self.tabs.isTabEnabled(index): self.tabs.setCurrentWidget(self.info) current_tab = self.tabs.currentWidget() if current_tab == self.info: self.info.showInfo(item) elif current_tab == self.table: self.table.loadData(item) elif current_tab == self.preview: self.preview.loadPreview(item) def refreshActionSlot(self): self.info.setDirty() self.table.setDirty() self.preview.setDirty() self.refreshItem() def importActionSlot(self): db = self.tree.currentDatabase() if db is None: self.infoBar.pushMessage( self.tr( "No database selected or you are not connected to it."), QgsMessageBar.INFO, self.iface.messageTimeout()) return outUri = db.uri() schema = self.tree.currentSchema() if schema: outUri.setDataSource(schema.name, "", "", "") from .dlg_import_vector import DlgImportVector dlg = DlgImportVector(None, db, outUri, self) dlg.exec_() def exportActionSlot(self): table = self.tree.currentTable() if table is None: self.infoBar.pushMessage( self.tr("Select the table you want export to file."), QgsMessageBar.INFO, self.iface.messageTimeout()) return inLayer = table.toMapLayer() from .dlg_export_vector import DlgExportVector dlg = DlgExportVector(inLayer, table.database(), self) dlg.exec_() inLayer.deleteLater() def runSqlWindow(self): db = self.tree.currentDatabase() if db is None: self.infoBar.pushMessage( self.tr( "No database selected or you are not connected to it."), QgsMessageBar.INFO, self.iface.messageTimeout()) # force displaying of the message, it appears on the first tab (i.e. Info) self.tabs.setCurrentIndex(0) return from dlg_sql_window import DlgSqlWindow query = DlgSqlWindow(self.iface, db, self) dbname = db.connection().connectionName() tabname = self.tr("Query") + u" (%s)" % dbname index = self.tabs.addTab(query, tabname) self.tabs.setTabIcon(index, db.connection().icon()) self.tabs.setCurrentIndex(index) query.nameChanged.connect( functools.partial(self.update_query_tab_name, index, dbname)) def update_query_tab_name(self, index, dbname, queryname): if not queryname: queryname = self.tr("Query") tabname = u"%s (%s)" % (queryname, dbname) self.tabs.setTabText(index, tabname) def showSystemTables(self): self.tree.showSystemTables(self.actionShowSystemTables.isChecked()) def registerAction(self, action, menuName, callback=None): """ register an action to the manager's main menu """ if not hasattr(self, '_registeredDbActions'): self._registeredDbActions = {} if callback is not None: invoke_callback = lambda x: self.invokeCallback(callback) if menuName is None or menuName == "": self.addAction(action) if menuName not in self._registeredDbActions: self._registeredDbActions[menuName] = list() self._registeredDbActions[menuName].append(action) if callback is not None: QObject.connect(action, SIGNAL("triggered(bool)"), invoke_callback) return True # search for the menu actionMenu = None helpMenuAction = None for a in self.menuBar.actions(): if not a.menu() or a.menu().title() != menuName: continue if a.menu() != self.menuHelp: helpMenuAction = a actionMenu = a break # not found, add a new menu before the help menu if actionMenu is None: menu = QMenu(menuName, self) if helpMenuAction is not None: actionMenu = self.menuBar.insertMenu(helpMenuAction, menu) else: actionMenu = self.menuBar.addMenu(menu) menu = actionMenu.menu() menuActions = menu.actions() # get the placeholder's position to insert before it pos = 0 for pos in range(len(menuActions)): if menuActions[pos].isSeparator() and menuActions[pos].objectName( ).endswith("_placeholder"): menuActions[pos].setVisible(True) break if pos < len(menuActions): before = menuActions[pos] menu.insertAction(before, action) else: menu.addAction(action) actionMenu.setVisible(True) # show the menu if menuName not in self._registeredDbActions: self._registeredDbActions[menuName] = list() self._registeredDbActions[menuName].append(action) if callback is not None: QObject.connect(action, SIGNAL("triggered(bool)"), invoke_callback) return True def invokeCallback(self, callback, *params): """ Call a method passing the selected item in the database tree, the sender (usually a QAction), the plugin mainWindow and optionally additional parameters. This method takes care to override and restore the cursor, but also catches exceptions and displays the error dialog. """ QApplication.setOverrideCursor(Qt.WaitCursor) try: callback(self.tree.currentItem(), self.sender(), self, *params) except BaseError as e: # catch database errors and display the error dialog DlgDbError.showError(e, self) return finally: QApplication.restoreOverrideCursor() def unregisterAction(self, action, menuName): if not hasattr(self, '_registeredDbActions'): return if menuName is None or menuName == "": self.removeAction(action) if menuName in self._registeredDbActions: if self._registeredDbActions[menuName].count(action) > 0: self._registeredDbActions[menuName].remove(action) action.deleteLater() return True for a in self.menuBar.actions(): if not a.menu() or a.menu().title() != menuName: continue menu = a.menu() menuActions = menu.actions() menu.removeAction(action) if menu.isEmpty(): # hide the menu a.setVisible(False) if menuName in self._registeredDbActions: if self._registeredDbActions[menuName].count(action) > 0: self._registeredDbActions[menuName].remove(action) # hide the placeholder if there're no other registered actions if len(self._registeredDbActions[menuName]) <= 0: for i in range(len(menuActions)): if menuActions[i].isSeparator() and menuActions[ i].objectName().endswith("_placeholder"): menuActions[i].setVisible(False) break action.deleteLater() return True return False def unregisterAllActions(self): if not hasattr(self, '_registeredDbActions'): return for menuName in self._registeredDbActions: for action in list(self._registeredDbActions[menuName]): self.unregisterAction(action, menuName) del self._registeredDbActions def close_tab(self, index): widget = self.tabs.widget(index) if widget not in [self.info, self.table, self.preview]: self.tabs.removeTab(index) widget.deleteLater() def setupUi(self): self.setWindowTitle(self.tr("DB Manager")) self.setWindowIcon(QIcon(":/db_manager/icon")) self.resize(QSize(700, 500).expandedTo(self.minimumSizeHint())) # create central tab widget and add the first 3 tabs: info, table and preview self.tabs = QTabWidget() self.info = InfoViewer(self) self.tabs.addTab(self.info, self.tr("Info")) self.table = TableViewer(self) self.tabs.addTab(self.table, self.tr("Table")) self.preview = LayerPreview(self) self.tabs.addTab(self.preview, self.tr("Preview")) self.setCentralWidget(self.tabs) # display close button for all tabs but the first 3 ones, i.e. # HACK: just hide the close button where not needed (GS) self.tabs.setTabsClosable(True) self.tabs.tabCloseRequested.connect(self.close_tab) tabbar = self.tabs.tabBar() for i in range(3): btn = tabbar.tabButton(i, QTabBar.RightSide) if tabbar.tabButton( i, QTabBar.RightSide) else tabbar.tabButton( i, QTabBar.LeftSide) btn.resize(0, 0) btn.hide() # Creates layout for message bar self.layout = QGridLayout(self.info) self.layout.setContentsMargins(0, 0, 0, 0) spacerItem = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) self.layout.addItem(spacerItem, 1, 0, 1, 1) # init messageBar instance self.infoBar = QgsMessageBar(self.info) sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) self.infoBar.setSizePolicy(sizePolicy) self.layout.addWidget(self.infoBar, 0, 0, 1, 1) # create database tree self.dock = QDockWidget("Tree", self) self.dock.setObjectName("DB_Manager_DBView") self.dock.setFeatures(QDockWidget.DockWidgetMovable) self.tree = DBTree(self) self.dock.setWidget(self.tree) self.addDockWidget(Qt.LeftDockWidgetArea, self.dock) # create status bar self.statusBar = QStatusBar(self) self.setStatusBar(self.statusBar) # create menus self.menuBar = QMenuBar(self) self.menuDb = QMenu(self.tr("&Database"), self) self.menuBar.addMenu(self.menuDb) self.menuSchema = QMenu(self.tr("&Schema"), self) actionMenuSchema = self.menuBar.addMenu(self.menuSchema) self.menuTable = QMenu(self.tr("&Table"), self) actionMenuTable = self.menuBar.addMenu(self.menuTable) self.menuHelp = None # QMenu(self.tr("&Help"), self) # actionMenuHelp = self.menuBar.addMenu(self.menuHelp) self.setMenuBar(self.menuBar) # create toolbar self.toolBar = QToolBar("Default", self) self.toolBar.setObjectName("DB_Manager_ToolBar") self.addToolBar(self.toolBar) # create menus' actions # menu DATABASE sep = self.menuDb.addSeparator() sep.setObjectName("DB_Manager_DbMenu_placeholder") sep.setVisible(False) self.actionRefresh = self.menuDb.addAction( QIcon(":/db_manager/actions/refresh"), self.tr("&Refresh"), self.refreshActionSlot, QKeySequence("F5")) self.actionSqlWindow = self.menuDb.addAction( QIcon(":/db_manager/actions/sql_window"), self.tr("&SQL window"), self.runSqlWindow, QKeySequence("F2")) self.menuDb.addSeparator() self.actionClose = self.menuDb.addAction(QIcon(), self.tr("&Exit"), self.close, QKeySequence("CTRL+Q")) # menu SCHEMA sep = self.menuSchema.addSeparator() sep.setObjectName("DB_Manager_SchemaMenu_placeholder") sep.setVisible(False) actionMenuSchema.setVisible(False) # menu TABLE sep = self.menuTable.addSeparator() sep.setObjectName("DB_Manager_TableMenu_placeholder") sep.setVisible(False) self.actionImport = self.menuTable.addAction( QIcon(":/db_manager/actions/import"), self.tr("&Import layer/file"), self.importActionSlot) self.actionExport = self.menuTable.addAction( QIcon(":/db_manager/actions/export"), self.tr("&Export to file"), self.exportActionSlot) self.menuTable.addSeparator() #self.actionShowSystemTables = self.menuTable.addAction(self.tr("Show system tables/views"), self.showSystemTables) #self.actionShowSystemTables.setCheckable(True) #self.actionShowSystemTables.setChecked(True) actionMenuTable.setVisible(False) # add actions to the toolbar self.toolBar.addAction(self.actionRefresh) self.toolBar.addAction(self.actionSqlWindow) self.toolBar.addAction(self.actionImport) self.toolBar.addAction(self.actionExport)
# coding: utf-8 from PyQt4.QtGui import QDialog, QMenu, QMenuBar, QVBoxLayout from qgis.core import QgsColorSchemeRegistry, QgsCustomColorScheme from qgis.gui import QgsColorSwatchGridAction new_dialog = QDialog() main_layout = QVBoxLayout() menu_bar = QMenuBar() menu = QMenu(u"Test") color_scheme_registry = QgsColorSchemeRegistry.instance() schemes = color_scheme_registry.schemes() project_scheme = [s for s in schemes if isinstance(s, QgsCustomColorScheme)][0] color_swatch_grid_action = QgsColorSwatchGridAction(project_scheme, menu) menu.addAction(color_swatch_grid_action) menu_bar.addMenu(menu) main_layout.setMenuBar(menu_bar) new_dialog.setLayout(main_layout) new_dialog.show()
def _setupMenu(self): self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 630, 22)) self.menuFile = QMenu(self.menubar) self.menuFile.setTitle(tr("File")) self.menuMark = QMenu(self.menubar) self.menuMark.setTitle(tr("Mark")) self.menuActions = QMenu(self.menubar) self.menuActions.setTitle(tr("Actions")) self.menuColumns = QMenu(self.menubar) self.menuColumns.setTitle(tr("Columns")) self.menuView = QMenu(self.menubar) self.menuView.setTitle(tr("View")) self.menuHelp = QMenu(self.menubar) self.menuHelp.setTitle(tr("Help")) self.setMenuBar(self.menubar) self.menuActions.addAction(self.actionDeleteMarked) self.menuActions.addAction(self.actionMoveMarked) self.menuActions.addAction(self.actionCopyMarked) self.menuActions.addAction(self.actionRemoveMarked) self.menuActions.addAction(self.actionReprioritize) self.menuActions.addSeparator() self.menuActions.addAction(self.actionRemoveSelected) self.menuActions.addAction(self.actionIgnoreSelected) self.menuActions.addAction(self.actionMakeSelectedReference) self.menuActions.addSeparator() self.menuActions.addAction(self.actionOpenSelected) self.menuActions.addAction(self.actionRevealSelected) self.menuActions.addAction(self.actionInvokeCustomCommand) self.menuActions.addAction(self.actionRenameSelected) self.menuMark.addAction(self.actionMarkAll) self.menuMark.addAction(self.actionMarkNone) self.menuMark.addAction(self.actionInvertMarking) self.menuMark.addAction(self.actionMarkSelected) self.menuView.addAction(self.actionPowerMarker) self.menuView.addAction(self.actionDelta) self.menuView.addSeparator() self.menuView.addAction(self.actionDetails) self.menuView.addAction(self.app.actionIgnoreList) self.menuView.addAction(self.app.actionPreferences) self.menuHelp.addAction(self.app.actionShowHelp) self.menuHelp.addAction(self.app.actionCheckForUpdate) self.menuHelp.addAction(self.app.actionOpenDebugLog) self.menuHelp.addAction(self.app.actionAbout) self.menuFile.addAction(self.actionSaveResults) self.menuFile.addAction(self.actionExportToHTML) self.menuFile.addAction(self.actionExportToCSV) self.menuFile.addSeparator() self.menuFile.addAction(self.app.actionQuit) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuMark.menuAction()) self.menubar.addAction(self.menuActions.menuAction()) self.menubar.addAction(self.menuColumns.menuAction()) self.menubar.addAction(self.menuView.menuAction()) self.menubar.addAction(self.menuHelp.menuAction()) # Columns menu menu = self.menuColumns self._column_actions = [] for index, (display, visible) in enumerate(self.app.model.result_table.columns.menu_items()): action = menu.addAction(display) action.setCheckable(True) action.setChecked(visible) action.item_index = index self._column_actions.append(action) menu.addSeparator() action = menu.addAction(tr("Reset to Defaults")) action.item_index = -1 # Action menu actionMenu = QMenu(tr("Actions"), self.menubar) actionMenu.addAction(self.actionDeleteMarked) actionMenu.addAction(self.actionMoveMarked) actionMenu.addAction(self.actionCopyMarked) actionMenu.addAction(self.actionRemoveMarked) actionMenu.addSeparator() actionMenu.addAction(self.actionRemoveSelected) actionMenu.addAction(self.actionIgnoreSelected) actionMenu.addAction(self.actionMakeSelectedReference) actionMenu.addSeparator() actionMenu.addAction(self.actionOpenSelected) actionMenu.addAction(self.actionRevealSelected) actionMenu.addAction(self.actionInvokeCustomCommand) actionMenu.addAction(self.actionRenameSelected) self.actionActions.setMenu(actionMenu) self.actionsButton.setMenu(self.actionActions.menu())
def _setupUi(self): # has to take place *before* base elements creation self.setWindowTitle("moneyGuru") self.resize(700, 580) self.centralwidget = QtGui.QWidget(self) self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget) self.verticalLayout.setSpacing(0) self.verticalLayout.setMargin(0) self.topBar = QtGui.QWidget(self.centralwidget) self.horizontalLayout_2 = QHBoxLayout(self.topBar) self.horizontalLayout_2.setContentsMargins(2, 0, 2, 0) spacerItem = QtGui.QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem) self.dateRangeSelectorView = DateRangeSelectorView(self.topBar) self.dateRangeSelectorView.setMinimumSize(QSize(220, 0)) self.horizontalLayout_2.addWidget(self.dateRangeSelectorView) spacerItem1 = QtGui.QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem1) self.searchLineEdit = SearchEdit(self.topBar) self.searchLineEdit.setMaximumSize(QSize(240, 16777215)) self.horizontalLayout_2.addWidget(self.searchLineEdit) self.verticalLayout.addWidget(self.topBar) self.tabBar = QTabBar(self.centralwidget) self.tabBar.setMinimumSize(QSize(0, 20)) self.verticalLayout.addWidget(self.tabBar) self.mainView = QtGui.QStackedWidget(self.centralwidget) self.verticalLayout.addWidget(self.mainView) # Bottom buttons & status label self.bottomBar = QtGui.QWidget(self.centralwidget) self.horizontalLayout = QHBoxLayout(self.bottomBar) self.horizontalLayout.setMargin(2) self.horizontalLayout.setMargin(0) self.newItemButton = QPushButton(self.bottomBar) buttonSizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed) buttonSizePolicy.setHorizontalStretch(0) buttonSizePolicy.setVerticalStretch(0) buttonSizePolicy.setHeightForWidth(self.newItemButton.sizePolicy().hasHeightForWidth()) self.newItemButton.setSizePolicy(buttonSizePolicy) self.newItemButton.setIcon(QIcon(QPixmap(':/plus_8'))) self.horizontalLayout.addWidget(self.newItemButton) self.deleteItemButton = QPushButton(self.bottomBar) self.deleteItemButton.setSizePolicy(buttonSizePolicy) self.deleteItemButton.setIcon(QIcon(QPixmap(':/minus_8'))) self.horizontalLayout.addWidget(self.deleteItemButton) self.editItemButton = QPushButton(self.bottomBar) self.editItemButton.setSizePolicy(buttonSizePolicy) self.editItemButton.setIcon(QIcon(QPixmap(':/info_gray_12'))) self.horizontalLayout.addWidget(self.editItemButton) self.horizontalLayout.addItem(horizontalSpacer(size=20)) self.graphVisibilityButton = QPushButton() self.graphVisibilityButton.setSizePolicy(buttonSizePolicy) self.graphVisibilityButton.setIcon(QIcon(QPixmap(':/graph_visibility_on_16'))) self.horizontalLayout.addWidget(self.graphVisibilityButton) self.piechartVisibilityButton = QPushButton() self.piechartVisibilityButton.setSizePolicy(buttonSizePolicy) self.piechartVisibilityButton.setIcon(QIcon(QPixmap(':/piechart_visibility_on_16'))) self.horizontalLayout.addWidget(self.piechartVisibilityButton) self.columnsVisibilityButton = QPushButton() self.columnsVisibilityButton.setSizePolicy(buttonSizePolicy) self.columnsVisibilityButton.setIcon(QIcon(QPixmap(':/columns_16'))) self.horizontalLayout.addWidget(self.columnsVisibilityButton) self.statusLabel = QtGui.QLabel(tr("Status")) self.statusLabel.setAlignment(Qt.AlignCenter) self.horizontalLayout.addWidget(self.statusLabel) self.verticalLayout.addWidget(self.bottomBar) self.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 700, 20)) self.menuFile = QMenu(tr("File")) self.menuOpenRecent = QMenu(tr("Open Recent")) self.menuView = QMenu(tr("View")) self.menuDateRange = QMenu(tr("Date Range")) self.menuEdit = QMenu(tr("Edit")) self.menuHelp = QMenu(tr("Help")) self.setMenuBar(self.menubar) self.actionOpenDocument = QAction(tr("Open..."), self) self.actionOpenDocument.setShortcut("Ctrl+O") self.actionShowNetWorth = QAction(tr("Net Worth"), self) self.actionShowNetWorth.setShortcut("Ctrl+1") self.actionShowNetWorth.setIcon(QIcon(QPixmap(':/balance_sheet_48'))) self.actionShowProfitLoss = QAction(escapeamp(tr("Profit & Loss")), self) self.actionShowProfitLoss.setShortcut("Ctrl+2") self.actionShowProfitLoss.setIcon(QIcon(QPixmap(':/income_statement_48'))) self.actionShowTransactions = QAction(tr("Transactions"), self) self.actionShowTransactions.setShortcut("Ctrl+3") self.actionShowTransactions.setIcon(QIcon(QPixmap(':/transaction_table_48'))) self.actionShowSelectedAccount = QAction(tr("Show Account"), self) self.actionShowSelectedAccount.setShortcut("Ctrl+]") self.actionNewItem = QAction(tr("New Item"), self) self.actionNewItem.setShortcut("Ctrl+N") self.actionDeleteItem = QAction(tr("Remove Selected"), self) self.actionEditItem = QAction(tr("Show Info"), self) self.actionEditItem.setShortcut("Ctrl+I") self.actionToggleGraph = QAction(tr("Toggle Graph"), self) self.actionToggleGraph.setShortcut("Ctrl+Alt+G") self.actionTogglePieChart = QAction(tr("Toggle Pie Chart"), self) self.actionTogglePieChart.setShortcut("Ctrl+Alt+P") self.actionMoveUp = QAction(tr("Move Up"), self) self.actionMoveUp.setShortcut("Ctrl++") self.actionMoveDown = QAction(tr("Move Down"), self) self.actionMoveDown.setShortcut("Ctrl+-") self.actionNavigateBack = QAction(tr("Go Back"), self) self.actionNavigateBack.setShortcut("Ctrl+[") self.actionNewAccountGroup = QAction(tr("New Account Group"), self) self.actionNewAccountGroup.setShortcut("Ctrl+Shift+N") self.actionShowNextView = QAction(tr("Next View"), self) self.actionShowNextView.setShortcut("Ctrl+Shift+]") self.actionShowPreviousView = QAction(tr("Previous View"), self) self.actionShowPreviousView.setShortcut("Ctrl+Shift+[") self.actionNewDocument = QAction(tr("New Document"), self) self.actionOpenExampleDocument = QAction(tr("Open Example Document"), self) self.actionOpenPluginFolder = QAction(tr("Open Plugin Folder"), self) self.actionImport = QAction(tr("Import..."), self) self.actionImport.setShortcut("Ctrl+Alt+I") self.actionExport = QAction(tr("Export..."), self) self.actionExport.setShortcut("Ctrl+Alt+E") self.actionSave = QAction(tr("Save"), self) self.actionSave.setShortcut("Ctrl+S") self.actionSaveAs = QAction(tr("Save As..."), self) self.actionSaveAs.setShortcut("Ctrl+Shift+S") self.actionAbout = QAction(tr("About moneyGuru"), self) self.actionToggleReconciliationMode = QAction(tr("Toggle Reconciliation Mode"), self) self.actionToggleReconciliationMode.setShortcut("Ctrl+Shift+R") self.actionToggleAccountExclusion = QAction(tr("Toggle Exclusion Status of Account"), self) self.actionToggleAccountExclusion.setShortcut("Ctrl+Shift+X") self.actionShowSchedules = QAction(tr("Schedules"), self) self.actionShowSchedules.setShortcut("Ctrl+4") self.actionShowSchedules.setIcon(QIcon(QPixmap(':/schedules_48'))) self.actionShowBudgets = QAction(tr("Budgets"), self) self.actionShowBudgets.setShortcut("Ctrl+5") self.actionShowBudgets.setIcon(QIcon(QPixmap(':/budget_48'))) self.actionReconcileSelected = QAction(tr("Reconcile Selection"), self) self.actionReconcileSelected.setShortcut("Ctrl+R") self.actionMakeScheduleFromSelected = QAction(tr("Make Schedule from Selected"), self) self.actionMakeScheduleFromSelected.setShortcut("Ctrl+M") self.actionShowPreferences = QAction(tr("Preferences..."), self) self.actionPrint = QAction(tr("Print..."), self) self.actionPrint.setShortcut("Ctrl+P") self.actionQuit = QAction(tr("Quit moneyGuru"), self) self.actionQuit.setShortcut("Ctrl+Q") self.actionUndo = QAction(tr("Undo"), self) self.actionUndo.setShortcut("Ctrl+Z") self.actionRedo = QAction(tr("Redo"), self) self.actionRedo.setShortcut("Ctrl+Y") self.actionShowHelp = QAction(tr("moneyGuru Help"), self) self.actionShowHelp.setShortcut("F1") self.actionCheckForUpdate = QAction(tr("Check for update"), self) self.actionOpenDebugLog = QAction(tr("Open Debug Log"), self) self.actionDuplicateTransaction = QAction(tr("Duplicate Transaction"), self) self.actionDuplicateTransaction.setShortcut("Ctrl+D") self.actionJumpToAccount = QAction(tr("Jump to Account..."), self) self.actionJumpToAccount.setShortcut("Ctrl+Shift+A") self.actionNewTab = QAction(tr("New Tab"), self) self.actionNewTab.setShortcut("Ctrl+T") self.actionCloseTab = QAction(tr("Close Tab"), self) self.actionCloseTab.setShortcut("Ctrl+W") self.menuFile.addAction(self.actionNewDocument) self.menuFile.addAction(self.actionNewTab) self.menuFile.addAction(self.actionOpenDocument) self.menuFile.addAction(self.menuOpenRecent.menuAction()) self.menuFile.addAction(self.actionOpenExampleDocument) self.menuFile.addAction(self.actionOpenPluginFolder) self.menuFile.addAction(self.actionImport) self.menuFile.addSeparator() self.menuFile.addAction(self.actionCloseTab) self.menuFile.addAction(self.actionSave) self.menuFile.addAction(self.actionSaveAs) self.menuFile.addAction(self.actionExport) self.menuFile.addAction(self.actionPrint) self.menuFile.addAction(self.actionQuit) self.menuView.addAction(self.actionShowNetWorth) self.menuView.addAction(self.actionShowProfitLoss) self.menuView.addAction(self.actionShowTransactions) self.menuView.addAction(self.actionShowSchedules) self.menuView.addAction(self.actionShowBudgets) self.menuView.addAction(self.actionShowPreviousView) self.menuView.addAction(self.actionShowNextView) self.menuView.addAction(self.menuDateRange.menuAction()) self.menuView.addAction(self.actionShowPreferences) self.menuView.addAction(self.actionToggleGraph) self.menuView.addAction(self.actionTogglePieChart) self.menuEdit.addAction(self.actionNewItem) self.menuEdit.addAction(self.actionNewAccountGroup) self.menuEdit.addAction(self.actionDeleteItem) self.menuEdit.addAction(self.actionEditItem) self.menuEdit.addSeparator() self.menuEdit.addAction(self.actionMoveUp) self.menuEdit.addAction(self.actionMoveDown) self.menuEdit.addAction(self.actionDuplicateTransaction) self.menuEdit.addAction(self.actionMakeScheduleFromSelected) self.menuEdit.addAction(self.actionReconcileSelected) self.menuEdit.addAction(self.actionToggleReconciliationMode) self.menuEdit.addAction(self.actionToggleAccountExclusion) self.menuEdit.addSeparator() self.menuEdit.addAction(self.actionShowSelectedAccount) self.menuEdit.addAction(self.actionNavigateBack) self.menuEdit.addAction(self.actionJumpToAccount) self.menuEdit.addSeparator() self.menuEdit.addAction(self.actionUndo) self.menuEdit.addAction(self.actionRedo) self.menuHelp.addAction(self.actionShowHelp) self.menuHelp.addAction(self.actionCheckForUpdate) self.menuHelp.addAction(self.actionOpenDebugLog) self.menuHelp.addAction(self.actionAbout) mainmenus = [self.menuFile, self.menuEdit, self.menuView, self.menuHelp] for menu in mainmenus: self.menubar.addAction(menu.menuAction()) setAccelKeys(menu) setAccelKeys(self.menubar) self.tabBar.setMovable(True) self.tabBar.setTabsClosable(True) seq = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_Right) self._shortcutNextTab = QShortcut(seq, self) seq = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_Left) self._shortcutPrevTab = QShortcut(seq, self) # Linux setup if ISLINUX: self.actionCheckForUpdate.setVisible(False) # This only works on Windows
class RoadnetToolbar(object): """ Toolbar for roadnet """ sb_btn = None street_sel_btn = None sb_icon = None ss_off_icon = None ss_on_icon = None rn_menu = None exp_menu = None admin_menu = None ramp_menu = None mcl_auto_number_btn = None mcl_auto_number_on_icon = None mcl_auto_number_off_icon = None mcl_select_btn = None mcl_select_on_icon = None mcl_select_off_icon = None rdpoly_select_btn = None rdpoly_select_on_icon = None rdpoly_select_off_icon = None start_rn = None stop_rn = None change_db_path = None settings = None create_restore = None change_pwd = None help = None exp_lgs = None exp_srwr = None exp_lsg_shp = None exp_maintain_poly = None exp_list_roads = None meta_menu = None edit_lsg_lu = None edit_srwr_lu = None validation_rpt = None street_rpt = None clean_rdpoly = None load_layers = None road_length = None export_wdm = None ramp_validation = None about = None def __init__(self, iface, plugin_dir, with_ramp): """ Initial setup of toolbar (pre-login) """ self.iface = iface self.plugin_dir = plugin_dir self.with_ramp = with_ramp self.canvas = self.iface.mapCanvas() # Create toolbar self.toolbar = self.iface.addToolBar(u'Roadnet') self.toolbar.setObjectName(u'Roadnet') # Create menubar self.menubar = QMenuBar() self.define_button_icons_and_actions() self.populate_menubar() # Add menubar to toolbar self.toolbar.addWidget(self.menubar) self.toolbar.setIconSize(QSize(100, 100)) # Set initial state self.set_state('init') def define_button_icons_and_actions(self): # Top level buttons # Street Browser button self.sb_icon = QIcon(os.path.join(self.plugin_dir, "image", "sb_icon.png")) self.sb_btn = QAction(self.sb_icon, "w", self.iface.mainWindow()) self.sb_btn.setToolTip("Street Browser") self.sb_btn.hovered.connect(lambda: self._actionHovered(self.sb_btn)) # Street selector button self.ss_off_icon = QIcon( os.path.join(self.plugin_dir, "image", "ss_off_icon.png")) self.ss_on_icon = QIcon( os.path.join(self.plugin_dir, "image", "ss_on_icon.png")) self.street_sel_btn = QAction(self.ss_off_icon, "OFF", self.menubar) self.street_sel_btn.setToolTip("Street Selector") self.street_sel_btn.hovered.connect(lambda: self._actionHovered(self.street_sel_btn)) # Setup RAMP buttons if required if self.with_ramp: self.define_ramp_button_icons_and_actions() def define_ramp_button_icons_and_actions(self): # Select MCL section button self.mcl_select_on_icon = QIcon(os.path.join(self.plugin_dir, "image", "edit_mcl_on_icon.png")) self.mcl_select_off_icon = QIcon(os.path.join(self.plugin_dir, "image", "edit_mcl_off_icon.png")) self.mcl_select_btn = QAction(self.mcl_select_off_icon, "", self.iface.mainWindow()) self.mcl_select_btn.setToolTip("Select MCL section") self.mcl_select_btn.hovered.connect( lambda: self._actionHovered(self.mcl_select_btn)) # MCL auto numbering tool button self.mcl_auto_number_on_icon = QIcon(os.path.join(self.plugin_dir, "image", "number_mcls_on_icon.png")) self.mcl_auto_number_off_icon = QIcon(os.path.join(self.plugin_dir, "image", "number_mcls_off_icon.png")) self.mcl_auto_number_btn = QAction(self.mcl_auto_number_off_icon, "", self.iface.mainWindow()) self.mcl_auto_number_btn.setToolTip("Auto number MCL sections") self.mcl_auto_number_btn.hovered.connect( lambda: self._actionHovered(self.mcl_auto_number_btn)) # Select feature button self.rdpoly_select_on_icon = QIcon(os.path.join(self.plugin_dir, "image", "edit_poly_on_icon.png")) self.rdpoly_select_off_icon = QIcon(os.path.join(self.plugin_dir, "image", "edit_poly_off_icon.png")) self.rdpoly_select_btn = QAction(self.rdpoly_select_off_icon, "", self.iface.mainWindow()) self.rdpoly_select_btn.setToolTip("Select RAMP polygon") self.rdpoly_select_btn.hovered.connect( lambda: self._actionHovered(self.rdpoly_select_btn)) def populate_menubar(self): # Top level menu items + add buttons self.rn_menu = self.menubar.addMenu("roadNet") self.add_roadnet_menu_items() self.menubar.addActions([self.street_sel_btn, self.sb_btn]) self.exp_menu = self.menubar.addMenu("Export") self.add_export_menu_items() self.admin_menu = self.menubar.addMenu("Admin") self.add_admin_menu_items() if self.with_ramp: self.ramp_menu = self.menubar.addMenu("RAMP") self.add_ramp_menu_items() self.menubar.addActions([self.mcl_select_btn, self.mcl_auto_number_btn, self.rdpoly_select_btn]) def add_roadnet_menu_items(self): # Add actions to Roadnet menu self.start_rn = self.rn_menu.addAction("Start roadNet") self.stop_rn = self.rn_menu.addAction("Stop roadNet") self.rn_menu.addSeparator() self.change_db_path = self.rn_menu.addAction("Change Database Location") self.settings = self.rn_menu.addAction("Settings") self.rn_menu.addSeparator() self.create_restore = self.rn_menu.addAction("Create Restore Point") self.change_pwd = self.rn_menu.addAction("Change Password") self.rn_menu.addSeparator() self.help = self.rn_menu.addAction("Help") self.about = self.rn_menu.addAction("About") def add_export_menu_items(self): # Add actions to Export menu self.exp_lgs = self.exp_menu.addAction("Export LSG") self.exp_srwr = self.exp_menu.addAction("Export SRWR") self.exp_menu.addSeparator() self.exp_lsg_shp = self.exp_menu.addAction("Export LSG Shapes") self.exp_maintain_poly = self.exp_menu.addAction( "Export Maintenance Polygons") self.exp_menu.addSeparator() self.exp_list_roads = self.exp_menu.addAction("List of Roads") def add_admin_menu_items(self): """ Add actions to the admin menu. """ self.meta_menu = self.admin_menu.addAction("Metadata") self.admin_menu.addSeparator() self.edit_lsg_lu = self.admin_menu.addAction("Edit LSG Lookups") self.edit_srwr_lu = self.admin_menu.addAction("Edit SRWR Lookups") self.admin_menu.addSeparator() self.validation_rpt = self.admin_menu.addAction("Validation Report") self.street_rpt = self.admin_menu.addAction("Street Reports") self.admin_menu.addSeparator() self.clean_rdpoly = self.admin_menu.addAction("Update Symbology") self.sb_btn.setEnabled(True) def add_ramp_menu_items(self): """ Create actions that appear as items in RAMP menu """ self.load_layers = self.ramp_menu.addAction("Load RAMP/MCL layers") self.ramp_menu.addSeparator() self.road_length = self.ramp_menu.addAction("Road length report") self.export_wdm = self.ramp_menu.addAction("Export for WDM") def set_state(self, role): """ Set toolbar state, i.e. which buttons are enabled, based on user role. :param role: String from ['init', 'editor', 'readonly'] """ # Define buttons used in each mode roadnet_buttons = [self.start_rn, self.stop_rn, self.create_restore, self.change_db_path, self.change_pwd, self.settings, self.street_sel_btn, self.sb_btn, self.exp_menu, self.admin_menu, self.meta_menu, self.edit_lsg_lu, self.edit_srwr_lu, self.validation_rpt, self.street_rpt, self.help, self.about] ramp_buttons = [self.ramp_menu, self.mcl_select_btn, self.mcl_auto_number_btn, self.rdpoly_select_btn] init = [self.start_rn, self.change_db_path, self.about, self.help] readonly = [self.stop_rn, self.street_sel_btn, self.sb_btn, self.exp_menu, self.admin_menu, self.meta_menu, self.validation_rpt, self.street_rpt, self.settings, self.create_restore, self.help, self.about] if self.with_ramp: roadnet_buttons += ramp_buttons readonly += ramp_buttons editor = readonly + [self.create_restore, self.change_pwd, self.edit_lsg_lu, self.edit_srwr_lu] # Disable all buttons for button in roadnet_buttons: button.setEnabled(False) # Enable required buttons if role == 'init': for button in init: button.setEnabled(True) if role == 'readonly': for button in readonly: button.setEnabled(True) if role == 'editor': for button in editor: button.setEnabled(True) def street_sel_icon_state(self, state): """ Change the text/icon of the street selector button to reflect state """ if state == 'on': self.street_sel_btn.setText('on') self.street_sel_btn.setIcon(self.ss_on_icon) if state == 'off': self.street_sel_btn.setText('off') self.street_sel_btn.setIcon(self.ss_off_icon) def mcl_selector_icon_state(self, state): """ Change the text/icon of the street selector button to reflect state """ if state == 'on': self.mcl_select_btn.setText('on') self.mcl_select_btn.setIcon(self.mcl_select_on_icon) if state == 'off': self.mcl_select_btn.setText('off') self.mcl_select_btn.setIcon(self.mcl_select_off_icon) def rdpoly_selector_icon_state(self, state): """ Change the text/icon of the street selector button to reflect state """ if state == 'on': self.rdpoly_select_btn.setText('on') self.rdpoly_select_btn.setIcon(self.rdpoly_select_on_icon) if state == 'off': self.rdpoly_select_btn.setText('off') self.rdpoly_select_btn.setIcon(self.rdpoly_select_off_icon) def _actionHovered(self, action): tip = action.toolTip() QToolTip.showText(QCursor.pos(), tip)
class MainWindow(QMainWindow): def __init__(self, doc): QMainWindow.__init__(self, None) self.doc = doc self.app = doc.app self._setupUi() # Create base elements self.model = MainWindowModel(document=doc.model) self.model2view = {} self.apanel = AccountPanel(mainwindow=self) self.tpanel = TransactionPanel(mainwindow=self) self.mepanel = MassEditionPanel(mainwindow=self) self.scpanel = SchedulePanel(mainwindow=self) self.bpanel = BudgetPanel(mainwindow=self) self.cdrpanel = CustomDateRangePanel(mainwindow=self) self.arpanel = AccountReassignPanel(mainwindow=self) self.expanel = ExportPanel(mainwindow=self) self.alookup = Lookup(self, model=self.model.account_lookup) self.clookup = Lookup(self, model=self.model.completion_lookup) self.drsel = DateRangeSelector(mainwindow=self, view=self.dateRangeSelectorView) self.sfield = SearchField(model=self.model.search_field, view=self.searchLineEdit) self.recentDocuments = Recent(self.app, 'recentDocuments') self.recentDocuments.addMenu(self.menuOpenRecent) self.model.view = self self.model.connect() self._updateUndoActions() self._bindSignals() def _setupUi(self): # has to take place *before* base elements creation self.setWindowTitle("moneyGuru") self.resize(700, 580) self.centralwidget = QtGui.QWidget(self) self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget) self.verticalLayout.setSpacing(0) self.verticalLayout.setMargin(0) self.topBar = QtGui.QWidget(self.centralwidget) self.horizontalLayout_2 = QHBoxLayout(self.topBar) self.horizontalLayout_2.setContentsMargins(2, 0, 2, 0) spacerItem = QtGui.QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem) self.dateRangeSelectorView = DateRangeSelectorView(self.topBar) self.dateRangeSelectorView.setMinimumSize(QSize(220, 0)) self.horizontalLayout_2.addWidget(self.dateRangeSelectorView) spacerItem1 = QtGui.QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem1) self.searchLineEdit = SearchEdit(self.topBar) self.searchLineEdit.setMaximumSize(QSize(240, 16777215)) self.horizontalLayout_2.addWidget(self.searchLineEdit) self.verticalLayout.addWidget(self.topBar) self.tabBar = QTabBar(self.centralwidget) self.tabBar.setMinimumSize(QSize(0, 20)) self.verticalLayout.addWidget(self.tabBar) self.mainView = QtGui.QStackedWidget(self.centralwidget) self.verticalLayout.addWidget(self.mainView) # Bottom buttons & status label self.bottomBar = QtGui.QWidget(self.centralwidget) self.horizontalLayout = QHBoxLayout(self.bottomBar) self.horizontalLayout.setMargin(2) self.horizontalLayout.setMargin(0) self.newItemButton = QPushButton(self.bottomBar) buttonSizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed) buttonSizePolicy.setHorizontalStretch(0) buttonSizePolicy.setVerticalStretch(0) buttonSizePolicy.setHeightForWidth(self.newItemButton.sizePolicy().hasHeightForWidth()) self.newItemButton.setSizePolicy(buttonSizePolicy) self.newItemButton.setIcon(QIcon(QPixmap(':/plus_8'))) self.horizontalLayout.addWidget(self.newItemButton) self.deleteItemButton = QPushButton(self.bottomBar) self.deleteItemButton.setSizePolicy(buttonSizePolicy) self.deleteItemButton.setIcon(QIcon(QPixmap(':/minus_8'))) self.horizontalLayout.addWidget(self.deleteItemButton) self.editItemButton = QPushButton(self.bottomBar) self.editItemButton.setSizePolicy(buttonSizePolicy) self.editItemButton.setIcon(QIcon(QPixmap(':/info_gray_12'))) self.horizontalLayout.addWidget(self.editItemButton) self.horizontalLayout.addItem(horizontalSpacer(size=20)) self.graphVisibilityButton = QPushButton() self.graphVisibilityButton.setSizePolicy(buttonSizePolicy) self.graphVisibilityButton.setIcon(QIcon(QPixmap(':/graph_visibility_on_16'))) self.horizontalLayout.addWidget(self.graphVisibilityButton) self.piechartVisibilityButton = QPushButton() self.piechartVisibilityButton.setSizePolicy(buttonSizePolicy) self.piechartVisibilityButton.setIcon(QIcon(QPixmap(':/piechart_visibility_on_16'))) self.horizontalLayout.addWidget(self.piechartVisibilityButton) self.columnsVisibilityButton = QPushButton() self.columnsVisibilityButton.setSizePolicy(buttonSizePolicy) self.columnsVisibilityButton.setIcon(QIcon(QPixmap(':/columns_16'))) self.horizontalLayout.addWidget(self.columnsVisibilityButton) self.statusLabel = QtGui.QLabel(tr("Status")) self.statusLabel.setAlignment(Qt.AlignCenter) self.horizontalLayout.addWidget(self.statusLabel) self.verticalLayout.addWidget(self.bottomBar) self.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 700, 20)) self.menuFile = QMenu(tr("File")) self.menuOpenRecent = QMenu(tr("Open Recent")) self.menuView = QMenu(tr("View")) self.menuDateRange = QMenu(tr("Date Range")) self.menuEdit = QMenu(tr("Edit")) self.menuHelp = QMenu(tr("Help")) self.setMenuBar(self.menubar) self.actionOpenDocument = QAction(tr("Open..."), self) self.actionOpenDocument.setShortcut("Ctrl+O") self.actionShowNetWorth = QAction(tr("Net Worth"), self) self.actionShowNetWorth.setShortcut("Ctrl+1") self.actionShowNetWorth.setIcon(QIcon(QPixmap(':/balance_sheet_48'))) self.actionShowProfitLoss = QAction(escapeamp(tr("Profit & Loss")), self) self.actionShowProfitLoss.setShortcut("Ctrl+2") self.actionShowProfitLoss.setIcon(QIcon(QPixmap(':/income_statement_48'))) self.actionShowTransactions = QAction(tr("Transactions"), self) self.actionShowTransactions.setShortcut("Ctrl+3") self.actionShowTransactions.setIcon(QIcon(QPixmap(':/transaction_table_48'))) self.actionShowSelectedAccount = QAction(tr("Show Account"), self) self.actionShowSelectedAccount.setShortcut("Ctrl+]") self.actionNewItem = QAction(tr("New Item"), self) self.actionNewItem.setShortcut("Ctrl+N") self.actionDeleteItem = QAction(tr("Remove Selected"), self) self.actionEditItem = QAction(tr("Show Info"), self) self.actionEditItem.setShortcut("Ctrl+I") self.actionToggleGraph = QAction(tr("Toggle Graph"), self) self.actionToggleGraph.setShortcut("Ctrl+Alt+G") self.actionTogglePieChart = QAction(tr("Toggle Pie Chart"), self) self.actionTogglePieChart.setShortcut("Ctrl+Alt+P") self.actionMoveUp = QAction(tr("Move Up"), self) self.actionMoveUp.setShortcut("Ctrl++") self.actionMoveDown = QAction(tr("Move Down"), self) self.actionMoveDown.setShortcut("Ctrl+-") self.actionNavigateBack = QAction(tr("Go Back"), self) self.actionNavigateBack.setShortcut("Ctrl+[") self.actionNewAccountGroup = QAction(tr("New Account Group"), self) self.actionNewAccountGroup.setShortcut("Ctrl+Shift+N") self.actionShowNextView = QAction(tr("Next View"), self) self.actionShowNextView.setShortcut("Ctrl+Shift+]") self.actionShowPreviousView = QAction(tr("Previous View"), self) self.actionShowPreviousView.setShortcut("Ctrl+Shift+[") self.actionNewDocument = QAction(tr("New Document"), self) self.actionOpenExampleDocument = QAction(tr("Open Example Document"), self) self.actionOpenPluginFolder = QAction(tr("Open Plugin Folder"), self) self.actionImport = QAction(tr("Import..."), self) self.actionImport.setShortcut("Ctrl+Alt+I") self.actionExport = QAction(tr("Export..."), self) self.actionExport.setShortcut("Ctrl+Alt+E") self.actionSave = QAction(tr("Save"), self) self.actionSave.setShortcut("Ctrl+S") self.actionSaveAs = QAction(tr("Save As..."), self) self.actionSaveAs.setShortcut("Ctrl+Shift+S") self.actionAbout = QAction(tr("About moneyGuru"), self) self.actionToggleReconciliationMode = QAction(tr("Toggle Reconciliation Mode"), self) self.actionToggleReconciliationMode.setShortcut("Ctrl+Shift+R") self.actionToggleAccountExclusion = QAction(tr("Toggle Exclusion Status of Account"), self) self.actionToggleAccountExclusion.setShortcut("Ctrl+Shift+X") self.actionShowSchedules = QAction(tr("Schedules"), self) self.actionShowSchedules.setShortcut("Ctrl+4") self.actionShowSchedules.setIcon(QIcon(QPixmap(':/schedules_48'))) self.actionShowBudgets = QAction(tr("Budgets"), self) self.actionShowBudgets.setShortcut("Ctrl+5") self.actionShowBudgets.setIcon(QIcon(QPixmap(':/budget_48'))) self.actionReconcileSelected = QAction(tr("Reconcile Selection"), self) self.actionReconcileSelected.setShortcut("Ctrl+R") self.actionMakeScheduleFromSelected = QAction(tr("Make Schedule from Selected"), self) self.actionMakeScheduleFromSelected.setShortcut("Ctrl+M") self.actionShowPreferences = QAction(tr("Preferences..."), self) self.actionPrint = QAction(tr("Print..."), self) self.actionPrint.setShortcut("Ctrl+P") self.actionQuit = QAction(tr("Quit moneyGuru"), self) self.actionQuit.setShortcut("Ctrl+Q") self.actionUndo = QAction(tr("Undo"), self) self.actionUndo.setShortcut("Ctrl+Z") self.actionRedo = QAction(tr("Redo"), self) self.actionRedo.setShortcut("Ctrl+Y") self.actionShowHelp = QAction(tr("moneyGuru Help"), self) self.actionShowHelp.setShortcut("F1") self.actionCheckForUpdate = QAction(tr("Check for update"), self) self.actionOpenDebugLog = QAction(tr("Open Debug Log"), self) self.actionDuplicateTransaction = QAction(tr("Duplicate Transaction"), self) self.actionDuplicateTransaction.setShortcut("Ctrl+D") self.actionJumpToAccount = QAction(tr("Jump to Account..."), self) self.actionJumpToAccount.setShortcut("Ctrl+Shift+A") self.actionNewTab = QAction(tr("New Tab"), self) self.actionNewTab.setShortcut("Ctrl+T") self.actionCloseTab = QAction(tr("Close Tab"), self) self.actionCloseTab.setShortcut("Ctrl+W") self.menuFile.addAction(self.actionNewDocument) self.menuFile.addAction(self.actionNewTab) self.menuFile.addAction(self.actionOpenDocument) self.menuFile.addAction(self.menuOpenRecent.menuAction()) self.menuFile.addAction(self.actionOpenExampleDocument) self.menuFile.addAction(self.actionOpenPluginFolder) self.menuFile.addAction(self.actionImport) self.menuFile.addSeparator() self.menuFile.addAction(self.actionCloseTab) self.menuFile.addAction(self.actionSave) self.menuFile.addAction(self.actionSaveAs) self.menuFile.addAction(self.actionExport) self.menuFile.addAction(self.actionPrint) self.menuFile.addAction(self.actionQuit) self.menuView.addAction(self.actionShowNetWorth) self.menuView.addAction(self.actionShowProfitLoss) self.menuView.addAction(self.actionShowTransactions) self.menuView.addAction(self.actionShowSchedules) self.menuView.addAction(self.actionShowBudgets) self.menuView.addAction(self.actionShowPreviousView) self.menuView.addAction(self.actionShowNextView) self.menuView.addAction(self.menuDateRange.menuAction()) self.menuView.addAction(self.actionShowPreferences) self.menuView.addAction(self.actionToggleGraph) self.menuView.addAction(self.actionTogglePieChart) self.menuEdit.addAction(self.actionNewItem) self.menuEdit.addAction(self.actionNewAccountGroup) self.menuEdit.addAction(self.actionDeleteItem) self.menuEdit.addAction(self.actionEditItem) self.menuEdit.addSeparator() self.menuEdit.addAction(self.actionMoveUp) self.menuEdit.addAction(self.actionMoveDown) self.menuEdit.addAction(self.actionDuplicateTransaction) self.menuEdit.addAction(self.actionMakeScheduleFromSelected) self.menuEdit.addAction(self.actionReconcileSelected) self.menuEdit.addAction(self.actionToggleReconciliationMode) self.menuEdit.addAction(self.actionToggleAccountExclusion) self.menuEdit.addSeparator() self.menuEdit.addAction(self.actionShowSelectedAccount) self.menuEdit.addAction(self.actionNavigateBack) self.menuEdit.addAction(self.actionJumpToAccount) self.menuEdit.addSeparator() self.menuEdit.addAction(self.actionUndo) self.menuEdit.addAction(self.actionRedo) self.menuHelp.addAction(self.actionShowHelp) self.menuHelp.addAction(self.actionCheckForUpdate) self.menuHelp.addAction(self.actionOpenDebugLog) self.menuHelp.addAction(self.actionAbout) mainmenus = [self.menuFile, self.menuEdit, self.menuView, self.menuHelp] for menu in mainmenus: self.menubar.addAction(menu.menuAction()) setAccelKeys(menu) setAccelKeys(self.menubar) self.tabBar.setMovable(True) self.tabBar.setTabsClosable(True) seq = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_Right) self._shortcutNextTab = QShortcut(seq, self) seq = QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_Left) self._shortcutPrevTab = QShortcut(seq, self) # Linux setup if ISLINUX: self.actionCheckForUpdate.setVisible(False) # This only works on Windows def _bindSignals(self): self.newItemButton.clicked.connect(self.actionNewItem.trigger) self.deleteItemButton.clicked.connect(self.actionDeleteItem.trigger) self.editItemButton.clicked.connect(self.actionEditItem.trigger) self.graphVisibilityButton.clicked.connect(self.actionToggleGraph.trigger) self.piechartVisibilityButton.clicked.connect(self.actionTogglePieChart.trigger) self.columnsVisibilityButton.clicked.connect(self.columnsVisibilityButtonClicked) self.recentDocuments.mustOpenItem.connect(self.doc.open) self.doc.documentOpened.connect(self.recentDocuments.insertItem) self.doc.documentSavedAs.connect(self.recentDocuments.insertItem) self.doc.documentPathChanged.connect(self.documentPathChanged) self.tabBar.currentChanged.connect(self.currentTabChanged) self.tabBar.tabCloseRequested.connect(self.tabCloseRequested) self.tabBar.tabMoved.connect(self.tabMoved) # Views self.actionShowNetWorth.triggered.connect(self.showNetWorthTriggered) self.actionShowProfitLoss.triggered.connect(self.showProfitLossTriggered) self.actionShowTransactions.triggered.connect(self.showTransactionsTriggered) self.actionShowSchedules.triggered.connect(self.showSchedulesTriggered) self.actionShowBudgets.triggered.connect(self.showBudgetsTriggered) self.actionShowPreviousView.triggered.connect(self.showPreviousViewTriggered) self.actionShowNextView.triggered.connect(self.showNextViewTriggered) self.actionShowPreferences.triggered.connect(self.app.showPreferences) self.actionToggleGraph.triggered.connect(self.toggleGraphTriggered) self.actionTogglePieChart.triggered.connect(self.togglePieChartTriggered) # Document Edition self.actionNewItem.triggered.connect(self.newItemTriggered) self.actionNewAccountGroup.triggered.connect(self.newAccountGroupTriggered) self.actionDeleteItem.triggered.connect(self.deleteItemTriggered) self.actionEditItem.triggered.connect(self.editItemTriggered) self.actionMoveUp.triggered.connect(self.moveUpTriggered) self.actionMoveDown.triggered.connect(self.moveDownTriggered) self.actionDuplicateTransaction.triggered.connect(self.model.duplicate_item) self.actionUndo.triggered.connect(self.doc.model.undo) self.actionRedo.triggered.connect(self.doc.model.redo) # Open / Save / Import / Export / New self.actionNewDocument.triggered.connect(self.doc.new) self.actionOpenDocument.triggered.connect(self.doc.openDocument) self.actionOpenExampleDocument.triggered.connect(self.doc.openExampleDocument) self.actionOpenPluginFolder.triggered.connect(self.model.app.open_plugin_folder) self.actionImport.triggered.connect(self.doc.importDocument) self.actionSave.triggered.connect(self.doc.save) self.actionSaveAs.triggered.connect(self.doc.saveAs) self.actionExport.triggered.connect(self.model.export) # Misc self.actionNewTab.triggered.connect(self.model.new_tab) self.actionCloseTab.triggered.connect(self.closeTabTriggered) self.actionShowSelectedAccount.triggered.connect(self.model.show_account) self.actionNavigateBack.triggered.connect(self.navigateBackTriggered) self.actionJumpToAccount.triggered.connect(self.jumpToAccountTriggered) self.actionMakeScheduleFromSelected.triggered.connect(self.makeScheduleFromSelectedTriggered) self.actionReconcileSelected.triggered.connect(self.reconcileSelectedTriggered) self.actionToggleReconciliationMode.triggered.connect(self.toggleReconciliationModeTriggered) self.actionToggleAccountExclusion.triggered.connect(self.toggleAccountExclusionTriggered) self.actionPrint.triggered.connect(self._print) self.actionShowHelp.triggered.connect(self.app.showHelp) self.actionCheckForUpdate.triggered.connect(self.checkForUpdateTriggered) self.actionAbout.triggered.connect(self.aboutTriggered) self.actionOpenDebugLog.triggered.connect(self.openDebugLogTriggered) self.actionQuit.triggered.connect(self.close) # Extra Shortcuts self._shortcutNextTab.activated.connect(self.showNextViewTriggered) self._shortcutPrevTab.activated.connect(self.showPreviousViewTriggered) #--- QWidget overrides def closeEvent(self, event): if self.doc.confirmDestructiveAction(): event.accept() else: event.ignore() #--- Private def _print(self): dialog = QPrintDialog(self) if dialog.exec_() != QPrintDialog.Accepted: return printer = dialog.printer() currentView = self.mainView.currentWidget() viewPrinter = ViewPrinter(printer, currentView) currentView.fitViewsForPrint(viewPrinter) viewPrinter.render() def _getViewforPane(self, pane_type, pane_view): if pane_view in self.model2view: view = self.model2view[pane_view] else: view = PANETYPE2VIEWCLASS[pane_type](model=pane_view) self.model2view[pane_view] = view self.mainView.addWidget(view) view.restoreSubviewsSize() return view def _setTabIndex(self, index): if not self.tabBar.count(): return self.tabBar.setCurrentIndex(index) self._updateActionsState() pane_type = self.model.pane_type(index) pane_view = self.model.pane_view(index) view = self._getViewforPane(pane_type, pane_view) self.mainView.setCurrentWidget(view) view.setFocus() def _activeView(self): paneIndex = self.model.current_pane_index return self.model.pane_view(paneIndex) def _updateActionsState(self): # Updates enable/disable checked/unchecked state of all actions. These state can change # under various conditions: main view change, date range type change and when reconciliation # mode is toggled # Determine what actions are enabled view = self._activeView() viewType = view.VIEW_TYPE isSheet = viewType in {PaneType.NetWorth, PaneType.Profit} isTransactionOrEntryTable = viewType in {PaneType.Transaction, PaneType.Account} canToggleReconciliation = viewType == PaneType.Account and view.can_toggle_reconciliation_mode newItemLabel = { PaneType.NetWorth: tr("New Account"), PaneType.Profit: tr("New Account"), PaneType.Transaction: tr("New Transaction"), PaneType.Account: tr("New Transaction"), PaneType.Schedule: tr("New Schedule"), PaneType.Budget: tr("New Budget"), PaneType.GeneralLedger: tr("New Transaction"), }.get(viewType, tr("New Item")) #XXX make "New Item" disabled self.actionNewItem.setText(newItemLabel) self.actionNewAccountGroup.setEnabled(isSheet) self.actionMoveDown.setEnabled(isTransactionOrEntryTable) self.actionMoveUp.setEnabled(isTransactionOrEntryTable) self.actionDuplicateTransaction.setEnabled(isTransactionOrEntryTable) self.actionMakeScheduleFromSelected.setEnabled(isTransactionOrEntryTable) self.actionReconcileSelected.setEnabled(viewType == PaneType.Account and view.reconciliation_mode) self.actionShowNextView.setEnabled(self.model.current_pane_index < self.model.pane_count-1) self.actionShowPreviousView.setEnabled(self.model.current_pane_index > 0) self.actionShowSelectedAccount.setEnabled(isSheet or isTransactionOrEntryTable) self.actionNavigateBack.setEnabled(viewType == PaneType.Account) self.actionToggleReconciliationMode.setEnabled(canToggleReconciliation) self.actionToggleAccountExclusion.setEnabled(isSheet) def _updateUndoActions(self): if self.doc.model.can_undo(): self.actionUndo.setEnabled(True) self.actionUndo.setText(tr("Undo {0}").format(self.doc.model.undo_description())) else: self.actionUndo.setEnabled(False) self.actionUndo.setText(tr("Undo")) if self.doc.model.can_redo(): self.actionRedo.setEnabled(True) self.actionRedo.setText(tr("Redo {0}").format(self.doc.model.redo_description())) else: self.actionRedo.setEnabled(False) self.actionRedo.setText(tr("Redo")) #--- Actions # Views def showNetWorthTriggered(self): self.model.select_pane_of_type(PaneType.NetWorth) def showProfitLossTriggered(self): self.model.select_pane_of_type(PaneType.Profit) def showTransactionsTriggered(self): self.model.select_pane_of_type(PaneType.Transaction) def showSchedulesTriggered(self): self.model.select_pane_of_type(PaneType.Schedule) def showBudgetsTriggered(self): self.model.select_pane_of_type(PaneType.Budget) def showPreviousViewTriggered(self): self.model.select_previous_view() def showNextViewTriggered(self): self.model.select_next_view() # Document Edition def newItemTriggered(self): self.model.new_item() def newAccountGroupTriggered(self): self.model.new_group() def deleteItemTriggered(self): self.model.delete_item() def editItemTriggered(self): self.model.edit_item() def moveUpTriggered(self): self.model.move_up() def moveDownTriggered(self): self.model.move_down() # Misc def closeTabTriggered(self): self.model.close_pane(self.model.current_pane_index) def navigateBackTriggered(self): self.model.navigate_back() def jumpToAccountTriggered(self): self.model.jump_to_account() def makeScheduleFromSelectedTriggered(self): self.model.make_schedule_from_selected() def reconcileSelectedTriggered(self): self._activeView().etable.toggle_reconciled() def toggleReconciliationModeTriggered(self): self._activeView().toggle_reconciliation_mode() self._updateActionsState() def toggleAccountExclusionTriggered(self): viewType = self.model.pane_type(self.model.current_pane_index) if viewType in {PaneType.NetWorth, PaneType.Profit}: self._activeView().sheet.toggle_excluded() def toggleGraphTriggered(self): self.model.toggle_area_visibility(PaneArea.BottomGraph) def togglePieChartTriggered(self): self.model.toggle_area_visibility(PaneArea.RightChart) def columnsVisibilityButtonClicked(self): items = self.model.column_menu_items() if not items: return menu = QMenu() for i, (display, marked) in enumerate(items): action = menu.addAction(display) action.setCheckable(True) action.setChecked(marked) action.setData(i) action.triggered.connect(self.columnsMenuItemWasClicked) self._columnMenuHolder = menu # we need to hold a reference to it while it popups button = self.columnsVisibilityButton menu.popup(button.parentWidget().mapToGlobal(button.geometry().topLeft())) def columnsMenuItemWasClicked(self): action = self.sender() if action is not None: index = action.data() self.model.toggle_column_menu_item(index) def checkForUpdateTriggered(self): QProcess.execute('updater.exe', ['/checknow']) def aboutTriggered(self): self.app.showAboutBox() def openDebugLogTriggered(self): debugLogPath = op.join(getAppData(), 'debug.log') url = QUrl.fromLocalFile(debugLogPath) QDesktopServices.openUrl(url) #--- Other Signals def currentTabChanged(self, index): self.model.current_pane_index = index self._setTabIndex(index) def documentPathChanged(self): if self.doc.documentPath: title = "moneyGuru ({})".format(self.doc.documentPath) else: title = "moneyGuru" self.setWindowTitle(title) def tabCloseRequested(self, index): self.model.close_pane(index) def tabMoved(self, fromIndex, toIndex): self.model.move_pane(fromIndex, toIndex) #--- model --> view def change_current_pane(self): self._setTabIndex(self.model.current_pane_index) def refresh_panes(self): while self.tabBar.count() < self.model.pane_count: self.tabBar.addTab('') for i in range(self.model.pane_count): pane_label = self.model.pane_label(i) pane_label = escapeamp(pane_label) self.tabBar.setTabText(i, pane_label) pane_type = self.model.pane_type(i) pane_view = self.model.pane_view(i) # Ensure that the view's "view" has been created and bound self._getViewforPane(pane_type, pane_view) iconname = PANETYPE2ICON.get(pane_type) icon = QIcon(QPixmap(':/{0}'.format(iconname))) if iconname else QIcon() self.tabBar.setTabIcon(i, icon) # It's important that we proceed with tab removal *after* we've completed tab initialization. # We're walking on eggshells here. refresh_panes() can be called in multiple situations, one # of them is during the opening of a document. When that happens when another document was # previously opened, all views' model are uninitalized and don't have their "view" attribute # set yet. If we proceed with the setCurrentIndex() call below before _getViewforPane() # could be called above, we get a crash. if self.tabBar.currentIndex() < self.model.pane_count: # Normally, we don't touch the tabBar index here and wait for change_current_pane, # but when we remove tabs, it's possible that currentTabChanged end up being called and # then the tab selection is bugged. I tried disconnecting/reconnecting the signal, but # this is buggy. So when a selected tab is about to be removed, we change the selection # to the model's one immediately. self.tabBar.setCurrentIndex(self.model.current_pane_index) while self.tabBar.count() > self.model.pane_count: self.tabBar.removeTab(self.tabBar.count()-1) self.tabBar.setTabsClosable(self.model.pane_count > 1) def refresh_status_line(self): self.statusLabel.setText(self.model.status_line) def refresh_undo_actions(self): self._updateUndoActions() def restore_window_frame(self, frame): self.setGeometry(*frame) def save_window_frame(self): r = self.geometry() return (r.x(), r.y(), r.width(), r.height()) def show_message(self, msg): title = tr("Warning") QMessageBox.warning(self, title, msg) def update_area_visibility(self): hidden = self.model.hidden_areas graphimg = ':/graph_visibility_{}_16'.format('off' if PaneArea.BottomGraph in hidden else 'on') pieimg = ':/piechart_visibility_{}_16'.format('off' if PaneArea.RightChart in hidden else 'on') self.graphVisibilityButton.setIcon(QIcon(QPixmap(graphimg))) self.piechartVisibilityButton.setIcon(QIcon(QPixmap(pieimg))) def view_closed(self, index): self.tabBar.removeTab(index) self.tabBar.setTabsClosable(self.model.pane_count > 1)
def setupUi(self): self.setWindowTitle(self.tr("DB Manager")) self.setWindowIcon(QIcon(":/db_manager/icon")) self.resize(QSize(700, 500).expandedTo(self.minimumSizeHint())) # create central tab widget and add the first 3 tabs: info, table and preview self.tabs = QTabWidget() self.info = InfoViewer(self) self.tabs.addTab(self.info, self.tr("Info")) self.table = TableViewer(self) self.tabs.addTab(self.table, self.tr("Table")) self.preview = LayerPreview(self) self.tabs.addTab(self.preview, self.tr("Preview")) self.setCentralWidget(self.tabs) # display close button for all tabs but the first 3 ones, i.e. # HACK: just hide the close button where not needed (GS) self.tabs.setTabsClosable(True) self.tabs.tabCloseRequested.connect(self.close_tab) tabbar = self.tabs.tabBar() for i in range(3): btn = tabbar.tabButton(i, QTabBar.RightSide) if tabbar.tabButton(i, QTabBar.RightSide) else tabbar.tabButton(i, QTabBar.LeftSide) btn.resize(0, 0) btn.hide() # Creates layout for message bar self.layout = QGridLayout(self.info) self.layout.setContentsMargins(0, 0, 0, 0) spacerItem = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) self.layout.addItem(spacerItem, 1, 0, 1, 1) # init messageBar instance self.infoBar = QgsMessageBar(self.info) sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed) self.infoBar.setSizePolicy(sizePolicy) self.layout.addWidget(self.infoBar, 0, 0, 1, 1) # create database tree self.dock = QDockWidget("Tree", self) self.dock.setObjectName("DB_Manager_DBView") self.dock.setFeatures(QDockWidget.DockWidgetMovable) self.tree = DBTree(self) self.dock.setWidget(self.tree) self.addDockWidget(Qt.LeftDockWidgetArea, self.dock) # create status bar self.statusBar = QStatusBar(self) self.setStatusBar(self.statusBar) # create menus self.menuBar = QMenuBar(self) self.menuDb = QMenu(self.tr("&Database"), self) self.menuBar.addMenu(self.menuDb) self.menuSchema = QMenu(self.tr("&Schema"), self) actionMenuSchema = self.menuBar.addMenu(self.menuSchema) self.menuTable = QMenu(self.tr("&Table"), self) actionMenuTable = self.menuBar.addMenu(self.menuTable) self.menuHelp = None # QMenu(self.tr("&Help"), self) # actionMenuHelp = self.menuBar.addMenu(self.menuHelp) self.setMenuBar(self.menuBar) # create toolbar self.toolBar = QToolBar("Default", self) self.toolBar.setObjectName("DB_Manager_ToolBar") self.addToolBar(self.toolBar) # create menus' actions # menu DATABASE sep = self.menuDb.addSeparator() sep.setObjectName("DB_Manager_DbMenu_placeholder") sep.setVisible(False) self.actionRefresh = self.menuDb.addAction(QIcon(":/db_manager/actions/refresh"), self.tr("&Refresh"), self.refreshActionSlot, QKeySequence("F5")) self.actionSqlWindow = self.menuDb.addAction(QIcon(":/db_manager/actions/sql_window"), self.tr("&SQL window"), self.runSqlWindow, QKeySequence("F2")) self.menuDb.addSeparator() self.actionClose = self.menuDb.addAction(QIcon(), self.tr("&Exit"), self.close, QKeySequence("CTRL+Q")) # menu SCHEMA sep = self.menuSchema.addSeparator() sep.setObjectName("DB_Manager_SchemaMenu_placeholder") sep.setVisible(False) actionMenuSchema.setVisible(False) # menu TABLE sep = self.menuTable.addSeparator() sep.setObjectName("DB_Manager_TableMenu_placeholder") sep.setVisible(False) self.actionImport = self.menuTable.addAction(QIcon(":/db_manager/actions/import"), self.tr("&Import layer/file"), self.importActionSlot) self.actionExport = self.menuTable.addAction(QIcon(":/db_manager/actions/export"), self.tr("&Export to file"), self.exportActionSlot) self.menuTable.addSeparator() #self.actionShowSystemTables = self.menuTable.addAction(self.tr("Show system tables/views"), self.showSystemTables) #self.actionShowSystemTables.setCheckable(True) #self.actionShowSystemTables.setChecked(True) actionMenuTable.setVisible(False) # add actions to the toolbar self.toolBar.addAction(self.actionRefresh) self.toolBar.addAction(self.actionSqlWindow) self.toolBar.addAction(self.actionImport) self.toolBar.addAction(self.actionExport)
class MainWindow(QMainWindow): def __init__(self, app): QMainWindow.__init__(self, None) self.app = app self._setupUi() self.elementTable = ElementTable(self.app.model.element_table, self.elementTableView) self.openedFileLabel = TextField(self.app.model.opened_file_label, self.openedFileLabelView) self.openButton.clicked.connect(self.actionLoadPDF.trigger) def _setupActions(self): ACTIONS = [ ('actionLoadPDF', 'Ctrl+O', '', tr("Load PDF"), self.app.model.load_pdf), ] createActions(ACTIONS, self) def _setupMenu(self): self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 42, 22)) self.menuFile = QMenu(self.menubar) self.menuFile.setTitle(tr("File")) self.menuHelp = QMenu(self.menubar) self.menuHelp.setTitle(tr("Help")) self.setMenuBar(self.menubar) self.menuFile.addAction(self.actionLoadPDF) self.menuFile.addAction(self.app.actionLoadProject) self.menuFile.addAction(self.app.actionSaveProject) self.menuFile.addAction(self.app.actionQuit) self.menuHelp.addAction(self.app.actionShowHelp) self.menuHelp.addAction(self.app.actionCheckForUpdate) self.menuHelp.addAction(self.app.actionOpenDebugLog) self.menuHelp.addAction(self.app.actionAbout) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuHelp.menuAction()) def _setupUi(self): self.setWindowTitle(QCoreApplication.instance().applicationName()) self.resize(900, 600) self.mainWidget = QWidget(self) self.verticalLayout = QVBoxLayout(self.mainWidget) self.fileLayout = QHBoxLayout() self.openButton = QPushButton("Open File") # We want to leave the space to the label sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) self.openButton.setSizePolicy(sizePolicy) self.fileLayout.addWidget(self.openButton) self.openedFileLabelView = QLabel() sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) self.openedFileLabelView.setSizePolicy(sizePolicy) self.fileLayout.addWidget(self.openedFileLabelView) self.verticalLayout.addLayout(self.fileLayout) self.tabViewsLayout = QHBoxLayout() self.topTabWidget = QTabWidget() self.elementTableView = ElementTableView() self.topTabWidget.addTab(self.elementTableView, "Table") self.pageController = PageController(self.app.model.page_controller) self.topTabWidget.addTab(self.pageController, "Page") self.tabViewsLayout.addWidget(self.topTabWidget) self.bottomTabWidget = QTabWidget() # We want to leave the most screen estate possible to the table. sizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Expanding) self.bottomTabWidget.setSizePolicy(sizePolicy) self.editTab = EditPane(self.app.model.edit_pane) self.bottomTabWidget.addTab(self.editTab, "Edit") self.buildTab = BuildPane(self.app.model.build_pane) self.bottomTabWidget.addTab(self.buildTab, "Build") self.tabViewsLayout.addWidget(self.bottomTabWidget) self.verticalLayout.addLayout(self.tabViewsLayout) self.setCentralWidget(self.mainWidget) self._setupActions() self._setupMenu() moveToScreenCenter(self)
class BrowserWindow(QMainWindow): def retranslateUi(self): self.setWindowTitle( QApplication.translate("self", "self", None, QApplication.UnicodeUTF8)) self.menuFile.setTitle( QApplication.translate("self", "&File", None, QApplication.UnicodeUTF8)) self.menuView.setTitle( QApplication.translate("self", "&View", None, QApplication.UnicodeUTF8)) self.menuEdit.setTitle( QApplication.translate("self", "&Edit", None, QApplication.UnicodeUTF8)) self.menuHelp.setTitle( QApplication.translate("self", "&Help", None, QApplication.UnicodeUTF8)) self.toolBar.setWindowTitle( QApplication.translate("self", "toolBar", None, QApplication.UnicodeUTF8)) self.actionHome.setText( QApplication.translate("self", "&Home", None, QApplication.UnicodeUTF8)) self.actionHome.setToolTip( QApplication.translate("self", "Go Home", None, QApplication.UnicodeUTF8)) self.actionShowMenu.setText( QApplication.translate("self", "Show &Menu", None, QApplication.UnicodeUTF8)) self.actionShowToolbar.setText( QApplication.translate("self", "Show &Toolbar", None, QApplication.UnicodeUTF8)) self.actionClose.setText( QApplication.translate("self", "&Close", None, QApplication.UnicodeUTF8)) self.actionModifyWebapp.setText( QApplication.translate("self", "Modify &Webapp", None, QApplication.UnicodeUTF8)) self.actionEditPreferences.setText( QApplication.translate("self", "Edit &Preferences", None, QApplication.UnicodeUTF8)) self.actionPrint.setText( QApplication.translate("self", "&Print", None, QApplication.UnicodeUTF8)) self.actionAbout.setText( QApplication.translate("self", "&About", None, QApplication.UnicodeUTF8)) def __init__(self, appid, base, name): super(BrowserWindow, self).__init__() self.appid = appid self.name = name self.original_name = name self.base = base # Main widgets self.centralwidget = QWidget(self) self.gridLayout_2 = QGridLayout(self.centralwidget) self.setCentralWidget(self.centralwidget) self.urlLineEdit = QLineEdit(self) self.progressBar = QProgressBar(self) # Custom webview self.page = LocalWebPage() self.page.setFeaturePermission(self.page.mainFrame(), LocalWebPage.Notifications, LocalWebPage.PermissionGrantedByUser) self.webkitNotifications = WebkitNotifications(self) self.webViewMain = LocalWebView(self.centralwidget) self.webViewMain.setPage(self.page) self.gridLayout_2.addWidget(self.webViewMain, 0, 0, 1, 1) self.webViewMain.setContentsMargins(0, 0, 0, 0) self.gridLayout_2.setContentsMargins(0, 0, 0, 0) self.menubar = QMenuBar(self) self.menuFile = QMenu(self.menubar) self.menuView = QMenu(self.menubar) self.menuEdit = QMenu(self.menubar) self.menuHelp = QMenu(self.menubar) self.setMenuBar(self.menubar) self.statusbar = QStatusBar(self) self.setStatusBar(self.statusbar) self.toolBar = QToolBar(self) self.toolBar.setMovable(False) self.toolBar.setFloatable(False) self.addToolBar(Qt.TopToolBarArea, self.toolBar) # Create actions self.actionOpenLinkInNewWindow = self.page.action( self.page.OpenLinkInNewWindow) self.actionOpenLinkInNewWindow.setText( tr('BrowserWindow', 'Open in &Browser')) self.actionBack = self.page.action(self.page.Back) self.actionForward = self.page.action(self.page.Forward) self.actionStop = self.page.action(self.page.Stop) self.actionReload = self.page.action(self.page.Reload) self.actionHome = QAction(self) self.actionShowMenu = QAction(self) self.actionShowMenu.setCheckable(True) self.actionShowToolbar = QAction(self) self.actionShowToolbar.setCheckable(True) self.actionClose = QAction(self) self.actionModifyWebapp = QAction(self) self.actionEditPreferences = QAction(self) self.actionPrint = QAction(self) self.actionSaveLink = self.page.action(self.page.DownloadLinkToDisk) self.actionSaveLink.setEnabled(False) self.actionAbout = QAction(self) # Populate menu and toolbars self.menuFile.addAction(self.actionHome) self.menuFile.addAction(self.actionBack) self.menuFile.addAction(self.actionForward) self.menuFile.addAction(self.actionStop) self.menuFile.addAction(self.actionReload) self.menuFile.addSeparator() self.menuFile.addAction(self.actionPrint) self.menuFile.addSeparator() self.menuFile.addAction(self.actionClose) self.menuView.addAction(self.actionShowMenu) self.menuView.addAction(self.actionShowToolbar) self.menuView.addSeparator() self.menuEdit.addAction(self.actionModifyWebapp) #self.menuEdit.addAction(self.actionEditPreferences) self.menuHelp.addAction(self.actionAbout) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuEdit.menuAction()) self.menubar.addAction(self.menuView.menuAction()) self.menubar.addAction(self.menuHelp.menuAction()) self.toolBar.addAction(self.actionHome) self.toolBar.addAction(self.actionBack) self.toolBar.addAction(self.actionForward) self.toolBar.addWidget(self.urlLineEdit) self.toolBar.addAction(self.actionStop) self.toolBar.addAction(self.actionReload) self.retranslateUi() QMetaObject.connectSlotsByName(self) self.setWindowTitle(self.name) # Set up cookie jar that persists sessions self.cookieJar = PersistableCookieJar(self, identifier=self.appid) self.cookieJar.load() self.webViewMain.page().networkAccessManager().setCookieJar( self.cookieJar) # Set up link delegation so that external links open in web browser. self.webViewMain.page().setLinkDelegationPolicy( QWebPage.DelegateExternalLinks) self.desktopEntry = desktop.getEntry(self.appid) # Set icons for actions; this can't be done in the designer, AFAICT self.actionHome.setIcon(QIcon.fromTheme('go-home')) self.actionAbout.setIcon(QIcon.fromTheme('help-about')) # Set up shortcuts self.actionStop.setShortcut(Qt.Key_Escape) self.actionBack.setShortcut(QKeySequence.Back) self.actionForward.setShortcut(QKeySequence.Forward) self.actionReload.setShortcut(QKeySequence.Refresh) self.actionHome.setShortcut('Ctrl+Home') self.actionShowMenu.setShortcut('Ctrl+m') self.actionShowToolbar.setShortcut('Ctrl+t') self.actionPrint.setShortcut(QKeySequence.Print) self.backShortcut = QShortcut(self) self.backShortcut.setKey(Qt.Key_Back) self.backShortcut.activated.connect(self.webViewMain.back) self.forwardShortcut = QShortcut(self) self.forwardShortcut.setKey(Qt.Key_Forward) self.forwardShortcut.activated.connect(self.webViewMain.forward) # Set up context menu self.webViewMain.setContextMenuPolicy(Qt.CustomContextMenu) self.webViewMain.customContextMenuRequested.connect(self.showMenu) # Setup statusbar and toolbar for c in self.statusBar().children()[0].children(): c.removeWidget(c) self.statusBar().addPermanentWidget(self.progressBar, 1) self.actionShowToolbar.setChecked(True) self.actionShowMenu.setChecked(True) # Icon if self.desktopEntry.hasKey('Icon'): self.icon = QIcon(self.desktopEntry.get('Icon')) self.setWindowIcon(self.icon) else: self.webViewMain.iconChanged.connect(self.setWindowIcon) # Set up events if self.desktopEntry.get('X-%s-menu-enabled' % APP_NAME) == '0': self.actionShowMenu.setChecked(False) else: self.actionShowMenu.setChecked(True) if self.desktopEntry.get('X-%s-toolbar-enabled' % APP_NAME) == '0': self.actionShowToolbar.setChecked(False) else: self.actionShowToolbar.setChecked(True) self.webViewMain.linkClicked.connect(self._onLinkClick) self.webViewMain.titleChanged.connect(self.setWindowTitle) self.webViewMain.loadProgress.connect(self._setLoadingStatus) self.webViewMain.urlChanged.connect( lambda x: self.urlLineEdit.setText(x.toString())) self.page.printRequested.connect(self._onPrint) self.page.loadFinished.connect(self._loadingFinished) self.actionHome.triggered.connect( lambda x: self.webViewMain.load(QUrl(self.base))) self.actionClose.triggered.connect(self.close) self.actionPrint.triggered.connect(self._onPrint) self.urlLineEdit.returnPressed.connect(self._onUrlEdit) self.actionShowToolbar.triggered.connect(self._onShowToolbar) self.actionShowMenu.triggered.connect(self._onShowMenu) self.actionAbout.triggered.connect(lambda x: about.show(self)) self.actionModifyWebapp.triggered.connect(self._onModify) self._onShowMenu() self._onShowToolbar() try: self.resize(int(self.desktopEntry.getWindowWidth()), int(self.desktopEntry.getWindowHeight())) except (ValueError, TypeError): self.resize(800, 600) # Load first page self.webViewMain.load(QUrl(base)) self.editor = SiteEditorWindow(self.desktopEntry, isNew=False) def _onModify(self): self.editor.show() def closeEvent(self, qCloseEvent): self.desktopEntry.setWindowWidth(self.width()) self.desktopEntry.setWindowHeight(self.height()) self.desktopEntry.write() def _onPrint(self): printer = QPrinter() dialog = QPrintDialog(printer, self) if dialog.exec_() != QDialog.Accepted: return self.page.mainFrame().print_(printer) def _loadingFinished(self): # TODO: Add user scripts here # TODO: Add user styles here # Override window.webkitNotifications self.page.mainFrame().addToJavaScriptWindowObject( "_x_webplier_webkitNotifications", self.webkitNotifications) self.page.mainFrame().evaluateJavaScript( WebkitNotifications.JAVASCRIPT) def _setLoadingStatus(self, value): if value < 100: self.progressBar.setValue(value) self.progressBar.show() self.statusBar().show() self.actionReload.setVisible(False) self.actionStop.setVisible(True) else: self.page.setFeaturePermission( self.page.mainFrame(), LocalWebPage.Notifications, LocalWebPage.PermissionGrantedByUser) self.progressBar.hide() self.statusBar().hide() self.actionReload.setVisible(True) self.actionStop.setVisible(False) def _onUrlEdit(self): url = unicode(self.urlLineEdit.text()) qurl = QUrl(url) if not qurl.scheme(): qurl.setScheme('http') self.webViewMain.load(qurl) def _onLinkClick(self, qurl): url = unicode(qurl.toString()) if not unicode(url).startswith(self.base): webbrowser.open(url, 1) else: self.webViewMain.load(qurl) def _onShowToolbar(self): if self.actionShowToolbar.isChecked(): self.toolBar.show() self.desktopEntry.set('X-%s-toolbar-enabled' % APP_NAME, '1') else: self.toolBar.hide() self.desktopEntry.set('X-%s-toolbar-enabled' % APP_NAME, '0') def _onShowMenu(self): if self.actionShowMenu.isChecked(): self.menubar.show() self.desktopEntry.set('X-%s-menu-enabled' % APP_NAME, '1') else: self.menubar.hide() self.desktopEntry.set('X-%s-menu-enabled' % APP_NAME, '0') def showMenu(self, point): m = self.webViewMain.page().createStandardContextMenu() # TODO: Make this less awful and fragile for a in m.actions(): if a == self.actionSaveLink: m.removeAction(a) m.addSeparator() m.addAction(self.actionShowMenu) m.addAction(self.actionShowToolbar) globalpos = self.mapToParent(point) m.exec_(globalpos)
class MenuQt(object): """主菜单""" add_record = QFrame(CENTRAL_WIDGET) # 增加交易记录的界面 grid_layout_widget = QWidget(add_record) # title的container grid_layout = QGridLayout(grid_layout_widget) title = QLabel(grid_layout_widget) statusbar = QStatusBar(WINDOW) # 股票代码的title以及输入框 grid_layout_widget_2 = QWidget(add_record) grid_layout_2 = QGridLayout(grid_layout_widget_2) share_code_title = QLabel(grid_layout_widget_2) grid_layout_widget_14 = QWidget(add_record) grid_layout_14 = QGridLayout(grid_layout_widget_14) share_code_input = QLineEdit(grid_layout_widget_14) # 股票名称的title和显示框 grid_layout_widget_12 = QWidget(add_record) grid_layout_12 = QGridLayout(grid_layout_widget_12) share_name_title = QLabel(grid_layout_widget_12) grid_layout_widget_21 = QWidget(add_record) grid_layout_21 = QGridLayout(grid_layout_widget_21) share_name_show = QLineEdit(grid_layout_widget_21) # 买入日期的title和输入框 grid_layout_widget_3 = QWidget(add_record) grid_layout_3 = QGridLayout(grid_layout_widget_3) buy_date_title = QLabel(grid_layout_widget_3) grid_layout_widget_15 = QWidget(add_record) grid_layout_15 = QGridLayout(grid_layout_widget_15) buy_date_input = QDateEdit(grid_layout_widget_15) # 卖出日期的title和输入框 grid_layout_widget_10 = QWidget(add_record) grid_layout_10 = QGridLayout(grid_layout_widget_10) sale_date_title = QLabel(grid_layout_widget_10) grid_layout_widget_20 = QWidget(add_record) grid_layout_20 = QGridLayout(grid_layout_widget_20) sale_date_input = QDateEdit(grid_layout_widget_20) # 买入数量的title和输入框 grid_layout_widget_5 = QWidget(add_record) grid_layout_5 = QGridLayout(grid_layout_widget_5) buy_num_title = QLabel(grid_layout_widget_5) grid_layout_widget_16 = QWidget(add_record) grid_layout_16 = QGridLayout(grid_layout_widget_16) buy_num_input = QLineEdit(grid_layout_widget_16) # 卖出数量的title和输入框 grid_layout_widget_25 = QWidget(add_record) grid_layout_25 = QGridLayout(grid_layout_widget_25) sale_num_input = QLineEdit(grid_layout_widget_25) grid_layout_widget_13 = QWidget(add_record) grid_layout_13 = QGridLayout(grid_layout_widget_13) sale_num_title = QLabel(grid_layout_widget_13) # 买入价格的title和输入框 grid_layout_widget_4 = QWidget(add_record) grid_layout_4 = QGridLayout(grid_layout_widget_4) buy_price_title = QLabel(grid_layout_widget_4) grid_layout_widget_17 = QWidget(add_record) grid_layout_17 = QGridLayout(grid_layout_widget_17) buy_price_input = QLineEdit(grid_layout_widget_17) # 卖出价格和输入框 grid_layout_widget_11 = QWidget(add_record) grid_layout_11 = QGridLayout(grid_layout_widget_11) sale_price_title = QLabel(grid_layout_widget_11) grid_layout_widget_22 = QWidget(add_record) grid_layout_22 = QGridLayout(grid_layout_widget_22) sale_price_input = QLineEdit(grid_layout_widget_22) # 持仓价格和显示框 grid_layout_widget_6 = QWidget(add_record) grid_layout_6 = QGridLayout(grid_layout_widget_6) have_avg_price = QLabel(grid_layout_widget_6) grid_layout_widget_19 = QWidget(add_record) grid_layout_19 = QGridLayout(grid_layout_widget_19) buv_avg_price_show = QLineEdit(grid_layout_widget_19) # 持仓数量和显示框 grid_layout_widget_7 = QWidget(add_record) grid_layout_7 = QGridLayout(grid_layout_widget_7) have_num_title = QLabel(grid_layout_widget_7) grid_layout_widget_18 = QWidget(add_record) grid_layout_18 = QGridLayout(grid_layout_widget_18) have_num_show = QLineEdit(grid_layout_widget_18) # 当前盈利和显示框 grid_layout_widget_8 = QWidget(add_record) grid_layout_8 = QGridLayout(grid_layout_widget_8) win_title = QLabel(grid_layout_widget_8) grid_layout_widget_24 = QWidget(add_record) grid_layout_24 = QGridLayout(grid_layout_widget_24) win_show = QLineEdit(grid_layout_widget_24) # 可卖数量和显示框 grid_layout_widget_9 = QWidget(add_record) grid_layout_9 = QGridLayout(grid_layout_widget_9) can_sale_num_title = QLabel(grid_layout_widget_9) grid_layout_widget_23 = QWidget(add_record) grid_layout_23 = QGridLayout(grid_layout_widget_23) can_sale_num_show = QLineEdit(grid_layout_widget_23) # 查询按钮 计算按钮 保存按钮 # grid_layout_widget_26 = QWidget(add_record) # grid_layout_26 = QGridLayout(grid_layout_widget_26) # query_button = QPushButton(grid_layout_widget_26) # grid_layout_widget_27 = QWidget(add_record) # grid_layout_27 = QGridLayout(grid_layout_widget_27) # compute_button = QPushButton(grid_layout_widget_27) grid_layout_widget_28 = QWidget(add_record) grid_layout_28 = QGridLayout(grid_layout_widget_28) save_button = QPushButton(grid_layout_widget_28) grid_layout_widget_29 = QWidget(add_record) grid_layout_29 = QGridLayout(grid_layout_widget_29) text_edit = QTextEdit(grid_layout_widget_29) menubar = QMenuBar(WINDOW) edit = QMenu(menubar) tool = QMenu(menubar) program = QMenu(menubar) help = QMenu(menubar) add = QAction(WINDOW) query = QAction(WINDOW) delete_record = QAction(WINDOW) add_share = QAction(WINDOW) import_share = QAction(WINDOW) login = QAction(WINDOW) logout = QAction(WINDOW) exit = QAction(WINDOW) about = QAction(WINDOW) slot_func = None @classmethod def init_window(cls): cls.slot_func = SlotFunc(cls) cls.init_widget() cls.init_button() cls.init_menu() cls.set_style_sheet() cls.init_text() cls.add_slot_func() QMetaObject.connectSlotsByName(WINDOW) @classmethod def init_menu(cls): WINDOW.setCentralWidget(CENTRAL_WIDGET) cls.menubar.setGeometry(QRect(0, 0, 960, 23)) cls.menubar.setObjectName(_fromUtf8("menubar")) cls.edit.setObjectName(_fromUtf8("edit")) cls.tool.setObjectName(_fromUtf8("tool")) cls.program.setObjectName(_fromUtf8("program")) cls.help.setObjectName(_fromUtf8("help")) WINDOW.setMenuBar(cls.menubar) cls.statusbar.setObjectName(_fromUtf8("statusbar")) WINDOW.setStatusBar(cls.statusbar) cls.add.setObjectName(_fromUtf8("add")) cls.query.setObjectName(_fromUtf8("query")) cls.delete_record.setObjectName(_fromUtf8("delete_record")) cls.add_share.setObjectName(_fromUtf8("add_share")) cls.import_share.setObjectName(_fromUtf8("import_share")) cls.login.setObjectName(_fromUtf8("login")) cls.logout.setObjectName(_fromUtf8("logout")) cls.exit.setObjectName(_fromUtf8("exit")) cls.about.setObjectName(_fromUtf8("about")) cls.edit.addAction(cls.add) cls.edit.addAction(cls.query) cls.edit.addAction(cls.delete_record) cls.tool.addAction(cls.add_share) cls.tool.addAction(cls.import_share) cls.tool.addSeparator() cls.tool.addAction(cls.login) cls.tool.addAction(cls.logout) cls.program.addAction(cls.exit) cls.help.addAction(cls.about) cls.menubar.addAction(cls.edit.menuAction()) cls.menubar.addAction(cls.tool.menuAction()) cls.menubar.addAction(cls.program.menuAction()) cls.menubar.addAction(cls.help.menuAction()) @classmethod def add_slot_func(cls): """增加槽函数""" cls.share_code_input.textChanged.connect( cls.slot_func.query_share_code) cls.save_button.clicked.connect(cls.slot_func.save_record) @classmethod def init_button(cls): """初始化按钮""" # cls.grid_layout_widget_26.setGeometry(QRect(160, 390, 121, 50)) # cls.grid_layout_widget_26.setObjectName(_fromUtf8("grid_layout_widget_26")) # cls.grid_layout_26.setObjectName(_fromUtf8("grid_layout_26")) # cls.query_button.setFont(WindowCons.get_font(bold=True)) # cls.query_button.setFlat(False) # cls.query_button.setObjectName(_fromUtf8("query_button")) # cls.grid_layout_26.addWidget(cls.query_button, 0, 0, 1, 1) # cls.grid_layout_widget_27.setGeometry(QRect(300, 390, 121, 50)) # cls.grid_layout_widget_27.setObjectName(_fromUtf8("grid_layout_widget_27")) # cls.grid_layout_27.setObjectName(_fromUtf8("grid_layout_27")) # cls.compute_button.setFont(WindowCons.get_font(bold=True)) # cls.compute_button.setObjectName(_fromUtf8("compute_button")) # cls.grid_layout_27.addWidget(cls.compute_button, 0, 0, 1, 1) cls.grid_layout_widget_28.setGeometry(QRect(440, 390, 121, 50)) cls.grid_layout_widget_28.setObjectName( _fromUtf8("grid_layout_widget_28")) cls.grid_layout_28.setObjectName(_fromUtf8("grid_layout_28")) cls.save_button.setFont(WindowCons.get_font(bold=True)) cls.save_button.setObjectName(_fromUtf8("save_button")) cls.grid_layout_28.addWidget(cls.save_button, 0, 0, 1, 1) cls.grid_layout_widget_29.setGeometry(QRect(570, 390, 160, 73)) cls.grid_layout_widget_29.setObjectName( _fromUtf8("grid_layout_widget_29")) cls.grid_layout_29.setObjectName(_fromUtf8("grid_layout_29")) cls.text_edit.setEnabled(False) cls.text_edit.setReadOnly(True) cls.text_edit.setFrameShape(False) cls.text_edit.setObjectName(_fromUtf8("textEdit")) cls.grid_layout_29.addWidget(cls.text_edit, 0, 0, 1, 1) @classmethod def set_style_sheet(cls): """设置样式""" # cls.query_button.setStyleSheet(WindowCons.button_style()) cls.save_button.setStyleSheet(WindowCons.button_style()) # cls.compute_button.setStyleSheet(WindowCons.button_style()) cls.add_record.setStyleSheet(WindowCons.background_image()) cls.title.setStyleSheet(WindowCons.LIGHT_BLUE_STYLE) cls.sale_num_title.setStyleSheet(WindowCons.WHITE_STYLE) cls.share_name_title.setStyleSheet(WindowCons.WHITE_STYLE) cls.sale_price_title.setStyleSheet(WindowCons.WHITE_STYLE) cls.buy_date_title.setStyleSheet(WindowCons.WHITE_STYLE) cls.win_title.setStyleSheet(WindowCons.WHITE_STYLE) cls.buy_num_title.setStyleSheet(WindowCons.WHITE_STYLE) cls.can_sale_num_title.setStyleSheet(WindowCons.WHITE_STYLE) cls.have_num_title.setStyleSheet(WindowCons.WHITE_STYLE) cls.share_code_title.setStyleSheet(WindowCons.WHITE_STYLE) cls.buy_price_title.setStyleSheet(WindowCons.WHITE_STYLE) cls.have_avg_price.setStyleSheet(WindowCons.WHITE_STYLE) cls.sale_date_title.setStyleSheet(WindowCons.WHITE_STYLE) # cls.text_edit.setAttribute(Qt.WA_TranslucentBackground, True) # cls.text_edit.repaint() cls.text_edit.setStyleSheet(WindowCons.TRANSPARENT) palette1 = QPalette() palette1.setBrush( cls.add_record.backgroundRole(), QBrush(QPixmap(':backgroud.png').scaled(cls.add_record.size()))) cls.add_record.setPalette(palette1) cls.add_record.setStyleSheet(WindowCons.background_image()) @classmethod def init_widget(cls): CENTRAL_WIDGET.setObjectName(_fromUtf8("centralwidget")) cls.add_record.setGeometry(QRect(-1, -1, 961, 561)) cls.add_record.setObjectName(_fromUtf8("add_record")) cls.grid_layout_widget.setGeometry(QRect(50, 10, 314, 50)) cls.grid_layout_widget.setObjectName(_fromUtf8("gridLayoutWidget")) cls.grid_layout.setObjectName(_fromUtf8("gridLayout")) cls.title.setFont(WindowCons.get_font(size=16, weight=50)) cls.title.setTextFormat(Qt.PlainText) cls.title.setScaledContents(False) cls.title.setAlignment(Qt.AlignCenter) cls.title.setObjectName(_fromUtf8("title")) cls.grid_layout.addWidget(cls.title, 0, 0, 1, 1) cls._init_labels() @classmethod def init_text(cls): """初始化文字""" WINDOW.setWindowTitle(_translate("MainWindow", "驰骋A股", None)) cls.title.setText(_translate("MainWindow", "新增交易记录", None)) cls.share_code_title.setText(_translate("MainWindow", "股票代码", None)) cls.buy_date_title.setText(_translate("MainWindow", "买入日期", None)) cls.buy_price_title.setText(_translate("MainWindow", "买入价格", None)) cls.buy_num_title.setText(_translate("MainWindow", "买入数量", None)) cls.have_avg_price.setText(_translate("MainWindow", "持仓均价", None)) cls.have_num_title.setText(_translate("MainWindow", "持仓数量", None)) cls.win_title.setText(_translate("MainWindow", "当前盈利", None)) cls.can_sale_num_title.setText(_translate("MainWindow", "可卖数量", None)) cls.sale_date_title.setText(_translate("MainWindow", "卖出日期", None)) cls.sale_price_title.setText(_translate("MainWindow", "卖出价格", None)) cls.share_name_title.setText(_translate("MainWindow", "股票名称", None)) cls.sale_num_title.setText(_translate("MainWindow", "卖出数量", None)) # cls.query_button.setText(_translate("MainWindow", "查询", None)) # cls.compute_button.setText(_translate("MainWindow", "计算", None)) cls.save_button.setText(_translate("MainWindow", "保存", None)) cls.text_edit.setHtml( _translate( "MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" "</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">数量单位:手(1手=100股)</p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">货币单位:元</p></body></html>", None)) cls.edit.setTitle(_translate("MainWindow", "编辑", None)) cls.tool.setTitle(_translate("MainWindow", "工具", None)) cls.program.setTitle(_translate("MainWindow", "程序", None)) cls.help.setTitle(_translate("MainWindow", "帮助", None)) cls.add.setText(_translate("MainWindow", "新增交易记录", None)) cls.query.setText(_translate("MainWindow", "查询交易记录", None)) cls.delete_record.setText(_translate("MainWindow", "删除交易记录", None)) cls.add_share.setText(_translate("MainWindow", "新增股票信息", None)) cls.import_share.setText(_translate("MainWindow", "导入股票信息", None)) cls.login.setText(_translate("MainWindow", "登录", None)) cls.logout.setText(_translate("MainWindow", "注销", None)) cls.exit.setText(_translate("MainWindow", "退出", None)) cls.about.setText(_translate("MainWindow", "关于", None)) cls.statusbar.showMessage( "本程序仅限内部人员使用,如作他用所承受的法律责任一概与作者无关(使用即代表你同意上述观点)") cls.statusbar.setStyleSheet(WindowCons.RED_STYLE) @classmethod def _init_labels(cls): """初始化页面的label""" cls.__init_share_code() # 初始化股票代码以及输入框 cls.__init_share_name() # 初始化股票名称以及显示框 cls.__init_buy_date() # 初始化买入日期以及输入框 cls.__init_sale_date() # 初始化卖出日期以及输入框 cls.__init_buy_num() # 初始化买入数量以及输入框 cls.__init_sale_num() # 初始化卖出数量以及输入框 cls.__init_buy_price() # 初始化买入价格以及输入框 cls.__init_sale_price() # 初始化卖出价格以及输入框 cls.__init_buy_avg_price() # 初始化平均价以及显示框 cls.__init_have_num() # 初始化持仓数量以及显示框 cls.__init_have_win() # 初始化当前股票盈利情况以及显示框 cls.__can_sale_num() # 初始化可卖数量以及显示框 @classmethod def __init_share_code(cls): cls.grid_layout_widget_2.setGeometry(QRect(160, 60, 101, 41)) cls.grid_layout_widget_2.setObjectName(_fromUtf8("gridLayoutWidget_2")) cls.grid_layout_2.setObjectName(_fromUtf8("gridLayout_2")) cls.share_code_title.setFont(WindowCons.get_font(bold=True)) cls.share_code_title.setTextFormat(Qt.PlainText) cls.share_code_title.setAlignment(Qt.AlignCenter) cls.share_code_title.setObjectName(_fromUtf8("share_code_title")) cls.grid_layout_2.addWidget(cls.share_code_title, 0, 0, 1, 1) cls.grid_layout_widget_14.setGeometry(QRect(280, 60, 141, 50)) cls.grid_layout_widget_14.setObjectName( _fromUtf8("gridLayoutWidget_14")) cls.grid_layout_14.setObjectName(_fromUtf8("gridLayout_14")) cls.share_code_input.setFont( WindowCons.get_font(weight=50, family=WindowCons.YAHEI_UI_FAMILY)) cls.share_code_input.setObjectName(_fromUtf8("share_code_input")) cls.share_code_input.setValidator(RegExpValidator()) cls.grid_layout_14.addWidget(cls.share_code_input, 0, 0, 1, 1) @classmethod def __init_share_name(cls): cls.grid_layout_widget_12.setGeometry(QRect(450, 60, 101, 41)) cls.grid_layout_widget_12.setObjectName( _fromUtf8("gridLayoutWidget_12")) cls.grid_layout_12.setObjectName(_fromUtf8("gridLayout_12")) cls.share_name_title.setFont(WindowCons.get_font(bold=True)) cls.share_name_title.setTextFormat(Qt.PlainText) cls.share_name_title.setAlignment(Qt.AlignCenter) cls.share_name_title.setObjectName(_fromUtf8("share_name_title")) cls.grid_layout_12.addWidget(cls.share_name_title, 0, 0, 1, 1) cls.grid_layout_widget_21.setGeometry(QRect(570, 60, 141, 50)) cls.grid_layout_widget_21.setObjectName( _fromUtf8("grid_layout_widget_21")) cls.grid_layout_21.setObjectName(_fromUtf8("grid_layout_21")) cls.share_name_show.setEnabled(True) cls.share_name_show.setFont( WindowCons.get_font(weight=50, family=WindowCons.YAHEI_LIGHT_FAMILY)) cls.share_name_show.setReadOnly(True) cls.share_name_show.setFrame(False) cls.share_name_show.setObjectName(_fromUtf8("share_name_show")) cls.grid_layout_21.addWidget(cls.share_name_show, 0, 0, 1, 1) @classmethod def __init_buy_date(cls): cls.grid_layout_widget_3.setGeometry(QRect(160, 110, 101, 41)) cls.grid_layout_widget_3.setObjectName(_fromUtf8("gridLayoutWidget_3")) cls.grid_layout_3.setObjectName(_fromUtf8("gridLayout_3")) cls.buy_date_title.setFont(WindowCons.get_font(bold=True)) cls.buy_date_title.setTextFormat(Qt.PlainText) cls.buy_date_title.setAlignment(Qt.AlignCenter) cls.buy_date_title.setObjectName(_fromUtf8("buy_date_title")) cls.grid_layout_3.addWidget(cls.buy_date_title, 0, 0, 1, 1) cls.grid_layout_widget_15.setGeometry(QRect(280, 110, 141, 41)) cls.grid_layout_widget_15.setObjectName( _fromUtf8("gridLayoutWidget_15")) cls.grid_layout_15.setObjectName(_fromUtf8("gridLayout_15")) cls.buy_date_input.setEnabled(True) size_policy = WindowCons.get_size_policy(cls.buy_date_input) cls.buy_date_input.setSizePolicy(size_policy) cls.buy_date_input.setFont( WindowCons.get_font(family=WindowCons.YAHEI_LIGHT_FAMILY, size=12)) cls.buy_date_input.setWrapping(False) cls.buy_date_input.setCalendarPopup(True) cls.buy_date_input.setFrame(False) cls.buy_date_input.setDate( QDate(datetime.datetime.date(datetime.datetime.now()))) cls.buy_date_input.setObjectName(_fromUtf8("buy_date_input")) cls.grid_layout_15.addWidget(cls.buy_date_input, 0, 0, 1, 1) @classmethod def __init_sale_date(cls): cls.grid_layout_widget_10.setGeometry(QRect(450, 110, 101, 41)) cls.grid_layout_widget_10.setObjectName( _fromUtf8("gridLayoutWidget_10")) cls.grid_layout_10.setObjectName(_fromUtf8("gridLayout_10")) cls.sale_date_title.setFont(WindowCons.get_font(bold=True)) cls.sale_date_title.setTextFormat(Qt.PlainText) cls.sale_date_title.setAlignment(Qt.AlignCenter) cls.sale_date_title.setObjectName(_fromUtf8("buy_date_title_2")) cls.grid_layout_10.addWidget(cls.sale_date_title, 0, 0, 1, 1) cls.grid_layout_widget_20.setGeometry(QRect(570, 110, 141, 41)) cls.grid_layout_widget_20.setObjectName( _fromUtf8("gridLayoutWidget_20")) cls.grid_layout_20.setObjectName(_fromUtf8("gridLayout_20")) cls.sale_date_input.setFont( WindowCons.get_font(size=12, family=WindowCons.YAHEI_LIGHT_FAMILY)) cls.sale_date_input.setWrapping(False) cls.sale_date_input.setFrame(False) cls.sale_date_input.setCalendarPopup(True) cls.sale_date_input.setDate( QDate(datetime.datetime.date(datetime.datetime.now()))) cls.sale_date_input.setObjectName(_fromUtf8("sale_date_input")) cls.grid_layout_20.addWidget(cls.sale_date_input, 0, 0, 1, 1) @classmethod def __init_buy_num(cls): cls.grid_layout_widget_5.setGeometry(QRect(160, 210, 101, 41)) cls.grid_layout_widget_5.setObjectName(_fromUtf8("gridLayoutWidget_5")) cls.grid_layout_5.setObjectName(_fromUtf8("gridLayout_5")) cls.buy_num_title.setFont(WindowCons.get_font(bold=True)) cls.buy_num_title.setTextFormat(Qt.PlainText) cls.buy_num_title.setAlignment(Qt.AlignCenter) cls.buy_num_title.setObjectName(_fromUtf8("buy_num_title")) cls.grid_layout_5.addWidget(cls.buy_num_title, 0, 0, 1, 1) cls.grid_layout_widget_16.setGeometry(QRect(280, 210, 141, 41)) cls.grid_layout_widget_16.setObjectName( _fromUtf8("gridLayoutWidget_16")) cls.grid_layout_16.setObjectName(_fromUtf8("gridLayout_16")) cls.buy_num_input.setValidator(IntValidator()) cls.buy_num_input.setText("100") cls.buy_num_input.setFont( WindowCons.get_font(family=WindowCons.JUI_LIGHT_FAMILY)) cls.buy_num_input.setFrame(False) cls.buy_num_input.setObjectName(_fromUtf8("buy_num_input")) cls.grid_layout_16.addWidget(cls.buy_num_input, 0, 0, 1, 1) @classmethod def __init_sale_num(cls): # 初始化卖出数量以及输入框 cls.grid_layout_widget_25.setGeometry(QRect(570, 210, 141, 41)) cls.grid_layout_widget_25.setObjectName( _fromUtf8("gridLayoutWidget_25")) cls.grid_layout_25.setObjectName(_fromUtf8("gridLayout_25")) cls.sale_num_input.setValidator(IntValidator()) cls.sale_num_input.setText("100") cls.sale_num_input.setFont( WindowCons.get_font(family=WindowCons.JUI_LIGHT_FAMILY)) cls.sale_num_input.setFrame(False) cls.sale_num_input.setObjectName(_fromUtf8("sale_num_input")) cls.grid_layout_25.addWidget(cls.sale_num_input, 0, 0, 1, 1) cls.grid_layout_widget_13.setGeometry(QRect(450, 210, 101, 41)) cls.grid_layout_widget_13.setObjectName( _fromUtf8("gridLayoutWidget_13")) cls.grid_layout_13.setObjectName(_fromUtf8("gridLayout_13")) cls.sale_num_title.setFont(WindowCons.get_font(bold=True)) cls.sale_num_title.setTextFormat(Qt.PlainText) cls.sale_num_title.setAlignment(Qt.AlignCenter) cls.sale_num_title.setObjectName(_fromUtf8("buy_num_title_2")) cls.grid_layout_13.addWidget(cls.sale_num_title, 0, 0, 1, 1) @classmethod def __init_buy_price(cls): # 初始化买入价格以及输入框 cls.grid_layout_widget_4.setGeometry(QRect(160, 160, 101, 41)) cls.grid_layout_widget_4.setObjectName(_fromUtf8("gridLayoutWidget_4")) cls.grid_layout_4.setObjectName(_fromUtf8("gridLayout_4")) cls.buy_price_title.setFont(WindowCons.get_font(bold=True)) cls.buy_price_title.setTextFormat(Qt.PlainText) cls.buy_price_title.setAlignment(Qt.AlignCenter) cls.buy_price_title.setObjectName(_fromUtf8("buy_price_title")) cls.grid_layout_4.addWidget(cls.buy_price_title, 0, 0, 1, 1) cls.grid_layout_widget_17.setGeometry(QRect(280, 160, 141, 41)) cls.grid_layout_widget_17.setObjectName( _fromUtf8("gridLayoutWidget_17")) cls.grid_layout_17.setObjectName(_fromUtf8("gridLayout_17")) cls.buy_price_input.setFont( WindowCons.get_font(family=WindowCons.YAHEI_LIGHT_FAMILY)) cls.buy_price_input.setFrame(False) cls.buy_price_input.setValidator(DoubleValidator()) cls.buy_price_input.setText("0.00") cls.buy_price_input.setObjectName(_fromUtf8("buy_price_input")) cls.grid_layout_17.addWidget(cls.buy_price_input, 0, 0, 1, 1) @classmethod def __init_sale_price(cls): # 初始化卖出价格以及输入框 cls.grid_layout_widget_11.setGeometry(QRect(450, 160, 101, 41)) cls.grid_layout_widget_11.setObjectName( _fromUtf8("gridLayoutWidget_11")) cls.grid_layout_11.setObjectName(_fromUtf8("gridLayout_11")) cls.sale_price_title.setFont(WindowCons.get_font(bold=True)) cls.sale_price_title.setTextFormat(Qt.PlainText) cls.sale_price_title.setAlignment(Qt.AlignCenter) cls.sale_price_title.setObjectName(_fromUtf8("cls.sale_price_title")) cls.grid_layout_11.addWidget(cls.sale_price_title, 0, 0, 1, 1) cls.grid_layout_widget_22.setGeometry(QRect(570, 160, 141, 41)) cls.grid_layout_widget_22.setObjectName( _fromUtf8("grid_layout_widget_22")) cls.grid_layout_22.setObjectName(_fromUtf8("grid_layout_22")) cls.sale_price_input.setFont( WindowCons.get_font(family=WindowCons.YAHEI_LIGHT_FAMILY)) cls.sale_price_input.setFrame(False) cls.sale_price_input.setText("0.00") cls.sale_price_input.setValidator(DoubleValidator()) cls.sale_price_input.setObjectName(_fromUtf8("sale_price_input")) cls.grid_layout_22.addWidget(cls.sale_price_input, 0, 0, 1, 1) @classmethod def __init_buy_avg_price(cls): # 初始化平均价以及显示框 cls.grid_layout_widget_6.setGeometry(QRect(160, 260, 101, 41)) cls.grid_layout_widget_6.setObjectName( _fromUtf8("grid_layout_widget_6")) cls.grid_layout_6.setObjectName(_fromUtf8("grid_layout_6")) cls.have_avg_price.setFont(WindowCons.get_font(bold=True)) cls.have_avg_price.setTextFormat(Qt.PlainText) cls.have_avg_price.setAlignment(Qt.AlignCenter) cls.have_avg_price.setObjectName(_fromUtf8("have_avg_price")) cls.grid_layout_6.addWidget(cls.have_avg_price, 0, 0, 1, 1) cls.grid_layout_widget_19.setGeometry(QRect(280, 260, 141, 41)) cls.grid_layout_widget_19.setObjectName( _fromUtf8("grid_layout_widget_19")) cls.grid_layout_19.setObjectName(_fromUtf8("grid_layout_19")) cls.buv_avg_price_show.setEnabled(True) cls.buv_avg_price_show.setFont( WindowCons.get_font(family=WindowCons.JUI_LIGHT_FAMILY)) cls.buv_avg_price_show.setReadOnly(True) cls.buv_avg_price_show.setFrame(False) cls.buv_avg_price_show.setObjectName(_fromUtf8("buv_avg_price_show")) cls.grid_layout_19.addWidget(cls.buv_avg_price_show, 0, 0, 1, 1) @classmethod def __init_have_num(cls): # 初始化持仓数量以及显示框 cls.grid_layout_widget_7.setGeometry(QRect(160, 310, 101, 41)) cls.grid_layout_widget_7.setObjectName( _fromUtf8("grid_layout_widget_7")) cls.grid_layout_7.setObjectName(_fromUtf8("grid_layout_7")) cls.have_num_title.setFont(WindowCons.get_font(bold=True)) cls.have_num_title.setTextFormat(Qt.PlainText) cls.have_num_title.setAlignment(Qt.AlignCenter) cls.have_num_title.setObjectName(_fromUtf8("have_num_title")) cls.grid_layout_7.addWidget(cls.have_num_title, 0, 0, 1, 1) cls.grid_layout_widget_18.setGeometry(QRect(280, 310, 141, 41)) cls.grid_layout_widget_18.setObjectName( _fromUtf8("grid_layout_widget_18")) cls.grid_layout_18.setObjectName(_fromUtf8("grid_layout_18")) cls.have_num_show.setFont( WindowCons.get_font(family=WindowCons.JUI_LIGHT_FAMILY)) cls.have_num_show.setReadOnly(True) cls.have_num_show.setFrame(False) cls.have_num_show.setObjectName(_fromUtf8("have_num_show")) cls.grid_layout_18.addWidget(cls.have_num_show, 0, 0, 1, 1) @classmethod def __init_have_win(cls): # 初始化当前股票盈利情况以及显示框 cls.grid_layout_widget_8.setGeometry(QRect(450, 260, 101, 41)) cls.grid_layout_widget_8.setObjectName( _fromUtf8("grid_layout_widget_8")) cls.grid_layout_8.setObjectName(_fromUtf8("grid_layout_8")) cls.win_title.setFont(WindowCons.get_font(bold=True)) cls.win_title.setTextFormat(Qt.PlainText) cls.win_title.setAlignment(Qt.AlignCenter) cls.win_title.setObjectName(_fromUtf8("win_title")) cls.grid_layout_8.addWidget(cls.win_title, 0, 0, 1, 1) cls.grid_layout_widget_24.setGeometry(QRect(570, 260, 141, 41)) cls.grid_layout_widget_24.setObjectName( _fromUtf8("grid_layout_widget_24")) cls.grid_layout_24.setObjectName(_fromUtf8("grid_layout_24")) cls.win_show.setEnabled(True) cls.win_show.setFont( WindowCons.get_font(family=WindowCons.JUI_LIGHT_FAMILY)) cls.win_show.setReadOnly(True) cls.win_show.setObjectName(_fromUtf8("win_show")) cls.win_show.setFrame(False) cls.grid_layout_24.addWidget(cls.win_show, 0, 0, 1, 1) @classmethod def __can_sale_num(cls): # 初始化可卖数量以及显示框 cls.grid_layout_widget_9.setGeometry(QRect(450, 310, 101, 41)) cls.grid_layout_widget_9.setObjectName( _fromUtf8("grid_layout_widget_9")) cls.grid_layout_9.setObjectName(_fromUtf8("gridLayout_9")) cls.can_sale_num_title.setFont(WindowCons.get_font(bold=True)) cls.can_sale_num_title.setTextFormat(Qt.PlainText) cls.can_sale_num_title.setAlignment(Qt.AlignCenter) cls.can_sale_num_title.setObjectName(_fromUtf8("can_sale_num_title")) cls.grid_layout_9.addWidget(cls.can_sale_num_title, 0, 0, 1, 1) cls.grid_layout_widget_23.setGeometry(QRect(570, 310, 141, 41)) cls.grid_layout_widget_23.setObjectName( _fromUtf8("gridLayoutWidget_23")) cls.grid_layout_23.setObjectName(_fromUtf8("grid_layout_23")) cls.can_sale_num_show.setEnabled(True) cls.can_sale_num_show.setFont( WindowCons.get_font(family=WindowCons.JUI_LIGHT_FAMILY)) cls.can_sale_num_show.setReadOnly(True) cls.can_sale_num_show.setFrame(False) cls.can_sale_num_show.setObjectName(_fromUtf8("can_sale_num_show")) cls.grid_layout_23.addWidget(cls.can_sale_num_show, 0, 0, 1, 1)
def setupMainWindow(self): self.resize(800, 600) screen = QDesktopWidget().screenGeometry() size = self.geometry() self.move(( screen.width()-size.width())/2, (screen.height()-size.height())/2) self.setWindowTitle( '{} - {}'.format(self.settings.notebookName, __appname__)) self.viewedList.setFixedHeight(25) self.noteSplitter.addWidget(self.notesEdit) self.noteSplitter.addWidget(self.notesView) mainSplitter = QSplitter(Qt.Vertical) mainSplitter.setChildrenCollapsible(False) mainSplitter.addWidget(self.viewedList) mainSplitter.addWidget(self.noteSplitter) mainSplitter.addWidget(self.findBar) self.setCentralWidget(mainSplitter) self.searchEdit.returnPressed.connect(self.searchNote) self.quickNoteNav.returnPressed.connect(self.openFuncWrapper) searchLayout = QVBoxLayout() searchLayout.addWidget(self.searchEdit) searchLayout.addWidget(self.searchView) self.searchTab.setLayout(searchLayout) self.tocTree.header().close() indexLayout = QVBoxLayout(self.notesTab) indexLayout.addWidget(self.quickNoteNav) indexLayout.addWidget(self.notesTree) self.dockIndex.setObjectName("Index") self.dockIndex.setWidget(self.notesTab) self.dockSearch.setObjectName("Search") self.dockSearch.setWidget(self.searchTab) self.dockToc.setObjectName("TOC") self.dockToc.setWidget(self.tocTree) self.dockAttachment.setObjectName("Attachment") self.dockAttachment.setWidget(self.attachmentView) self.setDockOptions(QMainWindow.VerticalTabs) self.addDockWidget(Qt.LeftDockWidgetArea, self.dockIndex) self.addDockWidget(Qt.LeftDockWidgetArea, self.dockSearch) self.addDockWidget(Qt.LeftDockWidgetArea, self.dockToc) self.addDockWidget(Qt.LeftDockWidgetArea, self.dockAttachment) self.tabifyDockWidget(self.dockIndex, self.dockSearch) self.tabifyDockWidget(self.dockSearch, self.dockToc) self.tabifyDockWidget(self.dockToc, self.dockAttachment) self.setTabPosition(Qt.LeftDockWidgetArea, QTabWidget.North) self.dockIndex.raise_() # Put dockIndex on top of the tab stack menuBar = QMenuBar(self) self.setMenuBar(menuBar) menuFile = menuBar.addMenu(self.tr('&File')) menuEdit = menuBar.addMenu(self.tr('&Edit')) menuView = menuBar.addMenu(self.tr('&View')) menuHelp = menuBar.addMenu(self.tr('&Help')) # menuFile menuFile.addAction(self.actions['newPage']) menuFile.addAction(self.actions['newSubpage']) menuFile.addAction(self.actions['NBSettings']) menuFile.addAction(self.actions['MDSettings']) menuFile.addAction(self.actions['importPage']) menuFile.addAction(self.actions['openNotebook']) menuFile.addAction(self.actions['reIndex']) menuFile.addSeparator() menuFile.addAction(self.actions['save']) menuFile.addAction(self.actions['saveAs']) menuFile.addAction(self.actions['print_']) menuExport = menuFile.addMenu(self.tr('&Export')) menuExport.addAction(self.actions['html']) menuFile.addSeparator() menuFile.addAction(self.actions['renamePage']) menuFile.addAction(self.actions['delPage']) menuFile.addSeparator() menuFile.addAction(self.actions['quit']) # menuEdit menuEdit.addAction(self.actions['undo']) menuEdit.addAction(self.actions['redo']) menuEdit.addAction(self.actions['findText']) menuEdit.addSeparator() menuEdit.addAction(self.actions['sortLines']) menuEdit.addAction(self.actions['insertImage']) # menuView menuView.addAction(self.actions['edit']) menuView.addAction(self.actions['split']) menuView.addAction(self.actions['flipEditAndView']) menuShowHide = menuView.addMenu(self.tr('Show/Hide')) menuShowHide.addAction(self.dockIndex.toggleViewAction()) menuShowHide.addAction(self.dockSearch.toggleViewAction()) menuShowHide.addAction(self.dockToc.toggleViewAction()) menuShowHide.addAction(self.dockAttachment.toggleViewAction()) #menuMode = menuView.addMenu(self.tr('Mode')) #menuMode.addAction(self.actionLeftAndRight) #menuMode.addAction(self.actionUpAndDown) # menuHelp menuHelp.addAction(self.actions['readme']) menuHelp.addAction(self.actions['changelog']) menuHelp.addAction(self.actions['aboutQt']) toolBar = QToolBar(self.tr("toolbar"), self) toolBar.setObjectName("toolbar") # needed in saveState() toolBar.setIconSize(QSize(16, 16)) toolBar.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) self.addToolBar(Qt.TopToolBarArea, toolBar) toolBar.addAction(self.actions['edit']) toolBar.addAction(self.actions['split']) self.findEdit.returnPressed.connect(self.findText) self.findBar.addWidget(self.findEdit) self.findBar.addWidget(self.checkBox) self.findBar.addAction(self.actions['findPrev']) self.findBar.addAction(self.actions['find']) self.findBar.setVisible(False) self.findBar.visibilityChanged.connect(self.findBarVisibilityChanged) self.setStatusBar(self.statusBar) self.statusBar.addWidget(self.statusLabel, 1) self.notesTree.currentItemChanged.connect( self.currentItemChangedWrapper) self.tocTree.itemClicked.connect(self.tocNavigate) self.notesEdit.textChanged.connect(self.noteEditted) self.notesEdit.document( ).modificationChanged.connect(self.modificationChanged) self.updateRecentViewedNotes() notes = self.settings.recentViewedNotes() if len(notes) != 0: item = self.notesTree.pageToItem(notes[0]) self.notesTree.setCurrentItem(item)
class QtMenuBar(QtToolkitObject, ProxyMenuBar): """ A Qt implementation of an Enaml ProxyMenuBar. """ #: A reference to the widget created by the proxy. widget = Typed(QMenuBar) #-------------------------------------------------------------------------- # Initialization API #-------------------------------------------------------------------------- def create_widget(self): """ Create the underlying menu bar widget. """ # Qt behaves better when creating the menu bar without a parent. self.widget = QMenuBar() def init_layout(self): """ Initialize the layout for the menu bar. """ super(QtMenuBar, self).init_layout() widget = self.widget for child in self.children(): if isinstance(child, QtMenu): widget.addMenu(child.widget) def destroy(self): """ A reimplemented destructor. Qt takes ownership of the menubar, so the destructor does not attempt to unparent the menubar. The child_removed handler on the main window will reset the menu bar. """ del self.declaration #-------------------------------------------------------------------------- # Child Events #-------------------------------------------------------------------------- def find_next_action(self, child): """ Get the QAction instance which follows the child. Parameters ---------- child : QtMenu The child menu of interest. Returns ------- result : QAction or None The QAction which comes immediately after the actions of the given child, or None if no actions follow the child. """ found = False for dchild in self.children(): if found: if isinstance(dchild, QtMenu): return dchild.widget.menuAction() else: found = dchild is child def child_added(self, child): """ Handle the child added event for a QtMenuBar. """ super(QtMenuBar, self).child_added(child) if isinstance(child, QtMenu): before = self.find_next_action(child) self.widget.insertMenu(before, child.widget) def child_removed(self, child): """ Handle the child removed event for a QtMenuBar. """ super(QtMenuBar, self).child_removed(child) if isinstance(child, QtMenu): self.widget.removeAction(child.widget.menuAction())
def setupMainWindow(self): self.resize(800, 600) screen = QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2) self.setWindowTitle('{} - {}'.format(self.settings.notebookName, __appname__)) self.viewedList.setFixedHeight(25) self.noteSplitter.addWidget(self.notesEdit) self.noteSplitter.addWidget(self.notesView) mainSplitter = QSplitter(Qt.Vertical) mainSplitter.setChildrenCollapsible(False) mainSplitter.addWidget(self.viewedList) mainSplitter.addWidget(self.noteSplitter) mainSplitter.addWidget(self.findBar) self.setCentralWidget(mainSplitter) self.searchEdit.returnPressed.connect(self.searchNote) self.quickNoteNav.returnPressed.connect(self.openFuncWrapper) searchLayout = QVBoxLayout() searchLayout.addWidget(self.searchEdit) searchLayout.addWidget(self.searchView) self.searchTab.setLayout(searchLayout) indexLayout = QVBoxLayout(self.notesTab) indexLayout.addWidget(self.quickNoteNav) indexLayout.addWidget(self.notesTree) self.dockIndex.setObjectName("Index") self.dockIndex.setWidget(self.notesTab) self.dockSearch.setObjectName("Search") self.dockSearch.setWidget(self.searchTab) self.dockToc.setObjectName("TOC") self.dockToc.setWidget(self.tocTree) self.dockAttachment.setObjectName("Attachment") self.dockAttachment.setWidget(self.attachmentView) self.setDockOptions(QMainWindow.VerticalTabs) self.addDockWidget(Qt.LeftDockWidgetArea, self.dockIndex) self.addDockWidget(Qt.LeftDockWidgetArea, self.dockSearch) self.addDockWidget(Qt.LeftDockWidgetArea, self.dockToc) self.addDockWidget(Qt.LeftDockWidgetArea, self.dockAttachment) self.tabifyDockWidget(self.dockIndex, self.dockSearch) self.tabifyDockWidget(self.dockSearch, self.dockToc) self.tabifyDockWidget(self.dockToc, self.dockAttachment) self.setTabPosition(Qt.LeftDockWidgetArea, QTabWidget.North) self.dockIndex.raise_() # Put dockIndex on top of the tab stack menuBar = QMenuBar(self) self.setMenuBar(menuBar) menuFile = menuBar.addMenu(self.tr('&File')) menuEdit = menuBar.addMenu(self.tr('&Edit')) menuView = menuBar.addMenu(self.tr('&View')) menuHelp = menuBar.addMenu(self.tr('&Help')) # menuFile menuFile.addAction(self.actions['newPage']) menuFile.addAction(self.actions['newSubpage']) menuFile.addAction(self.actions['NBSettings']) menuFile.addAction(self.actions['MDSettings']) menuFile.addAction(self.actions['importPage']) menuFile.addAction(self.actions['openNotebook']) menuFile.addAction(self.actions['reIndex']) menuFile.addSeparator() menuFile.addAction(self.actions['save']) menuFile.addAction(self.actions['saveAs']) menuFile.addAction(self.actions['print_']) menuExport = menuFile.addMenu(self.tr('&Export')) menuExport.addAction(self.actions['html']) menuFile.addSeparator() menuFile.addAction(self.actions['renamePage']) menuFile.addAction(self.actions['delPage']) menuFile.addSeparator() menuFile.addAction(self.actions['quit']) # menuEdit menuEdit.addAction(self.actions['undo']) menuEdit.addAction(self.actions['redo']) menuEdit.addAction(self.actions['findText']) menuEdit.addAction(self.actions['findRepl']) menuEdit.addSeparator() menuEdit.addAction(self.actions['sortLines']) menuEdit.addAction(self.actions['insertImage']) # menuView menuView.addAction(self.actions['edit']) menuView.addAction(self.actions['split']) menuView.addAction(self.actions['flipEditAndView']) menuShowHide = menuView.addMenu(self.tr('Show/Hide')) menuShowHide.addAction(self.dockIndex.toggleViewAction()) menuShowHide.addAction(self.dockSearch.toggleViewAction()) menuShowHide.addAction(self.dockToc.toggleViewAction()) menuShowHide.addAction(self.dockAttachment.toggleViewAction()) #menuMode = menuView.addMenu(self.tr('Mode')) #menuMode.addAction(self.actionLeftAndRight) #menuMode.addAction(self.actionUpAndDown) # menuHelp menuHelp.addAction(self.actions['readme']) menuHelp.addAction(self.actions['changelog']) menuHelp.addAction(self.actions['aboutQt']) toolBar = QToolBar(self.tr("toolbar"), self) toolBar.setObjectName("toolbar") # needed in saveState() #toolBar.setIconSize(QSize(16, 16)) toolBar.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) self.addToolBar(Qt.TopToolBarArea, toolBar) toolBar.addAction(self.actions['edit']) toolBar.addAction(self.actions['split']) self.findEdit.returnPressed.connect(self.findText) self.findBar.addWidget(self.findEdit) self.findBar.addWidget(self.checkBox) self.findBar.addAction(self.actions['findPrev']) self.findBar.addAction(self.actions['find']) self.findBar.setVisible(False) self.findBar.visibilityChanged.connect(self.findBarVisibilityChanged) self.setStatusBar(self.statusBar) self.statusBar.addWidget(self.statusLabel, 1) self.notesTree.currentItemChanged.connect( self.currentItemChangedWrapper) self.notesTree.nvwCallback = self.newNoteDisplay self.notesTree.nvwtCallback = self.newPlainTextNoteDisplay self.tocTree.itemClicked.connect(self.tocNavigate) self.notesEdit.textChanged.connect(self.noteEditted) self.notesEdit.document().modificationChanged.connect( self.modificationChanged) self.updateRecentViewedNotes() notes = self.settings.recentViewedNotes() if len(notes) != 0: item = self.notesTree.pageToItem(notes[0]) self.notesTree.setCurrentItem(item)
def menuUi(self): extractQuit = QAction(self) extractQuit.setStatusTip('File') mainMenu = QMenuBar() fileMenu = mainMenu.addMenu('&File') exitMenu = QAction('&Exit', self) exitMenu.setShortcut('CTRL+Q') exitMenu.setStatusTip('Close Dialog') exitMenu.triggered.connect(self.lunchUnitForm) fileMenu.addAction(exitMenu) #settings menu ViewMenu = mainMenu.addMenu('&Veiws') ## student menu static items bioMenu = QAction('Biodata', self) bioMenu.setStatusTip('Bio and Contact data') bioMenu.triggered.connect( lambda state, x=1, y='k': self.lunchReport(x, y)) ViewMenu.addAction(bioMenu) academicMenu = ViewMenu.addMenu('Academic') dumpClass1 = {} for k in self.myterms: act = str(list(self.myterms[k])[0]) getResult = self.pullResults(k) studs = academicMenu.addMenu(act) for w in getResult: getRes = w['name'].split(',') getDat = w['description'].split(':::') if list(self.myterms[k])[1] in getRes: stud = QAction(getDat[0], studs) dumpClass1[k] = stud stud.triggered.connect(lambda state, x=2, term=k, rep=w[ 'id']: self.lunchReport(x, term, rep)) studs.addAction(stud) affectiveMenu = ViewMenu.addMenu('Affective') dumpClass2 = {} for k in self.myterms: act = str(self.myterms[k]) stud = QAction(act, self) dumpClass2[k] = stud stud.triggered.connect( lambda state, x=3, y=k: self.lunchReport(x, y)) affectiveMenu.addAction(stud) psychomotorMenu = ViewMenu.addMenu('Psychomotor') dumpClass3 = {} for k in self.myterms: act = str(self.myterms[k]) stud = QAction(act, self) dumpClass3[k] = stud stud.triggered.connect( lambda state, x=4, y=k: self.lunchReport(x, y)) psychomotorMenu.addAction(stud) feeMenu = ViewMenu.addMenu('Fees') dumpClass4 = {} for k in self.myterms: act = str(self.myterms[k]) stud = QAction(act, self) dumpClass4[k] = stud stud.triggered.connect( lambda state, x=5, y=k: self.lunchReport(x, y)) feeMenu.addAction(stud) printMenu = mainMenu.addMenu('&Print') exitMenu1 = QAction('&Exit', self) exitMenu1.setShortcut('CTRL+Q') exitMenu1.setStatusTip('Close Dialog') exitMenu1.triggered.connect(lambda state, x=1: self.lunchPrintForm(x)) printMenu.addAction(exitMenu1) #printMenu.triggered.connect(lambda state, x = 1:self.lunchPrintForm(x)) return mainMenu
#make the program quit on Ctrl+C import signal signal.signal(signal.SIGINT, signal.SIG_DFL) from PyQt4.QtGui import QApplication import sys from applet import Applet qapp = QApplication(sys.argv) # Create some simple applets to load defaultApplet = Applet() trackingApplet = Applet("Tracking") # Normally applets would provide their own menu items, # but for this test we'll add them here (i.e. from the outside). defaultApplet._menuWidget = QMenuBar() defaultApplet._menuWidget.setNativeMenuBar( False) # Native menus are broken on Ubuntu at the moment defaultMenu = QMenu("Default Applet", defaultApplet._menuWidget) defaultMenu.addAction("Default Action 1") defaultMenu.addAction("Default Action 2") defaultApplet._menuWidget.addMenu(defaultMenu) trackingApplet._menuWidget = QMenuBar() trackingApplet._menuWidget.setNativeMenuBar( False) # Native menus are broken on Ubuntu at the moment trackingMenu = QMenu("Tracking Applet", trackingApplet._menuWidget) trackingMenu.addAction("Tracking Options...") trackingMenu.addAction("Track...") trackingApplet._menuWidget.addMenu(trackingMenu)
class PeakMapExplorer(EmzedDialog): def __init__(self, ok_rows_container=[], parent=None): super(PeakMapExplorer, self).__init__(parent) self.setWindowFlags(Qt.Window) # Destroying the C++ object right after closing the dialog box, # otherwise it may be garbage-collected in another QThread # (e.g. the editor's analysis thread in Spyder), thus leading to # a segmentation fault on UNIX or an application crash on Windows self.ok_rows = ok_rows_container self.setAttribute(Qt.WA_DeleteOnClose) self.setWindowFlags(Qt.Window) self.gamma = 3.0 self.last_used_directory_for_load = None self.last_used_directory_for_save = None self.history = History() def keyPressEvent(self, e): # avoid closing of dialog when Esc key pressed: if e.key() != Qt.Key_Escape: return super(PeakMapExplorer, self).keyPressEvent(e) def setWindowTitle(self): if self.peakmap2 is None: title = os.path.basename(self.peakmap.meta.get("source", "")) else: p1 = os.path.basename(self.peakmap.meta.get("source", "")) p2 = os.path.basename(self.peakmap2.meta.get("source", "")) title = "yellow=%s, blue=%s" % (p1, p2) super(PeakMapExplorer, self).setWindowTitle(title) def setup(self, peakmap, peakmap2=None, table=None): self.table = table def collect_precursor_mz(pm): for s in pm: if s.precursors: if s.msLevel > 1: yield s.precursors[0][0] self.ms_levels = set(peakmap.getMsLevels()) self.precursor_mz = set(collect_precursor_mz(peakmap)) if peakmap2 is not None: self.ms_levels &= set(peakmap2.getMsLevels()) self.precursor_mz &= set(collect_precursor_mz(peakmap2)) self.ms_levels = sorted(self.ms_levels) self.precursor_mz = sorted(self.precursor_mz) self.setup_table_widgets() self.setup_input_widgets() self.history_list = QComboBox(self) self.setup_ms2_widgets() self.full_pm = peakmap self.full_pm2 = peakmap2 self.dual_mode = self.full_pm2 is not None self.current_ms_level = self.ms_levels[0] self.process_peakmap(self.current_ms_level) self.rtmin, self.rtmax, self.mzmin, self.mzmax = get_range( self.peakmap, self.peakmap2) self.setup_plot_widgets() self.setup_menu_bar() self.setup_layout() self.connect_signals_and_slots() self.setup_initial_values() self.plot_peakmap() def setup_ms2_widgets(self): self.spectra_selector_widget.set_data(self.ms_levels, self.precursor_mz) def setup_table_widgets(self): if self.table is not None: self.table_widget = create_table_widget(self.table, self) self.select_all_peaks = QPushButton("Select all peaks", self) self.unselect_all_peaks = QPushButton("Unselect all peaks", self) self.done_button = QPushButton("Done", self) def setup_menu_bar(self): self.menu_bar = QMenuBar(self) menu = QMenu("Peakmap Explorer", self.menu_bar) self.menu_bar.addMenu(menu) if not self.dual_mode: self.load_action = QAction("Load Peakmap", self) self.load_action.setShortcut(QKeySequence("Ctrl+L")) self.load_action2 = None menu.addAction(self.load_action) else: self.load_action = QAction("Load Yellow Peakmap", self) self.load_action2 = QAction("Load Blue Peakmap", self) menu.addAction(self.load_action) menu.addAction(self.load_action2) self.save_action = QAction("Save selected range as image", self) self.save_action.setShortcut(QKeySequence("Ctrl+S")) menu.addAction(self.save_action) menu = QMenu("Help", self.menu_bar) self.help_action = QAction("Help", self) self.help_action.setShortcut(QKeySequence("F1")) menu.addAction(self.help_action) self.menu_bar.addMenu(menu) def process_peakmap(self, ms_level, pre_mz_min=None, pre_mz_max=None): peakmap = self.full_pm.filter(lambda s: s.msLevel == ms_level) if ms_level > 1 and pre_mz_min is not None: peakmap = peakmap.filter( lambda s: s.precursors[0][0] >= pre_mz_min) if ms_level > 1 and pre_mz_max is not None: peakmap = peakmap.filter( lambda s: s.precursors[0][0] <= pre_mz_max) if self.full_pm2 is not None: peakmap2 = self.full_pm2.filter(lambda s: s.msLevel == ms_level) self.peakmap = peakmap if self.dual_mode: self.peakmap2 = peakmap2 else: self.peakmap2 = None for i, msl in enumerate(self.ms_levels): if msl == ms_level: pass # TODO self.ms_level.setCurrentIndex(i) self.setWindowTitle() def setup_initial_values(self): imax = self.peakmap_plotter.get_total_imax() self.image_scaling_widget.set_max_intensity(imax) self.image_scaling_widget.set_gamma(self.gamma) self.view_range_widget.set_view_range(self.rtmin, self.rtmax, self.mzmin, self.mzmax) def setup_input_widgets(self): self.image_scaling_widget = ImageScalingWidget(self) self.spectra_selector_widget = SpectraSelectorWidget(self) self.view_range_widget = ViewRangeWidget(self) def setup_plot_widgets(self): self.peakmap_plotter = PeakMapPlottingWidget() self.peakmap_plotter.set_peakmaps(self.peakmap, self.peakmap2) self.eic_plotter = EicPlottingWidget(with_range=False) self.mz_plotter = MzPlottingWidget() self.peakmap_plotter.set_logarithmic_scale(1) self.peakmap_plotter.set_gamma(self.gamma) self.eic_plotter.set_overall_range(self.rtmin, self.rtmax) self.mz_plotter.set_overall_range(self.mzmin, self.mzmax) def setup_layout(self): outer_layout = QVBoxLayout() outer_layout.addWidget(self.menu_bar) outer_layout.setStretch(0, 1) h_splitter = QSplitter(self) h_splitter.setOrientation(Qt.Horizontal) # FIRST COLUMN of h_splitter is chromatogram + peakmap: ############################ v_splitter1 = QSplitter(self) v_splitter1.setOrientation(Qt.Vertical) v_splitter1.addWidget(self.eic_plotter) v_splitter1.addWidget(self.peakmap_plotter) self.peakmap_plotter.setMinimumSize(250, 200) v_splitter1.setStretchFactor(0, 1) v_splitter1.setStretchFactor(1, 3) h_splitter.addWidget(v_splitter1) h_splitter.setStretchFactor(0, 2) # SECOND COLUMN of h_splittier holds controlx boxes + mz plot ####################### v_splitter2 = QSplitter(self) v_splitter2.setOrientation(Qt.Vertical) v_splitter2.addWidget(self.image_scaling_widget) v_splitter2.addWidget(self.spectra_selector_widget) v_splitter2.addWidget(self.view_range_widget) v_splitter2.addWidget(self.history_list) v_splitter2.addWidget(self.mz_plotter) v_splitter2.setStretchFactor(0, 0) v_splitter2.setStretchFactor(1, 0) v_splitter2.setStretchFactor(2, 0) v_splitter2.setStretchFactor(3, 0) v_splitter2.setStretchFactor(4, 1) h_splitter.addWidget(v_splitter2) h_splitter.setStretchFactor(1, 1) # THIRD COLUMN of h_splittier holds control table + buttons ########################## if self.table: frame = QFrame(self) layout = QVBoxLayout(frame) frame.setLayout(layout) layout.addWidget(self.table_widget) button_row_layout = QHBoxLayout(frame) button_row_layout.addWidget(self.select_all_peaks) button_row_layout.addWidget(self.unselect_all_peaks) button_row_layout.addWidget(self.done_button) layout.addLayout(button_row_layout) h_splitter.addWidget(frame) h_splitter.setStretchFactor(2, 2) outer_layout.addWidget(h_splitter) self.setLayout(outer_layout) outer_layout.setStretch(1, 99) def connect_signals_and_slots(self): self.image_scaling_widget.USE_LOG_SCALE.connect(self.use_logscale) self.image_scaling_widget.GAMMA_CHANGED.connect(self.gamma_changed) self.image_scaling_widget.IMIN_CHANGED.connect(self.set_image_min) self.image_scaling_widget.IMAX_CHANGED.connect(self.set_image_max) self.spectra_selector_widget.MS_LEVEL_CHOSEN.connect( self.ms_level_chosen) self.spectra_selector_widget.PRECURSOR_RANGE_CHANGED.connect( self.set_precursor_range) self.view_range_widget.RANGE_CHANGED.connect(self.update_image_range) self.connect(self.history_list, SIGNAL("activated(int)"), self.history_item_selected) if self.dual_mode: self.connect(self.load_action, SIGNAL("triggered()"), self.do_load_yellow) self.connect(self.load_action2, SIGNAL("triggered()"), self.do_load_blue) else: self.connect(self.load_action, SIGNAL("triggered()"), self.do_load) self.connect(self.save_action, SIGNAL("triggered()"), self.do_save) self.connect(self.help_action, SIGNAL("triggered()"), self.show_help) self.peakmap_plotter.NEW_IMAGE_LIMITS.connect( self.image_limits_upated_by_user) self.peakmap_plotter.KEY_LEFT.connect( self.user_pressed_left_key_in_plot) self.peakmap_plotter.KEY_RIGHT.connect( self.user_pressed_right_key_in_plot) self.peakmap_plotter.KEY_BACKSPACE.connect( self.user_pressed_backspace_key_in_plot) self.peakmap_plotter.KEY_END.connect(self.user_pressed_end_key_in_plot) self.peakmap_plotter.CURSOR_MOVED.connect(self.cursor_moved_in_plot) self.eic_plotter.CURSOR_MOVED.connect(self.eic_cursor_moved) self.eic_plotter.VIEW_RANGE_CHANGED.connect( self.eic_view_range_changed) self.mz_plotter.CURSOR_MOVED.connect(self.mz_cursor_moved) self.mz_plotter.VIEW_RANGE_CHANGED.connect(self.mz_view_range_changed) if self.table is not None: self.connect(self.table_widget.verticalHeader(), SIGNAL("sectionClicked(int)"), self.row_selected) self.connect(self.table_widget, SIGNAL("itemClicked(QTableWidgetItem*)"), self.cell_clicked) self.connect(self.select_all_peaks, SIGNAL("pressed()"), self.select_all_peaks_button_pressed) self.connect(self.unselect_all_peaks, SIGNAL("pressed()"), self.unselect_all_peaks_button_pressed) self.connect(self.done_button, SIGNAL("pressed()"), self.done_button_pressed) def key_release_handler(evt): tw = self.table_widget active_rows = set( ix.row() for ix in tw.selectionModel().selection().indexes()) if active_rows: row = active_rows.pop() if evt.key() in (Qt.Key_Up, Qt.Key_Down): tw.selectRow(row) tw.verticalHeader().emit(SIGNAL("sectionClicked(int)"), row) return return QTableWidget.keyPressEvent(tw, evt) self.table_widget.keyReleaseEvent = key_release_handler def cursor_moved_in_plot(self, rt, mz): self.eic_plotter.set_cursor_pos(rt) self.mz_plotter.set_cursor_pos(mz) def eic_cursor_moved(self, rt): self.peakmap_plotter.set_cursor_rt(rt) def eic_view_range_changed(self, rtmin, rtmax): """ we want to avoid the loop EIC_RANGE_CHANGED -> VIEW_RANGE_CHANGED -> EIC_RANGE_CHANGED and we do not want to fully block emitting of VIEW_RANGE_CHANGED. so self.peakmap_plotter.blockSignals() does not work here, instead we "cut" the last connection here: """ self.eic_plotter.VIEW_RANGE_CHANGED.disconnect() self.peakmap_plotter.blockSignals(True) self.peakmap_plotter.set_rt_limits(rtmin, rtmax) self.peakmap_plotter.blockSignals(False) self.peakmap_plotter.replot() self.eic_plotter.VIEW_RANGE_CHANGED.connect( self.eic_view_range_changed) def mz_view_range_changed(self, mzmin, mzmax): """ we want to avoid the loop MZ_RANGE_CHANGED -> VIEW_RANGE_CHANGED -> MZ_RANGE_CHANGED and we do not want to fully block emitting of VIEW_RANGE_CHANGED. so self.peakmap_plotter.blockSignals() does not work here, instead we "cut" the last connection here: """ self.mz_plotter.VIEW_RANGE_CHANGED.disconnect() self.peakmap_plotter.blockSignals(True) self.peakmap_plotter.set_mz_limits(mzmin, mzmax) self.peakmap_plotter.blockSignals(False) self.peakmap_plotter.replot() self.mz_plotter.VIEW_RANGE_CHANGED.connect(self.mz_view_range_changed) def mz_cursor_moved(self, mz): self.peakmap_plotter.set_cursor_mz(mz) def image_limits_upated_by_user(self, rtmin, rtmax, mzmin, mzmax): self.update_peakmap_projection_views(rtmin, rtmax, mzmin, mzmax) self.history.new_head((rtmin, rtmax, mzmin, mzmax)) self.update_history_entries() def set_image_min(self, value): self.peakmap_plotter.set_imin(value) self.peakmap_plotter.replot() def set_image_max(self, value): self.peakmap_plotter.set_imax(value) self.peakmap_plotter.replot() def update_peakmap_projection_views(self, rtmin, rtmax, mzmin, mzmax): rts, chroma = self.peakmap.chromatogram(mzmin, mzmax) self.eic_plotter.del_all_items() if self.dual_mode: rts2, chroma2 = self.peakmap2.chromatogram(mzmin, mzmax, rtmin, rtmax) self.eic_plotter.add_eics([(rts, chroma), (rts2, chroma2)], configs=[blue_line, yellow_line]) else: self.eic_plotter.add_eics([(rts, chroma)], configs=[grey_line]) self.eic_plotter.shrink_and_replot(rtmin, rtmax) if self.dual_mode: data = [(self.peakmap, rtmin, rtmax, mzmin, mzmax, 3000), (self.peakmap2, rtmin, rtmax, mzmin, mzmax, 3000)] configs = [dict(color="#aaaa00"), dict(color="#0000aa")] self.mz_plotter.plot_peakmaps(data, configs) else: self.mz_plotter.plot_peakmaps([(self.peakmap, rtmin, rtmax, mzmin, mzmax, 3000)]) self.mz_plotter.shrink_and_replot(mzmin, mzmax) self.view_range_widget.set_view_range(rtmin, rtmax, mzmin, mzmax) def _handle_history_action(self, action): item = action() if item is not None: self.peakmap_plotter.set_limits_no_sig(*item) self.update_peakmap_projection_views(*item) self.update_history_entries() def user_pressed_left_key_in_plot(self): self._handle_history_action(self.history.go_back) def user_pressed_right_key_in_plot(self): self._handle_history_action(self.history.go_forward) def user_pressed_backspace_key_in_plot(self): self._handle_history_action(self.history.go_to_beginning) def user_pressed_end_key_in_plot(self): self._handle_history_action(self.history.go_to_end) def history_item_selected(self, index): self._handle_history_action( lambda index=index: self.history.set_position(index)) @protect_signal_handler def do_save(self): pix = self.peakmap_plotter.paint_pixmap() while True: path = askForSave(self.last_used_directory_for_save, caption="Save Image", extensions=("png", "PNG")) if path is None: break __, ext = os.path.splitext(path) if ext not in (".png", ".PNG"): QMessageBox.warning(self, "Warning", "wrong/missing extension '.png'") else: self.last_used_directory_for_save = os.path.dirname(path) pix.save(path) break return def _do_load(self, title, attribute): path = askForSingleFile(self.last_used_directory_for_load, caption=title, extensions=("mzML", "mzData", "mzXML")) if path is not None: setattr(self, attribute, loadPeakMap(path)) self.process_peakmap() self.peakmap_plotter.set_peakmaps(self.peakmap, self.peakmap2) self.setup_initial_values() self.setWindowTitle() self.peakmap_plotter.replot() self.plot_peakmap() self.last_used_directory_for_load = os.path.dirname(path) @protect_signal_handler def do_load(self): self._do_load("Load Peakmap", "peakmap") @protect_signal_handler def do_load_yellow(self): self._do_load("Load Yellow Peakmap", "peakmap") @protect_signal_handler def do_load_blue(self): self._do_load("Load Blue Peakmap", "peakmap2") @protect_signal_handler def select_all_peaks_button_pressed(self): for row in range(self.table_widget.rowCount()): item = self.table_widget.item(row, 0) item.setCheckState(Qt.Checked) @protect_signal_handler def unselect_all_peaks_button_pressed(self): for row in range(self.table_widget.rowCount()): item = self.table_widget.item(row, 0) item.setCheckState(Qt.Unchecked) @protect_signal_handler def done_button_pressed(self): self.ok_rows[:] = [ i for i in range(len(self.table)) if self.table_widget.item(i, 0).checkState() == Qt.Checked ] self.accept() @protect_signal_handler def row_selected(self, row_idx): row = self.table.getValues(self.table.rows[row_idx]) needed = ["rtmin", "rtmax", "mzmin", "mzmax"] if all(n in row for n in needed): rtmin, rtmax, mzmin, mzmax = [row.get(ni) for ni in needed] self.peakmap_plotter.set_limits(rtmin, rtmax, mzmin, mzmax) else: needed = ["mzmin", "mzmax"] if all(n in row for n in needed): mzmin, mzmax = [row.get(ni) for ni in needed] self.peakmap_plotter.set_limits(self.rtmin, self.rtmax, mzmin, mzmax) @protect_signal_handler def cell_clicked(self, item): row = item.row() self.table_widget.selectRow(row) self.table_widget.verticalHeader().emit(SIGNAL("sectionClicked(int)"), row) @protect_signal_handler def show_help(self): html = resource_string("emzed.core.explorers", "help_peakmapexplorer.html") QWebSettings.globalSettings().setFontFamily(QWebSettings.StandardFont, 'Courier') QWebSettings.globalSettings().setFontSize(QWebSettings.DefaultFontSize, 12) v = QWebView(self) v.setHtml(html) dlg = QDialog(self, Qt.Window) dlg.setMinimumSize(300, 300) l = QVBoxLayout(dlg) l.addWidget(v) dlg.setLayout(l) dlg.show() def update_history_entries(self): self.history_list.clear() for item in self.history.items: rtmin, rtmax, mzmin, mzmax = item str_item = "%10.5f .. %10.5f %6.2fm...%6.2fm " % ( mzmin, mzmax, rtmin / 60.0, rtmax / 60.0) self.history_list.addItem(str_item) self.history_list.setCurrentIndex(self.history.position) @protect_signal_handler def use_logscale(self, is_log): self.peakmap_plotter.set_logarithmic_scale(is_log) self.peakmap_plotter.replot() @protect_signal_handler def ms_level_chosen(self, ms_level): if ms_level != self.current_ms_level: self.current_ms_level = ms_level self.process_peakmap(ms_level) self.peakmap_plotter.set_peakmaps(self.peakmap, self.peakmap2) self.peakmap_plotter.replot() self.plot_peakmap() @protect_signal_handler def set_precursor_range(self, pre_mz_min, pre_mz_max): self.process_peakmap(self.current_ms_level, pre_mz_min, pre_mz_max) self.peakmap_plotter.set_peakmaps(self.peakmap, self.peakmap2) self.peakmap_plotter.replot() self.plot_peakmap() @protect_signal_handler def gamma_changed(self, value): self.peakmap_plotter.set_gamma(value) self.peakmap_plotter.replot() @protect_signal_handler def update_image_range(self, rtmin, rtmax, mzmin, mzmax): rtmin *= 60.0 rtmax *= 60.0 if rtmin < self.rtmin: rtmin = self.rtmin if rtmax > self.rtmax: rtmax = self.rtmax if mzmin < self.mzmin: mzmin = self.mzmin if mzmax > self.mzmax: mzmax = self.mzmax rtmin, rtmax = sorted((rtmin, rtmax)) mzmin, mzmax = sorted((mzmin, mzmax)) self.peakmap_plotter.set_limits(rtmin, rtmax, mzmin, mzmax) def plot_peakmap(self): self.peakmap_plotter.set_limits(self.rtmin, self.rtmax, self.mzmin, self.mzmax)
def setupUi(self, port): self.setObjectName("MainWindow") self.resize(600, 600) self.centralwidget = QWidget(self) p = self.centralwidget.palette() self.centralwidget.setAutoFillBackground(True) p.setColor(self.centralwidget.backgroundRole(), QColor(126, 135, 152)) self.centralwidget.setPalette(p) self.centralwidget.setObjectName("centralwidget") self.gridLayout = QGridLayout(self.centralwidget) self.gridLayout.setObjectName("gridLayout") self.setCentralWidget(self.centralwidget) self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 808, 25)) self.menubar.setObjectName("menubar") self.menuFile = QMenu(self.menubar) self.menuFile.setObjectName("menuFile") self.setMenuBar(self.menubar) self.statusbar = QStatusBar(self) self.statusbar.setObjectName("statusbar") self.setStatusBar(self.statusbar) self.actionQuit = QAction(self) self.actionQuit.setObjectName("actionQuit") self.menuFile.addSeparator() self.menuFile.addAction(self.actionQuit) self.menubar.addAction(self.menuFile.menuAction()) self.actionReset = QAction(self) self.actionReset.setObjectName("reset") self.menuFile.addSeparator() self.menuFile.addAction(self.actionReset) self.menubar.addAction(self.menuFile.menuAction()) # add other GUI objects self.graph_widget = GraphWidget(self.statusbar) self.gridLayout.addWidget(self.graph_widget, 1, 11, 10, 10) pixmap = QPixmap(':/images/cta-logo-mini.png') lbl = QLabel() lbl.setPixmap(pixmap) self.gridLayout.addWidget(lbl, 0, 0) p = self.graph_widget.palette() self.graph_widget.setAutoFillBackground(True) p.setColor(self.graph_widget.backgroundRole(), QColor(255, 255, 255)) # QColor(226, 235, 252)) self.graph_widget.setPalette(p) self.quitButton = QPushButton() # self.centralwidget) self.quitButton.setObjectName("quitButton") self.quitButton.setText( QApplication.translate("MainWindow", "Quit", None, QApplication.UnicodeUTF8)) self.gridLayout.addWidget(self.quitButton, 12, 0, 1, 1) self.info_label = InfoLabel(0, 4) self.info_label.setAutoFillBackground(True) self.gridLayout.addWidget(self.info_label, 1, 0, 1, 5) #self.info_label.setAlignment(PyQt4.Qt.AlignCenter); palette = QPalette() palette.setColor(self.info_label.backgroundRole(), Qt.lightGray) self.info_label.setPalette(palette) QObject.connect(self.quitButton, SIGNAL("clicked()"), self.stop) QObject.connect(self.actionQuit, SIGNAL("triggered()"), self.stop) QMetaObject.connectSlotsByName(self) self.retranslateUi() QObject.connect(self.actionQuit, SIGNAL("triggered()"), self.close) QMetaObject.connectSlotsByName(self) # Create GuiConnexion for ZMQ comminucation with pipeline self.guiconnection = GuiConnexion(gui_port=port, statusBar=self.statusbar) self.guiconnection.message.connect(self.graph_widget.pipechange) self.guiconnection.message.connect(self.info_label.pipechange) self.guiconnection.reset_message.connect(self.graph_widget.reset) self.guiconnection.reset_message.connect(self.info_label.reset) self.guiconnection.mode_message.connect(self.info_label.mode_receive) QObject.connect(self.actionReset, SIGNAL("triggered()"), self.guiconnection.reset) QMetaObject.connectSlotsByName(self) # start the process self.guiconnection.start()
def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") #Set size of window and make it non-resizeable MainWindow.resize(818, 665) MainWindow.setFixedHeight(665) MainWindow.setFixedWidth(818) MainWindow.setWindowTitle("Map Master: Search for the Lost City") MainWindow.setWindowIcon(QIcon("icon_medium.ico")) #Set window backgrounds self.background = QLabel(MainWindow) self.backgroundPixmapMenu = QPixmap(normpath("images/gameMenu2.png")) self.backgroundPixmapSettings = QPixmap(normpath("images/gameMenuSettings2.png")) self.background.setPixmap(self.backgroundPixmapMenu) self.background.setGeometry(QtCore.QRect(0, 0, 818, 665)) #Stylesheet settings for labels and buttons self.fg = "QLabel {color:black}" self.fgb = "QPushButton {color:black}" self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayout = QGridLayout(self.centralwidget) self.gridLayout.setObjectName("gridLayout") self.stackedWidget = QStackedWidget(self.centralwidget) self.stackedWidget.setEnabled(True) self.stackedWidget.setObjectName("stackedWidget") #Main Menu page self.menuPage = QWidget() self.menuPage.setObjectName("menuPage") self.startButton = QPushButton(self.menuPage) self.startButton.setStyleSheet(self.fgb) self.startButton.setGeometry(QtCore.QRect(600, 200, 180, 60)) self.startButton.setText(QApplication.translate("MainWindow", "Start Game", None, QApplication.UnicodeUTF8)) self.startButton.setObjectName("startButton") self.loadButton = QPushButton(self.menuPage) self.loadButton.setStyleSheet(self.fgb) self.loadButton.setGeometry(QtCore.QRect(600, 280, 180, 60)) self.loadButton.setText(QApplication.translate("MainWindow", "Load Game", None, QApplication.UnicodeUTF8)) self.loadButton.setObjectName("loadButton") self.settingsButton = QPushButton(self.menuPage) self.settingsButton.setStyleSheet(self.fgb) self.settingsButton.setGeometry(QtCore.QRect(600, 440, 180, 60)) self.settingsButton.setText(QApplication.translate("MainWindow", "Settings", None, QApplication.UnicodeUTF8)) self.settingsButton.setObjectName("settingsButton") self.quitButton = QPushButton(self.menuPage) self.quitButton.setStyleSheet(self.fgb) self.quitButton.setGeometry(QtCore.QRect(600, 520, 180, 60)) self.quitButton.setText(QApplication.translate("MainWindow", "Quit", None, QApplication.UnicodeUTF8)) self.quitButton.setObjectName("quitButton") self.instrButton = QPushButton(self.menuPage) self.instrButton.setStyleSheet(self.fgb) self.instrButton.setGeometry(QtCore.QRect(600, 360, 180, 60)) self.instrButton.setText(QApplication.translate("MainWindow", "Instructions", None, QApplication.UnicodeUTF8)) self.instrButton.setObjectName("instrButton") self.stackedWidget.addWidget(self.menuPage) #Settings page self.settingsPage = QWidget() self.settingsPage.setObjectName("settingsPage") self.volumeSlider = QSlider(self.settingsPage) self.volumeSlider.setGeometry(QtCore.QRect(200, 200, 400, 30)) self.volumeSlider.setProperty("value", 50) self.volumeSlider.setOrientation(QtCore.Qt.Horizontal) self.volumeSlider.setObjectName("volumeSlider") self.soundLabel = QLabel(self.settingsPage) self.soundLabel.setGeometry(QtCore.QRect(340, 160, 120, 30)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(20) self.soundLabel.setFont(font) self.soundLabel.setStyleSheet(self.fg) self.soundLabel.setText(QApplication.translate("MainWindow", "Volume", None, QApplication.UnicodeUTF8)) self.soundLabel.setAlignment(QtCore.Qt.AlignCenter) self.soundLabel.setObjectName("soundLabel") #Quiet Sound Graphic self.quietGraphic = QLabel(self.settingsPage) self.quietGraphic.setPixmap(QPixmap(normpath("images/speakerQuiet.png"))) self.quietGraphic.setGeometry(QtCore.QRect(90, 180, 80, 80)) self.quietGraphic.setObjectName("quietGraphic") #Loud Sound Graphic self.loudGraphic = QLabel(self.settingsPage) self.loudGraphic.setPixmap(QPixmap(normpath("images/speakerLoud.png"))) self.loudGraphic.setEnabled(True) self.loudGraphic.setGeometry(QtCore.QRect(630, 180, 80, 80)) self.loudGraphic.setObjectName("loudGraphic") self.settingsLabel = QLabel(self.settingsPage) self.settingsLabel.setGeometry(QtCore.QRect(260, 30, 280, 60)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(36) self.settingsLabel.setFont(font) self.settingsLabel.setStyleSheet(self.fg) self.settingsLabel.setText(QApplication.translate("MainWindow", "Settings", None, QApplication.UnicodeUTF8)) self.settingsLabel.setAlignment(QtCore.Qt.AlignCenter) self.settingsLabel.setObjectName("settingsLabel") self.doneButton = QPushButton(self.settingsPage) self.doneButton.setStyleSheet(self.fgb) self.doneButton.setGeometry(QtCore.QRect(600, 520, 161, 61)) self.doneButton.setText(QApplication.translate("MainWindow", "Done", None, QApplication.UnicodeUTF8)) self.doneButton.setObjectName("doneButton") self.stackedWidget.addWidget(self.settingsPage) self.soundManager = Sounds(self.volumeSlider.sliderPosition()) #Main Game page self.mainPage = QWidget() self.mainPage.setObjectName("mainPage") #Person View self.personView = ViewGraphics(self.mainPage) self.personView.setGeometry(QtCore.QRect(0, 0, 390, 500)) self.personView.setObjectName("personView") #Map View self.mapView = ViewGraphics(self.mainPage) self.mapView.setGeometry(QtCore.QRect(410, 0, 390, 500)) self.mapView.setObjectName("mapView") #ClueView self.clueView = QLabel(self.mainPage) self.clueView.setGeometry(QtCore.QRect(0, 510, 390, 91)) self.clueView.setObjectName("clueView") font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(20) self.clueView.setFont(font) self.clueView.setStyleSheet(self.fg) #Map Toggles self.latLongCheck = QCheckBox(self.mainPage) self.latLongCheck.setGeometry(QtCore.QRect(420, 510, 97, 41)) self.latLongCheck.setText(QApplication.translate("MainWindow", "Latitude/ \n" "Longitude", None, QApplication.UnicodeUTF8)) self.latLongCheck.setObjectName("latLongCheck") self.colorCheck = QCheckBox(self.mainPage) self.colorCheck.setGeometry(QtCore.QRect(560, 510, 97, 41)) self.colorCheck.setText(QApplication.translate("MainWindow", "Color\n" "Coding", None, QApplication.UnicodeUTF8)) self.colorCheck.setObjectName("colorCheck") self.legendCheck = QCheckBox(self.mainPage) self.legendCheck.setGeometry(QtCore.QRect(680, 520, 97, 22)) self.legendCheck.setText(QApplication.translate("MainWindow", "Legend", None, QApplication.UnicodeUTF8)) self.legendCheck.setObjectName("legendCheck") self.searchButton = QPushButton(self.mainPage) self.searchButton.setStyleSheet(self.fgb) self.searchButton.setGeometry(QtCore.QRect(420, 560, 211, 41)) self.searchButton.setText(QApplication.translate("MainWindow", "Search", None, QApplication.UnicodeUTF8)) self.searchButton.setObjectName("searchButton") #Score pieces self.scoreBox = QLabel(self.mainPage) self.scoreBox.setStyleSheet(self.fg) self.scoreBox.setGeometry(QtCore.QRect(720, 560, 71, 41)) self.scoreBox.setObjectName("scoreBox") self.scoreBox.setText(QApplication.translate("MainWindow", "0", None, QApplication.UnicodeUTF8)) self.scoreLabel = QLabel(self.mainPage) self.scoreLabel.setStyleSheet(self.fg) self.scoreLabel.setGeometry(QtCore.QRect(660, 570, 51, 17)) self.scoreLabel.setText(QApplication.translate("MainWindow", "Score:", None, QApplication.UnicodeUTF8)) self.scoreLabel.setAlignment(QtCore.Qt.AlignCenter) self.scoreLabel.setObjectName("scoreLabel") self.stackedWidget.addWidget(self.mainPage) #Help page self.helpPage = QWidget() self.helpPage.setObjectName("helpPage") self.HelpLabel = QLabel(self.helpPage) self.HelpLabel.setStyleSheet(self.fg) self.HelpLabel.setGeometry(QtCore.QRect(260, 30, 280, 60)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(36) self.HelpLabel.setFont(font) self.HelpLabel.setText(QApplication.translate("MainWindow", "Instructions", None, QApplication.UnicodeUTF8)) self.HelpLabel.setAlignment(QtCore.Qt.AlignCenter) self.HelpLabel.setObjectName("HelpLabel") self.wInstr = QLabel(self.helpPage) self.wInstr.setStyleSheet(self.fg) self.wInstr.setGeometry(QtCore.QRect(200, 150, 40, 30)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(20) self.wInstr.setFont(font) self.wInstr.setText(QApplication.translate("MainWindow", "W", None, QApplication.UnicodeUTF8)) self.wInstr.setAlignment(QtCore.Qt.AlignCenter) self.wInstr.setObjectName("wInstr") self.sInstr = QLabel(self.helpPage) self.sInstr.setStyleSheet(self.fg) self.sInstr.setGeometry(QtCore.QRect(200, 200, 40, 30)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(20) self.sInstr.setFont(font) self.sInstr.setText(QApplication.translate("MainWindow", "S", None, QApplication.UnicodeUTF8)) self.sInstr.setAlignment(QtCore.Qt.AlignCenter) self.sInstr.setObjectName("sInstr") self.aInstr = QLabel(self.helpPage) self.aInstr.setStyleSheet(self.fg) self.aInstr.setGeometry(QtCore.QRect(200, 250, 40, 30)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(20) self.aInstr.setFont(font) self.aInstr.setText(QApplication.translate("MainWindow", "A", None, QApplication.UnicodeUTF8)) self.aInstr.setAlignment(QtCore.Qt.AlignCenter) self.aInstr.setObjectName("aInstr") self.dInstr = QLabel(self.helpPage) self.dInstr.setStyleSheet(self.fg) self.dInstr.setGeometry(QtCore.QRect(200, 300, 40, 30)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(20) self.dInstr.setFont(font) self.dInstr.setText(QApplication.translate("MainWindow", "D", None, QApplication.UnicodeUTF8)) self.dInstr.setAlignment(QtCore.Qt.AlignCenter) self.dInstr.setObjectName("dInstr") self.wInstr2 = QLabel(self.helpPage) self.wInstr2.setStyleSheet(self.fg) self.wInstr2.setGeometry(QtCore.QRect(400, 150, 180, 30)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(20) self.wInstr2.setFont(font) self.wInstr2.setText(QApplication.translate("MainWindow", "Move North", None, QApplication.UnicodeUTF8)) self.wInstr2.setAlignment(QtCore.Qt.AlignCenter) self.wInstr2.setObjectName("wInstr2") self.sInstr2 = QLabel(self.helpPage) self.sInstr2.setStyleSheet(self.fg) self.sInstr2.setGeometry(QtCore.QRect(400, 200, 180, 30)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(20) self.sInstr2.setFont(font) self.sInstr2.setText(QApplication.translate("MainWindow", "Move South", None, QApplication.UnicodeUTF8)) self.sInstr2.setAlignment(QtCore.Qt.AlignCenter) self.sInstr2.setObjectName("sInstr2") self.aInstr2 = QLabel(self.helpPage) self.aInstr2.setStyleSheet(self.fg) self.aInstr2.setGeometry(QtCore.QRect(400, 250, 180, 30)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(20) self.aInstr2.setFont(font) self.aInstr2.setText(QApplication.translate("MainWindow", "Move West", None, QApplication.UnicodeUTF8)) self.aInstr2.setAlignment(QtCore.Qt.AlignCenter) self.aInstr2.setObjectName("aInstr2") self.dInstr2 = QLabel(self.helpPage) self.dInstr2.setStyleSheet(self.fg) self.dInstr2.setGeometry(QtCore.QRect(400, 300, 180, 30)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(20) self.dInstr2.setFont(font) self.dInstr2.setText(QApplication.translate("MainWindow", "Move East", None, QApplication.UnicodeUTF8)) self.dInstr2.setAlignment(QtCore.Qt.AlignCenter) self.dInstr2.setObjectName("dInstr2") self.searchInstr = QPushButton(self.helpPage) self.searchInstr.setStyleSheet(self.fgb) self.searchInstr.setEnabled(True) self.searchInstr.setGeometry(QtCore.QRect(170, 350, 100, 30)) self.searchInstr.setText(QApplication.translate("MainWindow", "Search", None, QApplication.UnicodeUTF8)) self.searchInstr.setAutoDefault(False) self.searchInstr.setDefault(False) self.searchInstr.setFlat(False) self.searchInstr.setObjectName("searchInstr") self.dInstr2_2 = QLabel(self.helpPage) self.dInstr2_2.setStyleSheet(self.fg) self.dInstr2_2.setGeometry(QtCore.QRect(380, 350, 211, 30)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(20) self.dInstr2_2.setFont(font) self.dInstr2_2.setText(QApplication.translate("MainWindow", "Search for clues", None, QApplication.UnicodeUTF8)) self.dInstr2_2.setAlignment(QtCore.Qt.AlignCenter) self.dInstr2_2.setObjectName("dInstr2_2") self.doneButton2 = QPushButton(self.helpPage) self.doneButton2.setStyleSheet(self.fgb) self.doneButton2.setGeometry(QtCore.QRect(600, 520, 161, 61)) self.doneButton2.setText(QApplication.translate("MainWindow", "Done", None, QApplication.UnicodeUTF8)) self.doneButton2.setObjectName("doneButton2") self.stackedWidget.addWidget(self.helpPage) #Credits page self.creditsPage = QWidget() self.creditsPage.setObjectName("creditsPage") self.creditsLabel = QLabel(self.creditsPage) self.creditsLabel.setStyleSheet(self.fg) self.creditsLabel.setGeometry(QtCore.QRect(260, 30, 280, 60)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(36) self.creditsLabel.setFont(font) self.creditsLabel.setText(QApplication.translate("MainWindow", "Credits", None, QApplication.UnicodeUTF8)) self.creditsLabel.setAlignment(QtCore.Qt.AlignCenter) self.creditsLabel.setObjectName("creditsLabel") self.credits = QLabel(self.creditsPage) self.credits.setStyleSheet(self.fg) self.credits.setGeometry(QtCore.QRect(180, 150, 500, 400)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(20) self.credits.setFont(font) self.credits.setText(QApplication.translate("MainWindow", "Gary Lent\n" "Grant Stafford\n" "Jessie Liu\n" "Peter Andrien\n" "Nokia (Qt4 framework)\n" "Riverbank Computing Ltd (PyQt)\n" "Celestial Aeon Project", None, QApplication.UnicodeUTF8)) self.credits.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) self.credits.setObjectName("credits") self.doneButton3 = QPushButton(self.creditsPage) self.doneButton3.setStyleSheet(self.fgb) self.doneButton3.setGeometry(QtCore.QRect(600, 520, 161, 61)) self.doneButton3.setText(QApplication.translate("MainWindow", "Done", None, QApplication.UnicodeUTF8)) self.doneButton3.setObjectName("doneButton3") self.stackedWidget.addWidget(self.creditsPage) #Story page self.storyPage = QWidget() self.storyPage.setObjectName("storyPage") self.storyLabel = QLabel(self.storyPage) self.storyLabel.setStyleSheet(self.fg) self.storyLabel.setGeometry(QtCore.QRect(100, 50, 600, 400)) font = QFont() font.setFamily("Century Schoolbook L") font.setPointSize(25) self.storyLabel.setFont(font) self.storyLabel.setText(QApplication.translate("MainWindow", "My name is Travis Sinclair.\n I'm a skilled cartographer.\n I recently lost my job, but stumbled\n on a clue that may change my life \nforever. I've set off on a quest - a quest\n to find a lost city. I've found a clue,\n and believe there may be more.\n Help me find the lost city. ", None, QApplication.UnicodeUTF8)) self.storyLabel.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop) self.storyLabel.setObjectName("storyLabel") self.nextButton = QPushButton(self.storyPage) self.nextButton.setGeometry(QtCore.QRect(600, 520, 161, 61)) self.nextButton.setText(QApplication.translate("MainWindow", "Next", None, QApplication.UnicodeUTF8)) self.nextButton.setObjectName("nextButton") self.stackedWidget.addWidget(self.storyPage) self.gridLayout.addWidget(self.stackedWidget, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) #Menu bar self.menubar = QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 818, 25)) self.menubar.setObjectName("menubar") self.menuMenu = QMenu(self.menubar) self.menuMenu.setTitle(QApplication.translate("MainWindow", "Menu", None, QApplication.UnicodeUTF8)) self.menuMenu.setObjectName("menuMenu") MainWindow.setMenuBar(self.menubar) self.actionSave_Game = QAction(MainWindow) self.actionSave_Game.setText(QApplication.translate("MainWindow", "Save Game", None, QApplication.UnicodeUTF8)) self.actionSave_Game.setObjectName("actionSave_Game") self.actionCredits = QAction(MainWindow) self.actionCredits.setText(QApplication.translate("MainWindow", "Credits", None, QApplication.UnicodeUTF8)) self.actionCredits.setObjectName("actionCredits") self.actionQuit = QAction(MainWindow) self.actionQuit.setText(QApplication.translate("MainWindow", "Quit", None, QApplication.UnicodeUTF8)) self.actionQuit.setObjectName("actionQuit") self.actionSettings = QAction(MainWindow) self.actionSettings.setText(QApplication.translate("MainWindow", "Settings", None, QApplication.UnicodeUTF8)) self.actionSettings.setObjectName("actionSettings") self.actionHelp = QAction(MainWindow) self.actionHelp.setText(QApplication.translate("MainWindow", "Help", None, QApplication.UnicodeUTF8)) self.actionHelp.setObjectName("actionHelp") self.actionMain_Menu = QAction(MainWindow) self.actionMain_Menu.setText(QApplication.translate("MainWindow", "Main Menu", None, QApplication.UnicodeUTF8)) self.actionMain_Menu.setObjectName("actionMain_Menu") self.menuMenu.addAction(self.actionSettings) self.menuMenu.addAction(self.actionHelp) self.menuMenu.addAction(self.actionSave_Game) self.menuMenu.addAction(self.actionCredits) self.menuMenu.addAction(self.actionMain_Menu) self.menuMenu.addAction(self.actionQuit) self.menubar.addAction(self.menuMenu.menuAction()) self.retranslateUi(MainWindow) self.stackedWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) #These are the slots and signals to connect buttons to other functions self.location = 0 QtCore.QObject.connect(self.actionQuit, QtCore.SIGNAL("triggered()"), MainWindow.close) QtCore.QObject.connect(self.quitButton, QtCore.SIGNAL("released()"), MainWindow.close) QtCore.QObject.connect(self.settingsButton, QtCore.SIGNAL("released()"), self.setSettings) QtCore.QObject.connect(self.actionSettings, QtCore.SIGNAL("triggered()"), self.setSettings) QtCore.QObject.connect(self.loadButton, QtCore.SIGNAL("released()"), self.load_file_dialog) QtCore.QObject.connect(self.actionSave_Game, QtCore.SIGNAL("triggered()"),self.save_file_dialog) QtCore.QObject.connect(self.doneButton, QtCore.SIGNAL("released()"), self.goBack) QtCore.QObject.connect(self.startButton, QtCore.SIGNAL("released()"), self.newGame) QtCore.QObject.connect(self.actionMain_Menu, QtCore.SIGNAL("triggered()"), self.setMain) QtCore.QObject.connect(self.actionHelp, QtCore.SIGNAL("triggered()"), self.setInstructions) QtCore.QObject.connect(self.instrButton, QtCore.SIGNAL("released()"), self.setInstructions) QtCore.QObject.connect(self.doneButton2, QtCore.SIGNAL("released()"), self.goBack) QtCore.QObject.connect(self.doneButton3, QtCore.SIGNAL("released()"), self.goBack) QtCore.QObject.connect(self.actionCredits, QtCore.SIGNAL("triggered()"), self.setCredits) self.latLongCheck.stateChanged.connect(self.latLong) self.colorCheck.stateChanged.connect(self.colorize) self.legendCheck.stateChanged.connect(self.legend) QtCore.QObject.connect(self.searchButton, QtCore.SIGNAL("released()"), self.doSearch) QtCore.QObject.connect(self.nextButton, QtCore.SIGNAL("released()"), self.storyButton) self.volumeSlider.sliderMoved.connect(self.setVol) QtCore.QMetaObject.connectSlotsByName(MainWindow)
def __init__(self, app, radarwidget): super(MainWindow, self).__init__() self.app = app uic.loadUi("./data/graphics/mainwindow.ui", self) # list of buttons to connect to, give icons, and tooltips # the button the icon the tooltip the callback buttons = { self.zoomin : ['zoomin.svg', 'Zoom in', self.buttonClicked], self.zoomout : ['zoomout.svg', 'Zoom out', self.buttonClicked], self.panleft : ['panleft.svg', 'Pan left', self.buttonClicked], self.panright : ['panright.svg', 'Pan right', self.buttonClicked], self.panup : ['panup.svg', 'Pan up', self.buttonClicked], self.pandown : ['pandown.svg', 'Pan down', self.buttonClicked], self.ic : ['stop.svg', 'Initial condition', self.buttonClicked], self.op : ['play.svg', 'Operate', self.buttonClicked], self.hold : ['pause.svg', 'Hold', self.buttonClicked], self.fast : ['fwd.svg', 'Enable fast-time', self.buttonClicked], self.fast10 : ['ffwd.svg', 'Fast-forward 10 seconds', self.buttonClicked], self.sameic : ['frwd.svg', 'Restart same IC', self.buttonClicked], self.showac : ['AC.svg', 'Show/hide aircraft', self.buttonClicked], self.showpz : ['PZ.svg', 'Show/hide PZ', self.buttonClicked], self.showapt : ['apt.svg', 'Show/hide airports', self.buttonClicked], self.showwpt : ['wpt.svg', 'Show/hide waypoints', self.buttonClicked], self.showlabels : ['lbl.svg', 'Show/hide text labels', self.buttonClicked], self.showmap : ['geo.svg', 'Show/hide satellite image', self.buttonClicked]} for b in buttons.iteritems(): # Set icon if not b[1][0] is None: b[0].setIcon(QIcon('data/graphics/icons/' + b[1][0])) # Set tooltip if not b[1][1] is None: b[0].setToolTip(b[1][1]) # Connect clicked signal b[0].clicked.connect(b[1][2]) self.menubar = QMenuBar(self) # File menu self.fileMenu = self.menubar.addMenu('&File') self.open_action = self.fileMenu.addAction('&Open') self.open_action.triggered.connect(self.app.show_file_dialog) self.save_action = self.fileMenu.addAction('&Save') # View Menu self.viewMenu = self.menubar.addMenu('&View') self.resetview_action = self.viewMenu.addAction('&Reset view') self.fullscreen_action = self.viewMenu.addAction('Fullscreen') # Analysis and metrics menu self.analysisMenu = self.menubar.addMenu('&Analysis') self.SD_action = self.analysisMenu.addAction('Static Density') self.DD_action = self.analysisMenu.addAction('Dynamic Density') self.SSD_action = self.analysisMenu.addAction('SSD Metric') self.lyu_action = self.analysisMenu.addAction('Lyapunov analysis') # Connections menu self.connectionsMenu = self.menubar.addMenu('Connections') self.connectionsMenu.addAction('Connect to ADS-B server') self.connectionsMenu.addAction('Enable output to UDP') self.setMenuBar(self.menubar) self.radarwidget = radarwidget radarwidget.setParent(self.centralwidget) self.verticalLayout.insertWidget(0, radarwidget, 1)
class MainWindow(QMainWindow): """ class MainWindow for the gui """ def __init__(self, config, parent=None): """ Constructor for class MainWindow :rtype : object :param parent: @param config: iHike configuration """ QMainWindow.__init__(self) self.config = config self.setGeometry( self.config.settings['app_x'], self.config.settings['app_y'], self.config.settings['app_w'], self.config.settings['app_h'] ) self.setWindowTitle( self.config.settings['appname'] + ' - Version: ' + self.config.settings['appversion'] ) globalFont = QFont( self.config.settings['fontfamily'], self.config.settings['pointsize'] ) self.statusbar = self.statusBar() self.center() self.exit = QAction('Quit iHike', self) self.menuLoadFile = QAction('Load File...', self) self.menubar = QMenuBar(None) self.file = self.menubar.addMenu('&File') self.file.addAction(self.exit) self.file.addAction(self.menuLoadFile) self.setMenuBar(self.menubar) self.save = QAction(QIcon('rsc/icons/fileSave.png'), 'Save current page', self) self.save.setShortcut('Ctrl+S') self.save.setDisabled(True) self.search = QAction(QIcon('rsc/icons/magfit.png'), 'Search for', self) self.toolbar = self.addToolBar('Toolbar') self.toolbar.addAction(self.save) self.toolbar.addSeparator() self.toolbar.addAction(self.search) self.toolbar.setMaximumHeight(24) self.trackListView = TrackListView() self.trackListView.setAllowedAreas(Qt.TopDockWidgetArea | Qt.BottomDockWidgetArea) self.addDockWidget(Qt.TopDockWidgetArea, self.trackListView) detailView = DetailView() detailView.setAllowedAreas( Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea) self.addDockWidget(Qt.RightDockWidgetArea, detailView) self.mainWidget = QWidget(self) # self.mainWidget.setLayout(self.gridLayout) self.setCentralWidget(self.mainWidget) def center(self): screen = QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width() - size.width()) / 2, (screen.height() - size.height()) / 2)