Пример #1
0
    def create_context_menu(self):
        menu = QMenu()
        menu.setToolTipsVisible(True)
        self._add_zoom_actions_to_menu(menu)

        if self.something_is_selected:
            filter_bw = Filter.read_configured_filter_bw()
            text = self.tr("Apply bandpass filter (filter bw={0:n})".format(filter_bw))
            create_from_frequency_selection = menu.addAction(text)
            create_from_frequency_selection.triggered.connect(self.on_create_from_frequency_selection_triggered)
            create_from_frequency_selection.setIcon(QIcon.fromTheme("view-filter"))

            try:
                cancel_button = " or ".join(k.toString() for k in QKeySequence.keyBindings(QKeySequence.Cancel))
            except Exception as e:
                logger.debug("Error reading cancel button: " + str(e))
                cancel_button = "Esc"

            create_from_frequency_selection.setToolTip("You can abort filtering with <b>{}</b>.".format(cancel_button))

        configure_filter_bw = menu.addAction(self.tr("Configure filter bandwidth..."))
        configure_filter_bw.triggered.connect(self.on_configure_filter_bw_triggered)
        configure_filter_bw.setIcon(QIcon.fromTheme("configure"))

        menu.addSeparator()

        export_fta_action = menu.addAction("Export spectrogram...")
        export_fta_action.triggered.connect(self.on_export_fta_action_triggered)

        return menu
Пример #2
0
    def create_context_menu(self):
        menu = QMenu()
        menu.setToolTipsVisible(True)
        self._add_zoom_actions_to_menu(menu)

        if self.something_is_selected:
            filter_bw = Filter.read_configured_filter_bw()
            text = self.tr(
                "Apply bandpass filter (filter bw={0:n})".format(filter_bw))
            create_from_frequency_selection = menu.addAction(text)
            create_from_frequency_selection.triggered.connect(
                self.on_create_from_frequency_selection_triggered)
            create_from_frequency_selection.setIcon(
                QIcon.fromTheme("view-filter"))

            try:
                cancel_button = " or ".join(
                    k.toString()
                    for k in QKeySequence.keyBindings(QKeySequence.Cancel))
            except Exception as e:
                logger.debug("Error reading cancel button: " + str(e))
                cancel_button = "Esc"

            create_from_frequency_selection.setToolTip(
                "You can abort filtering with <b>{}</b>.".format(
                    cancel_button))

        configure_filter_bw = menu.addAction(
            self.tr("Configure filter bandwidth..."))
        configure_filter_bw.triggered.connect(
            self.on_configure_filter_bw_triggered)
        configure_filter_bw.setIcon(QIcon.fromTheme("configure"))

        return menu
Пример #3
0
def bind_all_standard_keys(standard_key,
                           handler_cb,
                           parent=None,
                           context=Qt.WindowShortcut):
    """Workaround for Qt apparently only binding the first StandardKey
    when it's fed into QShortcut

    @type standard_key: C{QtGui.QKeySequence.StandardKey}
    @type handler_cb: C{function}
    @type parent: C{QObject}
    @type context: C{QtCore.Qt.ShortcutContext}

    @rtype: C{[QtWidgets.QShortcut]}
    """

    results = []
    if isinstance(standard_key, QKeySequence.StandardKey):
        hotkeys = QKeySequence.keyBindings(standard_key)
    else:
        hotkeys = [standard_key]

    for hotkey in hotkeys:
        shortcut = QShortcut(hotkey, parent)
        shortcut.setContext(context)
        shortcut.activated.connect(handler_cb)
        results.append(shortcut)
    return results
Пример #4
0
    def createToolBar(self) -> QToolBar:
        navigationBar = QToolBar(self.tr("Navigation"))
        navigationBar.setAllowedAreas(Qt.TopToolBarArea | Qt.BottomToolBarArea)
        navigationBar.toggleViewAction().setEnabled(False)

        self.m_historyBackAction = QAction(self)
        backShortcuts = QKeySequence.keyBindings(QKeySequence.Back)
        for i, x in enumerate(reversed(backShortcuts)):
            if x[0] == Qt.Key_Backspace:
                # Chromium already handles navigate on backspace when appropriate.
                backShortcuts.pop(i)

        # For some reason Qt doesn't bind the dedicated Back key to Back.
        backShortcuts.append(QKeySequence(Qt.Key_Back))
        self.m_historyBackAction.setShortcuts(backShortcuts)
        self.m_historyBackAction.setIconVisibleInMenu(False)
        self.m_historyBackAction.setIcon(QIcon(":go-previous.png"))
        self.m_historyBackAction.triggered.connect(
            lambda: self.m_tabWidget.triggerWebPageAction(QWebEnginePage.Back))
        navigationBar.addAction(self.m_historyBackAction)

        self.m_historyForwardAction = QAction(self)
        fwdShortcuts = QKeySequence.keyBindings(QKeySequence.Forward)
        for i, x in enumerate(reversed(fwdShortcuts)):
            if x[0] & Qt.Key_unknown == Qt.Key_Backspace:
                fwdShortcuts.pop(i)
        fwdShortcuts.append(QKeySequence(Qt.Key_Forward))
        self.m_historyForwardAction.setShortcuts(fwdShortcuts)
        self.m_historyForwardAction.setIconVisibleInMenu(False)
        self.m_historyForwardAction.setIcon(QIcon(":go-next.png"))
        self.m_historyForwardAction.triggered.connect(
            lambda: self.m_tabWidget.triggerWebPageAction(QWebEnginePage.
                                                          Forward))
        navigationBar.addAction(self.m_historyForwardAction)

        self.m_stopReloadAction = QAction(self)
        self.m_stopReloadAction.triggered.connect(
            lambda: self.m_tabWidget.triggerWebPageAction(
                QWebEnginePage.WebAction(self.m_stopReloadAction.data())))
        navigationBar.addAction(self.m_stopReloadAction)
        navigationBar.addWidget(self.m_urlLineEdit)
        size = self.m_urlLineEdit.sizeHint().height()
        navigationBar.setIconSize(QSize(size, size))
        return navigationBar
Пример #5
0
    def initUI(self):
        # добавление меню бара
        menubar = self.menuBar()
        # добавление пунктов меню
        fileMenu = menubar.addMenu('&File')

        # значек & перед одной из букв в названии менюшки
        # позволяет выбирать его по нажатии буквы на клавиатуре поле альта

        # меню "открыть файл"
        fileOpenAction = QAction('&Open file', self)
        # сочетание клавиш для этого действия
        # fileOpenAction.setShortcut(QKeySequence(self.tr('CTRL+F')))
        fileOpenAction.setShortcuts(QKeySequence.keyBindings(
            QKeySequence.Open))
        # пояснение в строке состояния
        fileOpenAction.setStatusTip('Открыть файл')
        # присоединение действия к сигналу
        fileOpenAction.triggered.connect(self.showOpenDialog)

        # меню выход из программы
        exitAction = QAction(QIcon('exit.png'), '&Exit', self)
        exitAction.setShortcut(QKeySequence(self.tr('CTRL+Q')))
        # Windows не имеет сочетания клавишь для выхода
        # exitAction.setShortcuts(QKeySequence.keyBindings(QKeySequence.Quit))
        exitAction.setStatusTip('Exit application')
        exitAction.triggered.connect(qApp.quit)

        # добавление в меню 'файл'
        fileMenu.addAction(fileOpenAction)
        fileMenu.addAction(exitAction)

        self.statusBar()

        self.setGeometry(300, 300, 300, 400)
        self.setWindowTitle('BitCrusher')

        self.intervalSpin_N = QSpinBox(self)
        self.intervalSpin_N.setRange(1, 500)
        self.intervalSpin_N.setMaximum(500)
        self.intervalSpin_N.setValue(20)

        self.intervalSpin_Fs = QSpinBox(self)
        self.intervalSpin_Fs.setRange(1, 2000)
        self.intervalSpin_Fs.setMaximum(2000)
        self.intervalSpin_Fs.setValue(200)

        self.intervalSpin_Fx = QSpinBox(self)
        self.intervalSpin_Fx.setRange(1, 2000)
        self.intervalSpin_Fx.setMaximum(2000)
        self.intervalSpin_Fx.setValue(300)

        self.textEdit = QTextEdit(self)
        self.textEdit.setReadOnly(True)

        # кнопка
        self.resButton = QPushButton("Применить фильтр")
        # кнопка
        self.sinButton = QPushButton("Нужно больше (золота) наглядности")

        def sinButtonCilcked():
            # Порядок фильтра
            N = self.intervalSpin_N.value()
            Fs = self.intervalSpin_Fs.value()
            Fx = self.intervalSpin_Fx.value()

            self.textEdit.setText('True')

            # main_sin(N, Fs, Fx)

        def buttonCilcked():
            if manager.get_current():
                # Порядок фильтра
                N = self.intervalSpin_N.value()
                Fs = self.intervalSpin_Fs.value()
                Fx = self.intervalSpin_Fx.value()

                def myLogger(*args):
                    console = self.textEdit
                    for i in args:
                        console.append(str(i))

                if manager.get_current() != "":
                    (data, nchannels, sampwidth, framerate, nframes,
                     comptype) = open_file(manager.get_current(), myLogger)
                    f_to_save_in_1 = self.showSaveDialog()
                    f_to_save_in_1 = f_to_save_in_1[
                        0][:-4] + "_writeframesraw_" + f_to_save_in_1[0][-4:]
                    f_to_save_in_1 = open(f_to_save_in_1, 'wb')
                    main(data, nchannels, sampwidth, framerate, comptype, N,
                         myLogger, f_to_save_in_1, Fs, Fx)
                    f_to_save_in_1.close()

        self.resButton.clicked.connect(buttonCilcked)
        self.sinButton.clicked.connect(sinButtonCilcked)

        # вуктикальное расположение виджетов
        vbox = QVBoxLayout()
        wdg = QWidget()
        self.setCentralWidget(wdg)

        # добавляет строку с парой виджет виджет или строка виджет
        form = QFormLayout()
        form.addRow("Порядок фильтра", self.intervalSpin_N)
        form.addRow("Частота полосы пропускания", self.intervalSpin_Fs)
        form.addRow("Частота полосы затухания", self.intervalSpin_Fx)
        # добавлять сюда
        vbox.addLayout(form)
        vbox.addWidget(self.textEdit)
        vbox.addWidget(self.resButton)
        vbox.addWidget(self.sinButton)

        wdg.setLayout(vbox)

        self.show()
Пример #6
0
def keybinding(attr):
    """Return keybinding"""
    ks = getattr(QKeySequence, attr)
    # return from_qvariant(QKeySequence.keyBindings(ks)[0], str)
    return QKeySequence.keyBindings(ks)[0]
Пример #7
0
def keybinding(attr):
    """Return keybinding"""
    ks = getattr(QKeySequence, attr)
    return (QKeySequence.keyBindings(ks)[0], str)