def create_action(parent, text, shortcut=None, icon=None, tip=None, toggled=None, triggered=None, data=None, menurole=None, context=Qt.WindowShortcut): """Create a QAction.""" action = QAction(text, parent) if triggered is not None: action.triggered.connect(triggered) if toggled is not None: action.toggled.connect(toggled) action.setCheckable(True) if icon is not None: action.setIcon(icon) if shortcut is not None: action.setShortcut(shortcut) if tip is not None: action.setToolTip(tip) action.setStatusTip(tip) if data is not None: action.setData(to_qvariant(data)) if menurole is not None: action.setMenuRole(menurole) # TODO: Hard-code all shortcuts and choose context=Qt.WidgetShortcut # (this will avoid calling shortcuts from another dockwidget # since the context thing doesn't work quite well with these widgets) action.setShortcutContext(context) return action
def create_action(parent, text, shortcut=None, icon=None, tip=None, toggled=None, triggered=None, data=None, menurole=None, context=Qt.WindowShortcut): """Create a QAction""" action = QAction(text, parent) if triggered is not None: action.triggered.connect(triggered) if toggled is not None: action.toggled.connect(toggled) action.setCheckable(True) if icon is not None: if is_text_string(icon): icon = get_icon(icon) action.setIcon(icon) if shortcut is not None: action.setShortcut(shortcut) if tip is not None: action.setToolTip(tip) action.setStatusTip(tip) if data is not None: action.setData(to_qvariant(data)) if menurole is not None: action.setMenuRole(menurole) #TODO: Hard-code all shortcuts and choose context=Qt.WidgetShortcut # (this will avoid calling shortcuts from another dockwidget # since the context thing doesn't work quite well with these widgets) action.setShortcutContext(context) return action
def __init__(self, parent=None, standalone=False): super(Camera, self).__init__(parent) # This prevents doing unneeded initialization # when QtDesginer loads the plugin. if parent is None and not standalone: return if not multimedia_available: return self.ui = uic.loadUi(os.path.join(WIDGET_PATH, "camera.ui"), self) self.camera = None self.imageCapture = None self.mediaRecorder = None self.isCapturingImage = False self.applicationExiting = False self.imageSettings = QImageEncoderSettings() self.audioSettings = QAudioEncoderSettings() self.videoSettings = QVideoEncoderSettings() self.videoContainerFormat = '' camera_device = QByteArray() videoDevicesGroup = QActionGroup(self) videoDevicesGroup.setExclusive(True) if not QCamera.availableDevices(): self.ui.devicesCombo.addItem("No Device") else: for deviceName in QCamera.availableDevices(): description = QCamera.deviceDescription(deviceName) self.ui.devicesCombo.addItem(description) videoDeviceAction = QAction(description, videoDevicesGroup) videoDeviceAction.setCheckable(True) videoDeviceAction.setData(deviceName) if camera_device.isEmpty(): cameraDevice = deviceName videoDeviceAction.setChecked(True) self.ui.devicesCombo.addAction(videoDeviceAction) videoDevicesGroup.triggered.connect(self.updateCameraDevice) self.ui.captureWidget.currentChanged.connect(self.updateCaptureMode) self.ui.devicesCombo.currentIndexChanged.connect(self.get_device_action) self.ui.lockButton.hide() if not IN_DESIGNER: # Start camera 2s after the UI has loaded QTimer.singleShot(2000, lambda: self.setCamera(camera_device))
def create_action(parent, text, shortcut=None, icon=None, tip=None, toggled=None, triggered=None, data=None, menurole=None, context=Qt.WindowShortcut): """Create a QAction""" action = QAction(text, parent) if triggered is not None: action.triggered.connect(triggered) if toggled is not None: action.toggled.connect(toggled) action.setCheckable(True) if icon is not None: if is_text_string(icon): icon = get_icon(icon) action.setIcon(icon) if tip is not None: action.setToolTip(tip) action.setStatusTip(tip) if data is not None: action.setData(to_qvariant(data)) if menurole is not None: action.setMenuRole(menurole) # Workround for Mac because setting context=Qt.WidgetShortcut # there doesn't have any effect if sys.platform == 'darwin': action._shown_shortcut = None if context == Qt.WidgetShortcut: if shortcut is not None: action._shown_shortcut = shortcut else: # This is going to be filled by # main.register_shortcut action._shown_shortcut = 'missing' else: if shortcut is not None: action.setShortcut(shortcut) action.setShortcutContext(context) else: if shortcut is not None: action.setShortcut(shortcut) action.setShortcutContext(context) return action
def getMenuAction(self, menu, title='notitle', action_name='noaction', args=[], kwargs={}): # ToDo: Clean this up, it is very hacky env = {'app': QApplication.instance(), 'win': self, 'action': actions, } if action_name is not None: if action_name.startswith('settings.'): setting_id = action_name[len('settings.'):] setting = getSetting(setting_id) if setting: if setting.enum_options is not None: submenu = QMenu(parent=self, title=title) group = QActionGroup(self) group.setExclusive(True) group.triggered.connect(lambda a: setting.setValue(a.data())) def update(group, val): for act in group.actions(): if act.data() == val: act.setChecked(True) break for num, opt in enumerate(setting.enum_options): act = QAction(parent=self, text=opt) act.setCheckable(True) if setting.value == num: act.setChecked(True) act.setData(num) setting.notify(lambda v: update(group, v)) act.setActionGroup(group) submenu.addAction(act) menu.addMenu(submenu) elif setting.value_type == bool: # works for bool settings menu_action = QAction(parent=self, text=title) menu_action.setCheckable(True) menu_action.triggered.connect(setting.setValue) setting.notify(menu_action.setChecked) menu.addAction(menu_action) return try: menu_action = QAction(parent=self, text=title) mod, action = action_name.split('.', 1) method = getattr(env.get(mod, self), action) if menu_action.isCheckable(): menu_action.triggered.connect(method) else: menu_action.triggered.connect(lambda checked: method(*args, **kwargs)) menu.addAction(menu_action) return except: pass try: menu_action = QAction(parent=self, text=title) actions.bindWidget(menu_action, action_name) menu.addAction(menu_action) return except actions.InvalidAction: LOG.exception('Error binding menu action %s', action_name) menu_action = QAction(parent=self, text=title) msg = "The <b>{}</b> action specified for the " \ "<b>{}</b> menu item could not be triggered. " \ "Check the YAML config file for errors." \ .format(action_name or '', title.replace('&', '')) menu_action.triggered.connect(lambda: QMessageBox.critical(self, "Menu Action Error!", msg)) menu.addAction(menu_action)
def _update_file_menu(self): """ Set up the File menu and update the menu with recent files """ self.file_menu.clear() newAction = QAction("&New Reduction...", self) newAction.setShortcut("Ctrl+N") newAction.setStatusTip("Start a new reduction") newAction.triggered.connect(self._new) openAction = QAction("&Open...", self) openAction.setShortcut("Ctrl+O") openAction.setStatusTip("Open an XML file containing reduction parameters") openAction.triggered.connect(self._file_open) saveAsAction = QAction("Save as...", self) saveAsAction.setStatusTip("Save the reduction parameters to XML") saveAsAction.triggered.connect(self._save_as) saveAction = QAction("&Save...", self) saveAction.setShortcut("Ctrl+S") saveAction.setStatusTip("Save the reduction parameters to XML") saveAction.triggered.connect(self._save) exportAction = QAction("&Export...", self) exportAction.setShortcut("Ctrl+E") exportAction.setStatusTip("Export to python script for Mantid") exportAction.triggered.connect(self._export) quitAction = QAction("&Quit", self) quitAction.setShortcut("Ctrl+Q") quitAction.triggered.connect(self.close) self.file_menu.addAction(newAction) self.file_menu.addAction(openAction) self.file_menu.addAction(saveAction) self.file_menu.addAction(saveAsAction) self.file_menu.addAction(exportAction) self.file_menu.addSeparator() if self.general_settings.debug: clearAction = QAction("&Clear settings and quit", self) clearAction.setStatusTip("Restore initial application settings and close the application") clearAction.triggered.connect(self._clear_and_close) self.file_menu.addAction(clearAction) self.file_menu.addAction(quitAction) # TOOLS menu instrAction = QAction("Change &instrument...", self) instrAction.setShortcut("Ctrl+I") instrAction.setStatusTip("Select a new instrument") instrAction.triggered.connect(self._change_instrument) debug_menu_item_str = "Turn debug mode ON" if self.general_settings.debug: debug_menu_item_str = "Turn debug mode OFF" debugAction = QAction(debug_menu_item_str, self) debugAction.setStatusTip(debug_menu_item_str) debugAction.triggered.connect(self._debug_mode) self.tools_menu.clear() self.tools_menu.addAction(instrAction) self.tools_menu.addAction(debugAction) recent_files = [] for fname in self._recent_files: if fname != self._filename and QFile.exists(fname) and fname not in recent_files: recent_files.append(fname) if len(recent_files) > 0: self.file_menu.addSeparator() for i, fname in enumerate(recent_files): action = QAction("&%d %s" % (i + 1, QFileInfo(fname).fileName()), self) action.setData(fname) action.triggered.connect(self.open_file) self.file_menu.addAction(action)
def _update_file_menu(self): """ Set up the File menu and update the menu with recent files """ self.file_menu.clear() newAction = QAction("&New Reduction...", self) newAction.setShortcut("Ctrl+N") newAction.setStatusTip("Start a new reduction") newAction.triggered.connect(self._new) openAction = QAction("&Open...", self) openAction.setShortcut("Ctrl+O") openAction.setStatusTip("Open an XML file containing reduction parameters") openAction.triggered.connect(self._file_open) saveAsAction = QAction("Save as...", self) saveAsAction.setStatusTip("Save the reduction parameters to XML") saveAsAction.triggered.connect(self._save_as) saveAction = QAction("&Save...", self) saveAction.setShortcut("Ctrl+S") saveAction.setStatusTip("Save the reduction parameters to XML") saveAction.triggered.connect(self._save) exportAction = QAction("&Export...", self) exportAction.setShortcut("Ctrl+E") exportAction.setStatusTip("Export to python script for Mantid") exportAction.triggered.connect(self._export) quitAction = QAction("&Quit", self) quitAction.setShortcut("Ctrl+Q") quitAction.triggered.connect(self.close) self.file_menu.addAction(newAction) self.file_menu.addAction(openAction) self.file_menu.addAction(saveAction) self.file_menu.addAction(saveAsAction) self.file_menu.addAction(exportAction) self.file_menu.addSeparator() if self.general_settings.debug: clearAction = QAction("&Clear settings and quit", self) clearAction.setStatusTip("Restore initial application settings and close the application") clearAction.triggered.connect(self._clear_and_close) self.file_menu.addAction(clearAction) self.file_menu.addAction(quitAction) # TOOLS menu instrAction = QAction("Change &instrument...", self) instrAction.setShortcut("Ctrl+I") instrAction.setStatusTip("Select a new instrument") instrAction.triggered.connect(self._change_instrument) debug_menu_item_str = "Turn debug mode ON" if self.general_settings.debug: debug_menu_item_str = "Turn debug mode OFF" debugAction = QAction(debug_menu_item_str, self) debugAction.setStatusTip(debug_menu_item_str) debugAction.triggered.connect(self._debug_mode) self.tools_menu.clear() self.tools_menu.addAction(instrAction) self.tools_menu.addAction(debugAction) recent_files = [] for fname in self._recent_files: if fname != self._filename and QFile.exists(fname) and fname not in recent_files: recent_files.append(fname) if len(recent_files)>0: self.file_menu.addSeparator() for i, fname in enumerate(recent_files): action = QAction("&%d %s" % (i+1, QFileInfo(fname).fileName()), self) action.setData(fname) action.triggered.connect(self.open_file) self.file_menu.addAction(action)