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)
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)
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_()
def keyPressEvent(self, event): self.PressedKey = event.key() QMainWindow.keyPressEvent(self, event)
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 }
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")
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_()
def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.iface.abort() QMainWindow.keyPressEvent(self, event)
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)