0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-13 19:21:50 +02:00

feat: switch for keyboard shortcuts for motor movement

This commit is contained in:
wyzula-jan
2023-08-21 11:02:41 +02:00
parent 512e698e26
commit cac45626fc
2 changed files with 136 additions and 102 deletions

View File

@ -79,53 +79,64 @@
<property name="title">
<string>Motor Controls</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="1">
<widget class="QSpinBox" name="spinBox_step">
<property name="value">
<number>5</number>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QCheckBox" name="checkBox_enableArrows">
<property name="text">
<string>Move with arrow keys</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QToolButton" name="toolButton_left">
<property name="text">
<string>...</string>
</property>
<property name="arrowType">
<enum>Qt::LeftArrow</enum>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QToolButton" name="toolButton_up">
<property name="text">
<string>...</string>
</property>
<property name="arrowType">
<enum>Qt::UpArrow</enum>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QToolButton" name="toolButton_down">
<property name="text">
<string>...</string>
</property>
<property name="arrowType">
<enum>Qt::DownArrow</enum>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QToolButton" name="toolButton_right">
<property name="text">
<string>...</string>
</property>
<property name="arrowType">
<enum>Qt::RightArrow</enum>
</property>
</widget>
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QToolButton" name="toolButton_up">
<property name="text">
<string>...</string>
</property>
<property name="arrowType">
<enum>Qt::UpArrow</enum>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QToolButton" name="toolButton_left">
<property name="text">
<string>...</string>
</property>
<property name="arrowType">
<enum>Qt::LeftArrow</enum>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="spinBox_step">
<property name="value">
<number>5</number>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QToolButton" name="toolButton_right">
<property name="text">
<string>...</string>
</property>
<property name="arrowType">
<enum>Qt::RightArrow</enum>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QToolButton" name="toolButton_down">
<property name="text">
<string>...</string>
</property>
<property name="arrowType">
<enum>Qt::DownArrow</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
@ -139,28 +150,7 @@
<string>Motor Limits</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="4" column="2">
<widget class="QLabel" name="label_2">
<property name="text">
<string>- samy</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="label">
<property name="text">
<string>+ samy</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="label_4">
<property name="text">
<string>- samx</string>
</property>
</widget>
</item>
<item row="2" column="1">
<item row="3" column="1">
<widget class="QSpinBox" name="spinBox_x_min">
<property name="minimum">
<number>-1000</number>
@ -168,9 +158,12 @@
<property name="maximum">
<number>1000</number>
</property>
<property name="value">
<number>-100</number>
</property>
</widget>
</item>
<item row="1" column="2">
<item row="2" column="2">
<widget class="QSpinBox" name="spinBox_y_max">
<property name="minimum">
<number>-1000</number>
@ -178,9 +171,19 @@
<property name="maximum">
<number>1000</number>
</property>
<property name="value">
<number>100</number>
</property>
</widget>
</item>
<item row="2" column="3">
<item row="5" column="2">
<widget class="QLabel" name="label_2">
<property name="text">
<string>- samy</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QSpinBox" name="spinBox_x_max">
<property name="minimum">
<number>-1000</number>
@ -188,16 +191,33 @@
<property name="maximum">
<number>1000</number>
</property>
<property name="value">
<number>100</number>
</property>
</widget>
</item>
<item row="1" column="3">
<item row="1" column="2">
<widget class="QLabel" name="label">
<property name="text">
<string>+ samy</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QLabel" name="label_3">
<property name="text">
<string>- samx</string>
</property>
</widget>
</item>
<item row="3" column="2">
<item row="2" column="1">
<widget class="QLabel" name="label_4">
<property name="text">
<string>- samx</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QSpinBox" name="spinBox_y_min">
<property name="minimum">
<number>-1000</number>
@ -205,6 +225,16 @@
<property name="maximum">
<number>1000</number>
</property>
<property name="value">
<number>-100</number>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="pushButton_updateLimits">
<property name="text">
<string>Update</string>
</property>
</widget>
</item>
</layout>
@ -222,13 +252,6 @@
<string>Saved</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QPushButton" name="pushButton_4">
<property name="text">
<string>Go to selected</string>
</property>
</widget>
</item>
<item>
<widget class="QTableWidget" name="tableWidget">
<column>
@ -246,6 +269,11 @@
<string>Y</string>
</property>
</column>
<column>
<property name="text">
<string>Move</string>
</property>
</column>
</widget>
</item>
</layout>

View File

@ -2,8 +2,9 @@ import os
import numpy as np
from PyQt5 import QtGui
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import pyqtSignal, Qt
from PyQt5.QtGui import QKeySequence
from PyQt5.QtWidgets import QApplication, QWidget, QShortcut
from pyqtgraph.Qt import QtCore, QtWidgets, uic
import pyqtgraph as pg
@ -64,6 +65,9 @@ class MotorApp(QWidget):
lambda: self.move_motor(dev.samy, -self.spinBox_step.value())
)
self.checkBox_enableArrows.stateChanged.connect(self.update_arrow_key_shortcuts)
self.update_arrow_key_shortcuts()
# SpinBoxes - Motor Limits #TODO make spinboxes own limits updated, currently is [-1000, 1000]
# manually set limits before readout #TODO will be removed when spinboxes have own limits
# dev.samx.low_limit = -100
@ -76,31 +80,10 @@ class MotorApp(QWidget):
self.spinBox_x_max.setValue(self.limit_x[1])
self.spinBox_y_min.setValue(self.limit_y[0])
self.spinBox_y_max.setValue(self.limit_y[1])
# # change limits of motors for all motors and spinboxes
self.spinBox_x_min.valueChanged.connect(
lambda x: self.update_motor_limits(dev.samx, low_limit=x)
)
self.spinBox_x_max.valueChanged.connect(
lambda x: self.update_motor_limits(dev.samx, high_limit=x)
)
self.spinBox_y_min.valueChanged.connect(
lambda x: self.update_motor_limits(dev.samy, low_limit=x)
)
self.spinBox_y_max.valueChanged.connect(
lambda x: self.update_motor_limits(dev.samy, high_limit=x)
)
# Map
self.motor_position.connect(lambda x: self.update_image_map(*self.get_xy()))
# make keybindings for motor movement
self.toolButton_right.setShortcut("Right")
self.toolButton_left.setShortcut("Left")
self.toolButton_up.setShortcut("Up")
self.toolButton_down.setShortcut("Down")
# self.toolButton_left.clicked.connect(lambda: print(self.client))
self.motor_position.connect(lambda x: print(f"motor position updated: {x}"))
self.motor_update.connect(
lambda: self.label_status.setText(
@ -166,7 +149,9 @@ class MotorApp(QWidget):
return low_limit, high_limit
def update_motor_limits(self, motor, low_limit=None, high_limit=None):
def update_motor_limits(
self, motor, low_limit=None, high_limit=None
): # TODO limits cannot be smaller that the current location of motor
# Get current limits
current_low_limit, current_high_limit = motor.limits[0], motor.limits[1]
@ -200,11 +185,32 @@ class MotorApp(QWidget):
y = dev.samy.position()
return x, y
def update_arrow_key_shortcuts(self):
if self.checkBox_enableArrows.isChecked():
# Set the arrow key shortcuts for motor movement
self.toolButton_right.setShortcut(Qt.Key_Right)
self.toolButton_left.setShortcut(Qt.Key_Left)
self.toolButton_up.setShortcut(Qt.Key_Up)
self.toolButton_down.setShortcut(Qt.Key_Down)
else:
# Clear the shortcuts
self.toolButton_right.setShortcut("")
self.toolButton_left.setShortcut("")
self.toolButton_up.setShortcut("")
self.toolButton_down.setShortcut("")
if __name__ == "__main__":
from bec_widgets.bec_dispatcher import bec_dispatcher
# Client initialization
# from bec_lib import BECClient
# from bec_lib.core import ServiceConfig,RedisConnector
# client = BECClient()
# client.initialize(config=ServiceConfig(config_path="test_config.yaml"))
# client.initialize(config=ServiceConfig(config_path="test_config.yaml"))
# Client initialization - by dispatcher
client = bec_dispatcher.client
client.start()
dev = client.device_manager.devices