def keyPressEvent(self, event):
        key = event.key()
        
        #Duplicate the frame step size (speed) when pressed  > or .: 
        if key == 46 or key == 62:
            self.frame_step *= 2
            self.ui.spinBox_step.setValue(self.frame_step)

        #Half the frame step size (speed) when pressed: < or ,
        elif key == 44 or key == 60:
            self.frame_step //=2
            if self.frame_step<1:
                self.frame_step = 1
            self.ui.spinBox_step.setValue(self.frame_step)

        #print(event.key())
        elif self.fid == -1:
            return
            
        #Move backwards when  are pressed
        elif key == Qt.Key_Left or key == 39:
            self.frame_number -= self.frame_step
            if self.frame_number<0:
                self.frame_number = 0
            self.ui.spinBox_frame.setValue(self.frame_number)
        
        #Move forward when  are pressed
        elif key == Qt.Key_Right or key == 92:
            self.frame_number += self.frame_step
            if self.frame_number >= self.tot_frames:
                self.frame_number = self.tot_frames-1
            self.ui.spinBox_frame.setValue(self.frame_number)

        else:
            QMainWindow.keyPressEvent(self, event)
    def keyPressEvent(self, event):
        key = event.key()

        #Duplicate the frame step size (speed) when pressed  > or .:
        if key == 46 or key == 62:
            self.frame_step *= 2
            self.ui.spinBox_step.setValue(self.frame_step)

        #Half the frame step size (speed) when pressed: < or ,
        elif key == 44 or key == 60:
            self.frame_step //= 2
            if self.frame_step < 1:
                self.frame_step = 1
            self.ui.spinBox_step.setValue(self.frame_step)

        #print(event.key())
        elif self.fid == -1:
            return

        #Move backwards when  are pressed
        elif key == Qt.Key_Left or key == 39:
            self.frame_number -= self.frame_step
            if self.frame_number < 0:
                self.frame_number = 0
            self.ui.spinBox_frame.setValue(self.frame_number)

        #Move forward when  are pressed
        elif key == Qt.Key_Right or key == 92:
            self.frame_number += self.frame_step
            if self.frame_number >= self.tot_frames:
                self.frame_number = self.tot_frames - 1
            self.ui.spinBox_frame.setValue(self.frame_number)

        else:
            QMainWindow.keyPressEvent(self, event)
    def keyPressEvent(self, event):
        if self.vid is not None:
            # break no file open, nothing to do here
            return
        key = event.key()
        if key == Qt.Key_Minus:
            self.twoViews.zoom(-1)
        elif key == Qt.Key_Plus:
            self.twoViews.zoom(1)

        else:
            QMainWindow.keyPressEvent(self, event)
Exemple #4
0
 def keyPressEvent(self, event):
     if (event.modifiers() & Qt.ControlModifier):
         if event.key() == Qt.Key_W:
             self.closeTab(self.tab_widget.currentIndex())
     if event.key() == Qt.Key_Meta:
         self.meta_key_pressed = True
     elif self.meta_key_pressed and event.key() == Qt.Key_Up:
         print("prev")
         self.tab_widget.setCurrentIndex(self.tab_widget.currentIndex() - 1)
     elif self.meta_key_pressed and event.key() == Qt.Key_Down:
         print("next")
         self.tab_widget.setCurrentIndex(self.tab_widget.currentIndex() + 1)
     else:
         return QMainWindow.keyPressEvent(self, event)
Exemple #5
0
def main(icon_spec):
    app = QApplication(sys.argv)

    main_window = QMainWindow()

    def sigint_handler(*args):
        main_window.close()

    signal.signal(signal.SIGINT, sigint_handler)
    # the timer enables triggering the sigint_handler
    signal_timer = QTimer()
    signal_timer.start(100)
    signal_timer.timeout.connect(lambda: None)

    tool_bar = QToolBar()
    main_window.addToolBar(Qt.TopToolBarArea, tool_bar)

    table_view = QTableView()
    table_view.setSelectionBehavior(QAbstractItemView.SelectRows)
    table_view.setSelectionMode(QAbstractItemView.SingleSelection)
    table_view.setSortingEnabled(True)
    main_window.setCentralWidget(table_view)

    proxy_model = QSortFilterProxyModel()
    proxy_model.setFilterCaseSensitivity(Qt.CaseInsensitive)
    proxy_model.setFilterKeyColumn(1)
    table_view.setModel(proxy_model)
    proxy_model.layoutChanged.connect(table_view.resizeRowsToContents)

    item_model = QStandardItemModel()
    proxy_model.setSourceModel(item_model)

    # get all icons and their available sizes
    icons = []
    all_sizes = set([])
    QIcon.setThemeName('Tango')
    for context, icon_names in icon_spec:
        for icon_name in icon_names:
            icon = QIcon.fromTheme(icon_name)
            sizes = []
            for size in icon.availableSizes():
                size = (size.width(), size.height())
                sizes.append(size)
                all_sizes.add(size)
            sizes.sort()
            icons.append({
                'context': context,
                'icon_name': icon_name,
                'icon': icon,
                'sizes': sizes,
            })
    all_sizes = list(all_sizes)
    all_sizes.sort()

    # input field for filter
    def filter_changed(value):
        proxy_model.setFilterRegExp(value)
        table_view.resizeRowsToContents()

    filter_line_edit = QLineEdit()
    filter_line_edit.setMaximumWidth(200)
    filter_line_edit.setPlaceholderText('Filter name')
    filter_line_edit.setToolTip(
        'Filter name optionally using regular expressions (' +
        QKeySequence(QKeySequence.Find).toString() + ')')
    filter_line_edit.textChanged.connect(filter_changed)
    tool_bar.addWidget(filter_line_edit)

    # actions to toggle visibility of available sizes/columns
    def action_toggled(index):
        column = 2 + index
        table_view.setColumnHidden(column,
                                   not table_view.isColumnHidden(column))
        table_view.resizeColumnsToContents()
        table_view.resizeRowsToContents()

    signal_mapper = QSignalMapper()
    for i, size in enumerate(all_sizes):
        action = QAction('%dx%d' % size, tool_bar)
        action.setCheckable(True)
        action.setChecked(True)
        tool_bar.addAction(action)
        action.toggled.connect(signal_mapper.map)
        signal_mapper.setMapping(action, i)
        # set tool tip and handle key sequence
        tool_tip = 'Toggle visibility of column'
        if i < 10:
            digit = ('%d' % (i + 1))[-1]
            tool_tip += ' (%s)' % QKeySequence('Ctrl+%s' % digit).toString()
        action.setToolTip(tool_tip)
    signal_mapper.mapped.connect(action_toggled)

    # label columns
    header_labels = ['context', 'name']
    for width, height in all_sizes:
        header_labels.append('%dx%d' % (width, height))
    item_model.setColumnCount(len(header_labels))
    item_model.setHorizontalHeaderLabels(header_labels)

    # fill rows
    item_model.setRowCount(len(icons))
    for row, icon_data in enumerate(icons):
        # context
        item = QStandardItem(icon_data['context'])
        item.setFlags(item.flags() ^ Qt.ItemIsEditable)
        item_model.setItem(row, 0, item)
        # icon name
        item = QStandardItem(icon_data['icon_name'])
        item.setFlags(item.flags() ^ Qt.ItemIsEditable)
        item_model.setItem(row, 1, item)
        for index_in_all_sizes, size in enumerate(all_sizes):
            column = 2 + index_in_all_sizes
            if size in icon_data['sizes']:
                # icon as pixmap to keep specific size
                item = QStandardItem('')
                pixmap = icon_data['icon'].pixmap(size[0], size[1])
                item.setData(pixmap, Qt.DecorationRole)
                item.setFlags(item.flags() ^ Qt.ItemIsEditable)
                item_model.setItem(row, column, item)
            else:
                # single space to be sortable against icons
                item = QStandardItem(' ')
                item.setFlags(item.flags() ^ Qt.ItemIsEditable)
                item_model.setItem(row, column, item)

    table_view.resizeColumnsToContents()
    # manually set row heights because resizeRowsToContents is not working properly
    for row, icon_data in enumerate(icons):
        if len(icon_data['sizes']) > 0:
            max_size = icon_data['sizes'][-1]
            table_view.setRowHeight(row, max_size[1])

    # enable focus find (ctrl+f) and toggle columns (ctrl+NUM)
    def main_window_keyPressEvent(self,
                                  event,
                                  old_keyPressEvent=QMainWindow.keyPressEvent):
        if event.matches(QKeySequence.Find):
            filter_line_edit.setFocus()
            return
        if event.modifiers() == Qt.ControlModifier and event.key(
        ) >= Qt.Key_0 and event.key() <= Qt.Key_9:
            index = event.key() - Qt.Key_1
            if event.key() == Qt.Key_0:
                index += 10
            action = signal_mapper.mapping(index)
            if action:
                action.toggle()
                return
        old_keyPressEvent(self, event)

    main_window.keyPressEvent = MethodType(main_window_keyPressEvent,
                                           table_view)

    # enable copy (ctrl+c) name of icon to clipboard
    def table_view_keyPressEvent(self,
                                 event,
                                 old_keyPressEvent=QTableView.keyPressEvent):
        if event.matches(QKeySequence.Copy):
            selection_model = self.selectionModel()
            if selection_model.hasSelection():
                index = selection_model.selectedRows()[0]
                source_index = self.model().mapToSource(index)
                item = self.model().sourceModel().item(source_index.row(), 1)
                icon_name = item.data(Qt.EditRole)
                app.clipboard().setText(icon_name.toString())
                return
        old_keyPressEvent(self, event)

    table_view.keyPressEvent = MethodType(table_view_keyPressEvent, table_view)

    main_window.showMaximized()
    return app.exec_()
Exemple #6
0
 def keyPressEvent(self, event):
     self.PressedKey = event.key()
     QMainWindow.keyPressEvent(self, event)
Exemple #7
0
def load_ui(controller=None):
    # make things bigger for high dpi displays
    if hasattr(QtCore.Qt, 'AA_EnableHighDpiScaling'):
        QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True)

    if hasattr(QtCore.Qt, 'AA_UseHighDpiPixmaps'):
        QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True)

    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    #ui = base.Ui_MainWindow()
    ui = uic.loadUi(ui_filename, MainWindow)
    #ui.setupUi(MainWindow)
    # setup menus
    ui._calibrationMenu_actions = []
    a = QAction("Save", ui.calibrationMenu)
    a.triggered.connect(lambda a: calibration.save_calibrations())
    ui._calibrationMenu_actions.append(a)
    ui.calibrationMenu.addAction(a)
    if controller is not None:
        if controller.get('_fake_legs'):
            # TODO might be easier/cleaner to fake a joystick
            # this code is dangerous as it disables the estops
            #controller.set('deadman', True)
            #controller.call('all_legs', 'set_estop', 0)

            def key_press(e):
                #print("key_pressed: %s" % (e, ))
                #if e.modifiers() & QtCore.Qt.ShiftModifier:
                #    print(" shift down!")
                k = e.key()
                #print(" key: %s" % (k, ))
                if k == QtCore.Qt.Key_Up:
                    # send forward plan
                    controller.no_return_call('set_target', [0., 1., 0.])
                elif k == QtCore.Qt.Key_Down:
                    # send backward plan
                    controller.no_return_call('set_target', [0., -1., 0.])
                # TODO turning
                elif k == QtCore.Qt.Key_Escape:
                    # send 0 plan
                    controller.no_return_call('set_target', [0., 0., 0.])

            MainWindow.keyPressEvent = key_press
        a = QAction("Zero calf", ui.calibrationMenu)
        a.triggered.connect(
            lambda a: controller.no_return_call('leg.compute_calf_zero'))
        ui._calibrationMenu_actions.append(a)
        ui.calibrationMenu.addAction(a)

        ui._legsMenu_actions = []
        legs = list(controller.call('legs.keys'))
        for leg in legs:
            a = QAction(consts.LEG_NAME_BY_NUMBER[leg], ui.legsMenu)
            a.triggered.connect(
                lambda a, i=leg: controller.no_return_call('set_leg', i))
            ui._legsMenu_actions.append(a)
            ui.legsMenu.addAction(a)

        # enable/disable leg radio buttons
        for i in range(1, 7):
            r = getattr(ui, 'leg%iRadioButton' % i)
            if i in legs:
                r.setEnabled(True)
                # attach leg select to click
                r.clicked.connect(
                    lambda c, li=i: controller.no_return_call('set_leg', li))
            else:
                r.setEnabled(False)

        ui._modesMenu_actions = []
        modes = controller.get('modes')
        for mode in modes:
            a = QAction(mode, ui.modesMenu)
            a.triggered.connect(
                lambda a, m=mode: controller.no_return_call('set_mode', m))
            ui._modesMenu_actions.append(a)
            ui.modesMenu.addAction(a)
        current_mode = controller.get('mode')
        # enable/disable mode radio buttons
        for mode in modes:
            n = '%sRadioButton' % mode
            if not hasattr(ui, n):
                continue
            r = getattr(ui, n)
            r.setEnabled(True)
            if mode == current_mode:
                r.setChecked(True)
            r.clicked.connect(
                lambda c, m=mode: controller.no_return_call('set_mode', m))
        ui.modesMenu.setTitle("Mode: %s" % current_mode)
        ui.legsMenu.setTitle(
            "Leg: %s" % consts.LEG_NAME_BY_NUMBER[controller.get('leg_index')])

        def on_mode(mode):
            ui.modesMenu.setTitle("Mode: %s" % mode)
            n = '%sRadioButton' % mode
            if not hasattr(ui, n):
                # TODO uncheck all other modes?
                return
            r = getattr(ui, n)
            r.setChecked(True)

        controller.on('', 'mode', on_mode)

        #controller.on(
        #    '', 'mode', lambda m: ui.modesMenu.setTitle("Mode: %s" % m))

        def on_leg(leg):
            ui.legsMenu.setTitle("Leg: %s" % consts.LEG_NAME_BY_NUMBER[leg])
            r = getattr(ui, 'leg%iRadioButton' % leg)
            r.setChecked(True)

        controller.on('', 'set_leg', on_leg)
        #controller.on('', 'set_leg', lambda m: ui.legsMenu.setTitle(
        #    "Leg: %s" % consts.LEG_NAME_BY_NUMBER[m]))
        controller.on(
            '', 'estop', lambda v:
            (ui.estopLabel.setText("Estop: %s" % consts.ESTOP_BY_NUMBER[v]),
             ui.estopLabel.setStyleSheet(
                 ("background-color: green;"
                  if v == consts.ESTOP_OFF else "background-color: none;"))))
    tm = TabManager(ui.tabs)
    tm.add_tab('PID', PIDTab(ui, controller))
    tm.add_tab('Leg', LegTab(ui, controller))
    tm.add_tab('Body', BodyTab(ui, controller))
    tm.show_current()

    controller.on('stance', 'stability_margin',
                  lambda v: ui.stabilityLabel.setText("Stability: %.0f" % v))
    if 'imu' in controller.call('bodies.keys'):
        controller.on('bodies["imu"]', 'feed_pressure',
                      lambda v: ui.pressureLabel.setText("PSI: %i" % v))
        controller.on('bodies["imu"]', 'engine_rpm',
                      lambda v: ui.rpmLabel.setText("RPM: %0.0f" % v))
        controller.on('bodies["imu"]', 'feed_oil_temp',
                      lambda v: ui.oilTempLabel.setText("Temp: %0.2f" % v))

        def new_heading(roll, pitch, yaw):
            ui.rollLabel.setText("Roll: %0.1f" % roll)
            ui.pitchLabel.setText("Pitch: %0.1f" % pitch)
            ui.yawLabel.setText("Yaw: %0.1f" % yaw)

        controller.on('bodies["imu"]', 'heading', new_heading)
        #controller.on(
        #    'bodies["imu"]',
        #    'heading',
        #    lambda r, p, y: ui.imuLabel.setText(
        #        "IMU: %0.2f %0.2f %0.2f" % (r, p, y)))

    # param changes
    def new_speed(value):
        ui.speedSlider.setValue(value)
        ui.speedLabel.setText(str(value))
        controller.call('set_target')

    controller.on('param', 'speed.foot', new_speed)
    ui.speedSlider.valueChanged.connect(
        lambda v: controller.call('param.set_param', 'speed.foot', v))
    spd = controller.get("param['speed.foot']")
    ui.speedSlider.setValue(spd)
    ui.speedLabel.setText(str(spd))
    ui._configurationMenu_actions = []
    ui._configurationMenu_submenus = {}
    for name in sorted(controller.call('param.list_params')):
        # make submenus
        menu = ui.configurationMenu
        if '.' in name:
            # split submenus from name (leaving out last key)
            sn = name.split('.')
            subname = sn[-1]
            sn = sn[:-1]
            sd = ui._configurationMenu_submenus
            n = ""
            for ssn in sn:
                if len(n):
                    n = '%s.%s' % (n, ssn)
                else:
                    n = ssn
                if n not in sd:
                    #print("adding menu %s to %s" % (ssn, menu))
                    ui._configurationMenu_submenus[n] = menu.addMenu(ssn)
                menu = ui._configurationMenu_submenus[n]
            menu = ui._configurationMenu_submenus['.'.join(sn)]
        else:
            subname = name

        # add item to menu
        # when clicked show InputDialog (or have check mark)
        value = controller.get('param["%s"]' % name)
        if isinstance(value, bool):
            a = QAction(subname, menu, checkable=True, checked=value)
            a.triggered.connect(
                (lambda value, n=name: controller.no_return_call(
                    'param.set_param', n, value)))
            controller.on('param',
                          name,
                          lambda nv, action=a: action.setChecked(nv))
        else:
            a = QAction('[%s] %s' % (value, subname), menu)

            def prompt_for_value(value, n=name):
                cv = controller.get('param["%s"]' % n)
                meta = controller.call('param.get_meta', n, {})
                #    if isinstance(cv, float):
                #        f = QInputDialog.getDouble
                #    else:
                #        f = QInputDialog.getInt
                #    kwargs = controller.call('param.get_meta', n, {})
                #    nv, ok = f(MainWindow, n, n, cv, **kwargs)
                #print(n, cv, meta, value)
                nv, ok = launch_dialog(n, cv, meta)
                if ok:
                    controller.set('param["%s"]' % n, nv)

            if isinstance(value, float):
                fmt = '[%0.2f] %s'
            elif isinstance(value, int):
                fmt = '[%i] %s'
            else:
                fmt = '[%s] %s'

            def set_text(nv, action=a, n=subname, fmt=fmt):
                action.setText(fmt % (nv, n))

            # have title include value?
            controller.on('param', name, set_text)
            #controller.param.on(
            #    name, lambda nv, action=a, n=name: action.setText(
            #        '[%s]%s' % (nv, n)))
            a.triggered.connect(prompt_for_value)
        ui._configurationMenu_actions.append(a)
        menu.addAction(a)

    MainWindow.show()
    #MainWindow.showFullScreen()
    timer = None
    if controller is not None:
        timer = QtCore.QTimer()

        def update():
            try:
                controller.update()
                controller.joy.update()
            except Exception as e:
                ex_type, ex, tb = sys.exc_info()
                print("controller update error: %s" % e)
                traceback.print_tb(tb)
                # TODO stop updates on error?
                #timer.stop()

        #timer.timeout.connect(controller.update)
        timer.timeout.connect(update)
        timer.start(10)
    return {
        'app': app,
        'ui': ui,
        'window': MainWindow,
        'tab_manager': tm,
        'timer': timer
    }
Exemple #8
0
        env = RGBImgPartialObsWrapper(env)
        env = ImgObsWrapper(env)

    policy_net = load_net(args.policy_net, True)
    reward_net = load_net(args.reward_net, True)

    if args.backend == "qt":
        app = QApplication(sys.argv)
        window = QMainWindow()
        central_widget = QWidget()
        v_layout = QVBoxLayout(central_widget)
        widget_game = QLabel("")
        widget_caption = QLabel("")
        v_layout.addWidget(widget_game)
        v_layout.addWidget(widget_caption)
        window.setCentralWidget(central_widget)
        redraw = lambda img: (widget_game.setPixmap(nparray_to_qpixmap(img)), widget_caption.setText(env.mission))
        game = Game(env, args.seed, args.agent_view, args.games_dir, redraw, lambda:..., True, policy_net, args.max_games, args.waiting_time, reward_net)
        window.keyPressEvent = game.qt_key_handler
        window.show()
        sys.exit(app.exec_())
    elif args.backend == "plt":
        window = Window('gym_minigrid - ' + args.env)
        redraw = lambda img: (window.show_img(img), window.set_caption(env.mission))
        game = Game(env, args.seed, args.agent_view, args.games_dir, redraw, lambda:..., True, policy_net, args.max_games, args.waiting_time, reward_net)
        window.reg_key_handler(game.plt_key_handler)
        # Blocking event loop
        window.show(block=True)
    else:
        print("unknown backend")
Exemple #9
0
def main(icon_spec):
    app = QApplication(sys.argv)

    main_window = QMainWindow()

    def sigint_handler(*args):
        main_window.close()
    signal.signal(signal.SIGINT, sigint_handler)
    # the timer enables triggering the sigint_handler
    signal_timer = QTimer()
    signal_timer.start(100)
    signal_timer.timeout.connect(lambda: None)

    tool_bar = QToolBar()
    main_window.addToolBar(Qt.TopToolBarArea, tool_bar)

    table_view = QTableView()
    table_view.setSelectionBehavior(QAbstractItemView.SelectRows)
    table_view.setSelectionMode(QAbstractItemView.SingleSelection)
    table_view.setSortingEnabled(True)
    main_window.setCentralWidget(table_view)

    proxy_model = QSortFilterProxyModel()
    proxy_model.setFilterCaseSensitivity(Qt.CaseInsensitive)
    proxy_model.setFilterKeyColumn(1)
    table_view.setModel(proxy_model)
    proxy_model.layoutChanged.connect(table_view.resizeRowsToContents)

    item_model = QStandardItemModel()
    proxy_model.setSourceModel(item_model)

    # get all icons and their available sizes
    icons = []
    all_sizes = set([])
    for context, icon_names in icon_spec:
        for icon_name in icon_names:
            icon = QIcon.fromTheme(icon_name)
            sizes = []
            for size in icon.availableSizes():
                size = (size.width(), size.height())
                sizes.append(size)
                all_sizes.add(size)
            sizes.sort()
            icons.append({
                'context': context,
                'icon_name': icon_name,
                'icon': icon,
                'sizes': sizes,
            })
    all_sizes = list(all_sizes)
    all_sizes.sort()

    # input field for filter
    def filter_changed(value):
        proxy_model.setFilterRegExp(value)
        table_view.resizeRowsToContents()
    filter_line_edit = QLineEdit()
    filter_line_edit.setMaximumWidth(200)
    filter_line_edit.setPlaceholderText('Filter name')
    filter_line_edit.setToolTip('Filter name optionally using regular expressions (' + QKeySequence(QKeySequence.Find).toString() + ')')
    filter_line_edit.textChanged.connect(filter_changed)
    tool_bar.addWidget(filter_line_edit)

    # actions to toggle visibility of available sizes/columns 
    def action_toggled(index):
        column = 2 + index
        table_view.setColumnHidden(column, not table_view.isColumnHidden(column))
        table_view.resizeColumnsToContents()
        table_view.resizeRowsToContents()
    signal_mapper = QSignalMapper()
    for i, size in enumerate(all_sizes):
        action = QAction('%dx%d' % size, tool_bar)
        action.setCheckable(True)
        action.setChecked(True)
        tool_bar.addAction(action)
        action.toggled.connect(signal_mapper.map)
        signal_mapper.setMapping(action, i)
        # set tool tip and handle key sequence
        tool_tip = 'Toggle visibility of column'
        if i < 10:
            digit = ('%d' % (i + 1))[-1]
            tool_tip += ' (%s)' % QKeySequence('Ctrl+%s' % digit).toString()
        action.setToolTip(tool_tip)
    signal_mapper.mapped.connect(action_toggled)

    # label columns
    header_labels = ['context', 'name']
    for width, height in all_sizes:
        header_labels.append('%dx%d' % (width, height))
    item_model.setColumnCount(len(header_labels))
    item_model.setHorizontalHeaderLabels(header_labels)

    # fill rows
    item_model.setRowCount(len(icons))
    for row, icon_data in enumerate(icons):
        # context
        item = QStandardItem(icon_data['context'])
        item.setFlags(item.flags() ^ Qt.ItemIsEditable)
        item_model.setItem(row, 0, item)
        # icon name
        item = QStandardItem(icon_data['icon_name'])
        item.setFlags(item.flags() ^ Qt.ItemIsEditable)
        item_model.setItem(row, 1, item)
        for index_in_all_sizes, size in enumerate(all_sizes):
            column = 2 + index_in_all_sizes
            if size in icon_data['sizes']:
                # icon as pixmap to keep specific size
                item = QStandardItem('')
                pixmap = icon_data['icon'].pixmap(size[0], size[1])
                item.setData(pixmap, Qt.DecorationRole)
                item.setFlags(item.flags() ^ Qt.ItemIsEditable)
                item_model.setItem(row, column, item)
            else:
                # single space to be sortable against icons
                item = QStandardItem(' ')
                item.setFlags(item.flags() ^ Qt.ItemIsEditable)
                item_model.setItem(row, column, item)

    table_view.resizeColumnsToContents()
    # manually set row heights because resizeRowsToContents is not working properly
    for row, icon_data in enumerate(icons):
        if len(icon_data['sizes']) > 0:
            max_size = icon_data['sizes'][-1]
            table_view.setRowHeight(row, max_size[1])

    # enable focus find (ctrl+f) and toggle columns (ctrl+NUM)
    def main_window_keyPressEvent(self, event, old_keyPressEvent=QMainWindow.keyPressEvent):
        if event.matches(QKeySequence.Find):
            filter_line_edit.setFocus()
            return
        if event.modifiers() == Qt.ControlModifier and event.key() >= Qt.Key_0 and event.key() <= Qt.Key_9:
            index = event.key() - Qt.Key_1
            if event.key() == Qt.Key_0:
                index += 10
            action = signal_mapper.mapping(index)
            if action:
                action.toggle()
                return
        old_keyPressEvent(self, event)
    main_window.keyPressEvent = MethodType(main_window_keyPressEvent, table_view)

    # enable copy (ctrl+c) name of icon to clipboard
    def table_view_keyPressEvent(self, event, old_keyPressEvent=QTableView.keyPressEvent):
        if event.matches(QKeySequence.Copy):
            selection_model = self.selectionModel()
            if selection_model.hasSelection():
                index = selection_model.selectedRows()[0]
                source_index = self.model().mapToSource(index)
                item = self.model().sourceModel().item(source_index.row(), 1)
                icon_name = item.data(Qt.EditRole)
                app.clipboard().setText(icon_name.toString())
                return
        old_keyPressEvent(self, event)
    table_view.keyPressEvent = MethodType(table_view_keyPressEvent, table_view)

    main_window.showMaximized()
    return app.exec_()
Exemple #10
0
 def keyPressEvent(self, event):
     if event.key() == Qt.Key_Escape:
         self.iface.abort()
     QMainWindow.keyPressEvent(self, event)
Exemple #11
0
 def keyPressEvent(self, key_event):
     ''' react on keyboard keys when they are pressed.'''
     if key_event.text() == 'q':
         self.close()
     QMainWindow.keyPressEvent(self, key_event)