refactoring and other stuff
This commit is contained in:
@@ -30,6 +30,8 @@ class MyJsonEncoder(json.JSONEncoder):
|
|||||||
return json.JSONEncoder.default(self, obj)
|
return json.JSONEncoder.default(self, obj)
|
||||||
|
|
||||||
class AppCfg(QSettings):
|
class AppCfg(QSettings):
|
||||||
|
GBL_FLD_SCR_SHOT="global/folder_screenshot"
|
||||||
|
|
||||||
|
|
||||||
GEO_OPT_CTR='geometry/opt_ctr'
|
GEO_OPT_CTR='geometry/opt_ctr'
|
||||||
GEO_PIX2POS='geometry/pix2pos'
|
GEO_PIX2POS='geometry/pix2pos'
|
||||||
|
|||||||
@@ -347,8 +347,13 @@ class geometry:
|
|||||||
A[:,0:2]=points[:,:2]
|
A[:,0:2]=points[:,:2]
|
||||||
y=np.asmatrix(y.ravel()).T
|
y=np.asmatrix(y.ravel()).T
|
||||||
A=np.asmatrix(A)
|
A=np.asmatrix(A)
|
||||||
|
try:
|
||||||
aa=(A.T*A).I*A.T*y
|
aa=(A.T*A).I*A.T*y
|
||||||
|
except np.linalg.LinAlgError as e:
|
||||||
|
_log.warning(e)
|
||||||
|
return
|
||||||
aa=aa.A.ravel()
|
aa=aa.A.ravel()
|
||||||
|
print(f'plane={aa[0]}X+{aa[1]}Y+{aa[2]}')
|
||||||
for p in points:
|
for p in points:
|
||||||
print(f'{p}->{aa[0]*p[0]+aa[1]*p[1]+aa[2]}')
|
print(f'{p}->{aa[0]*p[0]+aa[1]*p[1]+aa[2]}')
|
||||||
self._fitPlane=aa
|
self._fitPlane=aa
|
||||||
|
|||||||
237
swissmx.py
237
swissmx.py
@@ -88,7 +88,7 @@ from PyQt5 import QtCore, QtGui
|
|||||||
from PyQt5.QtCore import Qt, pyqtSlot, QSize, QRegExp, pyqtSignal, QObject, QThread
|
from PyQt5.QtCore import Qt, pyqtSlot, QSize, QRegExp, pyqtSignal, QObject, QThread
|
||||||
from PyQt5.QtGui import QKeySequence, QPixmap, QRegExpValidator
|
from PyQt5.QtGui import QKeySequence, QPixmap, QRegExpValidator
|
||||||
from PyQt5.QtWidgets import (
|
from PyQt5.QtWidgets import (
|
||||||
QAction, QApplication, QDoubleSpinBox, QFormLayout, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit,
|
QAction, QApplication, QDoubleSpinBox, QFileDialog, QFormLayout, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit,
|
||||||
QMessageBox, QPlainTextEdit, QProgressBar, QProgressDialog, QPushButton, QShortcut, QSizePolicy, QSpinBox,
|
QMessageBox, QPlainTextEdit, QProgressBar, QProgressDialog, QPushButton, QShortcut, QSizePolicy, QSpinBox,
|
||||||
QSplashScreen, QTextBrowser, QToolBox, QVBoxLayout, QWidget,)
|
QSplashScreen, QTextBrowser, QToolBox, QVBoxLayout, QWidget,)
|
||||||
from PyQt5.uic import loadUiType
|
from PyQt5.uic import loadUiType
|
||||||
@@ -216,7 +216,7 @@ class StartupSplash:
|
|||||||
|
|
||||||
Ui_MainWindow, QMainWindow = loadUiType("swissmx.ui")
|
Ui_MainWindow, QMainWindow = loadUiType("swissmx.ui")
|
||||||
|
|
||||||
class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
class WndSwissMx(QMainWindow, Ui_MainWindow):
|
||||||
#pixelsPerMillimeter = pyqtSignal(float)
|
#pixelsPerMillimeter = pyqtSignal(float)
|
||||||
#beamCameraCoordinatesChanged = pyqtSignal(float, float)
|
#beamCameraCoordinatesChanged = pyqtSignal(float, float)
|
||||||
addGridRequest = pyqtSignal(float, float)
|
addGridRequest = pyqtSignal(float, float)
|
||||||
@@ -237,7 +237,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
daqAborted = pyqtSignal()
|
daqAborted = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self,):
|
def __init__(self,):
|
||||||
super(SwissMxWnd, self).__init__()
|
super(WndSwissMx, self).__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
|
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
@@ -328,17 +328,17 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self.prepare_left_tabs()
|
self.prepare_left_tabs()
|
||||||
#self.update_beam_marker(qoptic_zoom.get_sp()) #ZAC: orig. code
|
#self.update_beam_marker(qoptic_zoom.get_sp()) #ZAC: orig. code
|
||||||
self._centerpiece_stack.setCurrentIndex(0)
|
self._centerpiece_stack.setCurrentIndex(0)
|
||||||
self._centerpiece_stack.currentChanged.connect(self.center_piece_update)
|
self._centerpiece_stack.currentChanged.connect(self.cb_update_center_widget)
|
||||||
self._OLD_init_validators()
|
self._OLD_init_validators()
|
||||||
#self.init_settings_tracker() ? not needed, was for TELL ?
|
#self.init_settings_tracker() ? not needed, was for TELL ?
|
||||||
self._OLD_wire_storage()
|
self._OLD_wire_storage()
|
||||||
|
|
||||||
self.center_piece_update(0) # start camera updater
|
self.cb_update_center_widget(0) # start camera updater
|
||||||
curzoom = app._zoom.get_val()
|
curzoom = app._zoom.get_val()
|
||||||
_log.debug(f"starting app with zoom at {curzoom}")
|
_log.debug(f"starting app with zoom at {curzoom}")
|
||||||
self.zoom_changed_cb(curzoom)
|
self.cb_zoom_changed(curzoom)
|
||||||
self._tabs_daq_methods.currentChanged.connect(self.switch_task)
|
self._tabs_daq_methods.currentChanged.connect(self.cb_switch_task)
|
||||||
self.switch_task()
|
self.cb_switch_task()
|
||||||
|
|
||||||
def init_settings(self):
|
def init_settings(self):
|
||||||
app = QApplication.instance()
|
app = QApplication.instance()
|
||||||
@@ -378,8 +378,8 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self.microscope_page.setLayout(QVBoxLayout())
|
self.microscope_page.setLayout(QVBoxLayout())
|
||||||
self.microscope_page.layout().addWidget(self.glw)
|
self.microscope_page.layout().addWidget(self.glw)
|
||||||
self.glw.show()
|
self.glw.show()
|
||||||
self.glw.scene().sigMouseMoved.connect(self.mouse_move_event)
|
self.glw.scene().sigMouseMoved.connect(self.cb_mouse_move)
|
||||||
self.glw.scene().sigMouseClicked.connect(self.mouse_click_event)
|
self.glw.scene().sigMouseClicked.connect(self.cb_mouse_click)
|
||||||
|
|
||||||
#--- viewbox ---
|
#--- viewbox ---
|
||||||
#self.vb=vb=self.glw.addViewBox(invertY=False,border='r',enableMenu=False)
|
#self.vb=vb=self.glw.addViewBox(invertY=False,border='r',enableMenu=False)
|
||||||
@@ -412,18 +412,22 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
#grid.setTransform(tr) # assign transform
|
#grid.setTransform(tr) # assign transform
|
||||||
vb.addItem(grid)
|
vb.addItem(grid)
|
||||||
|
|
||||||
#--- beam marker ---
|
|
||||||
bm_sz=np.array((50, 40)) # it is immidiatly repositioned in zoom_changed_cb
|
|
||||||
self._goBeamMarker=bm=UsrGO.Marker(-opt_ctr-bm_sz/2,bm_sz,mode=0)
|
|
||||||
bm.setTransform(tr) # assign transform
|
|
||||||
vb.addItem(bm)
|
|
||||||
|
|
||||||
#--- opctical center ----
|
#--- opctical center ----
|
||||||
oc_sz=np.array((50,50))
|
oc_sz=np.array((50,50))
|
||||||
self._goOptCtr=obj=UsrGO.Marker(-opt_ctr-oc_sz/2, oc_sz,mode=1)
|
self._goOptCtr=obj=UsrGO.Marker(-opt_ctr-oc_sz/2, oc_sz,mode=1)
|
||||||
bm.setTransform(tr) # assign transform
|
obj.sigRegionChangeFinished.connect(self.cb_marker_moved)
|
||||||
|
#obj.setTransform(tr) # assign transform
|
||||||
vb.addItem(obj)
|
vb.addItem(obj)
|
||||||
|
|
||||||
|
#--- beam marker ---
|
||||||
|
bm_sz=np.array((50, 40)) # it is immidiatly repositioned in cb_zoom_changed
|
||||||
|
self._goBeamMarker=bm=UsrGO.Marker(-opt_ctr-bm_sz/2,bm_sz,mode=0)
|
||||||
|
bm._size_eu=cfg.value(AppCfg.GEO_BEAM_SZ)
|
||||||
|
bm._pos_eu=cfg.value(AppCfg.GEO_BEAM_POS)
|
||||||
|
bm.sigRegionChangeFinished.connect(self.cb_marker_moved)
|
||||||
|
#bm.setTransform(tr) # assign transform
|
||||||
|
vb.addItem(bm)
|
||||||
|
|
||||||
#--- testing scan grid ---
|
#--- testing scan grid ---
|
||||||
self.track_objects() # first call is needed to initialize the structure self._goTracked
|
self.track_objects() # first call is needed to initialize the structure self._goTracked
|
||||||
# #go=UsrGO.Grid((120, -100), (200, 150), (30, 22), 2)
|
# #go=UsrGO.Grid((120, -100), (200, 150), (30, 22), 2)
|
||||||
@@ -440,13 +444,13 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self.toolBar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
|
self.toolBar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
|
||||||
|
|
||||||
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_S), self)
|
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_S), self)
|
||||||
self.shortcut.activated.connect(self.saveSampleCameraScreenshot)
|
self.shortcut.activated.connect(self.cb_save_cam_image)
|
||||||
|
|
||||||
self.shortcut = QShortcut(QKeySequence(Qt.Key_F2), self)
|
self.shortcut = QShortcut(QKeySequence(Qt.Key_F2), self)
|
||||||
self.shortcut.activated.connect(self.saveSampleCameraScreenshot)
|
self.shortcut.activated.connect(self.cb_save_cam_image)
|
||||||
|
|
||||||
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + Qt.Key_S), self)
|
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + Qt.Key_S), self)
|
||||||
self.shortcut.activated.connect(self.saveSampleCameraScreenshotView)
|
self.shortcut.activated.connect(self.cb_save_cam_image)
|
||||||
|
|
||||||
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_T), self)
|
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_T), self)
|
||||||
self.shortcut.activated.connect(lambda: qutilities.toggle_warn(SKIP_ESCAPE_TRANSITIONS_IF_SAFE))
|
self.shortcut.activated.connect(lambda: qutilities.toggle_warn(SKIP_ESCAPE_TRANSITIONS_IF_SAFE))
|
||||||
@@ -459,20 +463,20 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + qkey), self)
|
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + qkey), self)
|
||||||
self.shortcut.activated.connect(lambda key=k: self.gotoBookmark(key))
|
self.shortcut.activated.connect(lambda key=k: self.gotoBookmark(key))
|
||||||
|
|
||||||
self._button_collect.clicked.connect(self.execute_collection)
|
self._button_collect.clicked.connect(self.cb_execute_collection)
|
||||||
|
|
||||||
# Toolbar buttons
|
# Toolbar buttons
|
||||||
icon_size = QSize(50, 50)
|
icon_size = QSize(50, 50)
|
||||||
|
|
||||||
icon = qtawesome.icon("material.photo_camera")
|
icon = qtawesome.icon("material.photo_camera")
|
||||||
action = QAction(icon, "Save View", self)
|
|
||||||
action.setToolTip("(Ctrl+S) Take a screenshot of the currently visible sample image, including markers. Saves in current folder.")
|
|
||||||
action.triggered.connect(self.saveSampleCameraScreenshotView)
|
|
||||||
self.toolBar.addAction(action)
|
|
||||||
|
|
||||||
action = QAction(icon, "Save Original", self)
|
action = QAction(icon, "Save Original", self)
|
||||||
action.setToolTip("(Ctrl+Shift+S) Take a screenshot of the sample image, without markers. Saves in current folder.")
|
action.setToolTip("(Ctrl+Shift+S) Take a screenshot of the sample image, without markers. Saves in current folder.")
|
||||||
action.triggered.connect(self.saveSampleCameraScreenshot)
|
action.triggered.connect(self.cb_save_cam_image)
|
||||||
|
self.toolBar.addAction(action)
|
||||||
|
|
||||||
|
action = QAction(icon, "Save View", self)
|
||||||
|
action.setToolTip("(Ctrl+S) Take a screenshot of the currently visible sample image, including markers. Saves in current folder.")
|
||||||
|
action.triggered.connect(lambda: self.cb_save_cam_image(True))
|
||||||
self.toolBar.addAction(action)
|
self.toolBar.addAction(action)
|
||||||
|
|
||||||
if os.getenv("DEVELOPMENT_VERSION"):
|
if os.getenv("DEVELOPMENT_VERSION"):
|
||||||
@@ -510,27 +514,27 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
action = QAction(icon, "Sample\nExchange", self)
|
action = QAction(icon, "Sample\nExchange", self)
|
||||||
action.setToolTip("Move devices so a sample can be exchanged.")
|
action.setToolTip("Move devices so a sample can be exchanged.")
|
||||||
action.setObjectName("action_SampleExchange")
|
action.setObjectName("action_SampleExchange")
|
||||||
action.triggered.connect(self.escape_goToSampleExchange)
|
action.triggered.connect(self.cb_esc_sample_exchange)
|
||||||
self.toolBar.addAction(action)
|
self.toolBar.addAction(action)
|
||||||
self.toolBar.widgetForAction(action).setAccessibleName("action_SampleExchange")
|
self.toolBar.widgetForAction(action).setAccessibleName("action_SampleExchange")
|
||||||
|
|
||||||
icon = qtawesome.icon("material.my_location")
|
icon = qtawesome.icon("material.my_location")
|
||||||
action = QAction(icon, "Sample\nAlignment", self)
|
action = QAction(icon, "Sample\nAlignment", self)
|
||||||
action.setToolTip("Move devices so a sample can be aligned.")
|
action.setToolTip("Move devices so a sample can be aligned.")
|
||||||
action.triggered.connect(self.escape_goToSampleAlignment)
|
action.triggered.connect(self.cb_esc_sample_alignment)
|
||||||
self.toolBar.addAction(action)
|
self.toolBar.addAction(action)
|
||||||
self.toolBar.widgetForAction(action).setAccessibleName("action_SampleAlignment")
|
self.toolBar.widgetForAction(action).setAccessibleName("action_SampleAlignment")
|
||||||
|
|
||||||
icon = qtawesome.icon("material.fingerprint")
|
icon = qtawesome.icon("material.fingerprint")
|
||||||
action = QAction(icon, "Data\nCollection", self)
|
action = QAction(icon, "Data\nCollection", self)
|
||||||
action.setToolTip("Move devices so a sample can be collected.")
|
action.setToolTip("Move devices so a sample can be collected.")
|
||||||
action.triggered.connect(self.escape_goToDataCollection)
|
action.triggered.connect(self.cb_esc_data_collection)
|
||||||
self.toolBar.addAction(action)
|
self.toolBar.addAction(action)
|
||||||
self.toolBar.widgetForAction(action).setAccessibleName("action_DataCollection")
|
self.toolBar.widgetForAction(action).setAccessibleName("action_DataCollection")
|
||||||
|
|
||||||
self.actionQuit.triggered.connect(self.really_quit)
|
self.actionQuit.triggered.connect(self.cb_really_quit)
|
||||||
self.actionPreferences.triggered.connect(self._OLD_openPreferencesDialog)
|
self.actionPreferences.triggered.connect(self._OLD_openPreferencesDialog)
|
||||||
self.actionHome_Fast_Stages.triggered.connect(self.home_deltatau_faststages)
|
self.actionHome_Fast_Stages.triggered.connect(self.cb_deltatau_home_faststages)
|
||||||
self.actionUser_Storage.triggered.connect(self._OLD_update_user_and_storage)
|
self.actionUser_Storage.triggered.connect(self._OLD_update_user_and_storage)
|
||||||
|
|
||||||
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_L), self)
|
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_L), self)
|
||||||
@@ -619,7 +623,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
else:
|
else:
|
||||||
event.ignore()
|
event.ignore()
|
||||||
|
|
||||||
def center_piece_update(self, index):
|
def cb_update_center_widget(self, index):
|
||||||
if index > 0: # not showing camera image
|
if index > 0: # not showing camera image
|
||||||
_log.warning("listening to zescape")
|
_log.warning("listening to zescape")
|
||||||
self.timer.stop()
|
self.timer.stop()
|
||||||
@@ -630,11 +634,11 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
else:
|
else:
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
try:
|
try:
|
||||||
self.new_frame_sim_cb()
|
self.cb_new_frame_sim()
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
app._camera.run(self.new_frame_pv_cb)
|
app._camera.run(self.cb_new_frame_pv)
|
||||||
|
|
||||||
def new_frame_pv_cb(self, **kwargs):
|
def cb_new_frame_pv(self, **kwargs):
|
||||||
#_log.debug('new_frame_pv_cb count {}'.format(kwargs['count']))
|
#_log.debug('new_frame_pv_cb count {}'.format(kwargs['count']))
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
sz=app._camera._sz
|
sz=app._camera._sz
|
||||||
@@ -648,7 +652,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
camera.epics_cam.set_fiducial(pic, 255)
|
camera.epics_cam.set_fiducial(pic, 255)
|
||||||
self._goImg.setImage(pic)
|
self._goImg.setImage(pic)
|
||||||
|
|
||||||
def new_frame_sim_cb(self, **kwargs):
|
def cb_new_frame_sim(self, **kwargs):
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
sim=app._camera._sim
|
sim=app._camera._sim
|
||||||
imgSeq=sim['imgSeq']
|
imgSeq=sim['imgSeq']
|
||||||
@@ -659,7 +663,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self._goImg.setImage(pic)
|
self._goImg.setImage(pic)
|
||||||
|
|
||||||
delay=500 # ms -> 2fps
|
delay=500 # ms -> 2fps
|
||||||
QtCore.QTimer.singleShot(delay, self.new_frame_sim_cb)
|
QtCore.QTimer.singleShot(delay, self.cb_new_frame_sim)
|
||||||
|
|
||||||
def load_stylesheet(self):
|
def load_stylesheet(self):
|
||||||
with open("swissmx.css", "r") as sheet:
|
with open("swissmx.css", "r") as sheet:
|
||||||
@@ -682,8 +686,8 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
self.zoombox = zoom.Zoom()
|
self.zoombox = zoom.Zoom()
|
||||||
self.zoombox.init_settings()
|
self.zoombox.init_settings()
|
||||||
self.zoombox.zoomChanged.connect(self.zoom_changed_cb)
|
self.zoombox.zoomChanged.connect(self.cb_zoom_changed)
|
||||||
self.zoombox.moveBacklight.connect(self.safe_backlight_move)
|
self.zoombox.moveBacklight.connect(self.cb_move_backlight_safe)
|
||||||
|
|
||||||
layout.addWidget(self.zoombox)
|
layout.addWidget(self.zoombox)
|
||||||
|
|
||||||
@@ -699,7 +703,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
|
|
||||||
# monitor all axis for an axis fault
|
# monitor all axis for an axis fault
|
||||||
for key, tweaker in self.tweakers.items():
|
for key, tweaker in self.tweakers.items():
|
||||||
tweaker.event_axis_fault.connect(self.axis_fault)
|
tweaker.event_axis_fault.connect(self.cb_axis_fault)
|
||||||
|
|
||||||
#self.tweakers["fast_x"].event_readback.connect(lambda alias, value, kw: self.fast_x_position.emit(value))
|
#self.tweakers["fast_x"].event_readback.connect(lambda alias, value, kw: self.fast_x_position.emit(value))
|
||||||
#self.tweakers["fast_y"].event_readback.connect(lambda alias, value, kw: self.fast_y_position.emit(value))
|
#self.tweakers["fast_y"].event_readback.connect(lambda alias, value, kw: self.fast_y_position.emit(value))
|
||||||
@@ -708,29 +712,47 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self.tweakers["fast_y"].event_val.connect(lambda rec_name, kw: self.track_objects())
|
self.tweakers["fast_y"].event_val.connect(lambda rec_name, kw: self.track_objects())
|
||||||
# layout.addStretch()
|
# layout.addStretch()
|
||||||
|
|
||||||
def zoom_changed_cb(self, value):
|
def cb_marker_moved(self,obj,*args,**kwargs):
|
||||||
#self.zoomChanged.emit(value)
|
_log.debug(args)
|
||||||
|
_log.debug(kwargs)
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
cfg=app._cfg
|
cfg=app._cfg
|
||||||
geo=app._geometry
|
geo=app._geometry
|
||||||
|
opt_ctr=geo._opt_ctr
|
||||||
|
if obj==self._goOptCtr:
|
||||||
|
oc_pos=obj.pos()
|
||||||
|
oc_sz=obj.size()
|
||||||
|
geo._opt_ctr=opt_ctr=np.array(-oc_pos-oc_sz/2)
|
||||||
|
_log.debug(f'{obj}->{opt_ctr} !!! NOT SAVED IN CONFIG !!!')
|
||||||
|
#cfg.setValue(AppCfg.GEO_OPT_CTR,bm_pos)
|
||||||
|
elif obj==self._goBeamMarker:
|
||||||
|
bm_pos=obj.pos()
|
||||||
|
bm_sz=obj.size()
|
||||||
|
obj._pos_eu=bm_pos=-geo.pix2pos(bm_pos+opt_ctr+bm_sz/2)
|
||||||
|
_log.debug(f'{obj}->{bm_pos} !!! NOT SAVED IN CONFIG !!!')
|
||||||
|
#cfg.setValue(AppCfg.GEO_BEAM_POS,bm_pos)
|
||||||
|
|
||||||
|
def cb_zoom_changed(self, value):
|
||||||
|
#self.zoomChanged.emit(value)
|
||||||
|
app=QApplication.instance()
|
||||||
|
geo=app._geometry
|
||||||
try:
|
try:
|
||||||
geo.interp_zoom(value)
|
geo.interp_zoom(value)
|
||||||
except AttributeError as e:
|
except AttributeError as e:
|
||||||
_log.warning(e)
|
_log.warning(e)
|
||||||
else:
|
else:
|
||||||
opt_ctr=geo._opt_ctr
|
opt_ctr=geo._opt_ctr
|
||||||
bm_sz=cfg.value(AppCfg.GEO_BEAM_SZ)
|
|
||||||
bm_pos=cfg.value(AppCfg.GEO_BEAM_POS)
|
|
||||||
bm_sz=np.abs(geo.pos2pix(bm_sz))
|
|
||||||
bm_pos=-opt_ctr-geo.pos2pix(bm_pos)-bm_sz/2
|
|
||||||
bm=self._goBeamMarker
|
bm=self._goBeamMarker
|
||||||
|
bm_sz=np.abs(geo.pos2pix(bm._size_eu))
|
||||||
|
bm_pos=-opt_ctr-geo.pos2pix(bm._pos_eu)-bm_sz/2
|
||||||
|
bm.blockSignals(True) # avoid to call cb_marker_moved
|
||||||
bm.setPos(bm_pos,finish=False)
|
bm.setPos(bm_pos,finish=False)
|
||||||
bm.setSize(bm_sz)
|
bm.setSize(bm_sz)
|
||||||
|
bm.blockSignals(False)
|
||||||
_log.debug(f"zoom->{value} beam marker pos:{bm_pos} sz:{bm_sz})")
|
_log.debug(f"zoom->{value} beam marker pos:{bm_pos} sz:{bm_sz})")
|
||||||
self.track_objects()
|
self.track_objects()
|
||||||
#self.update_beam_marker(value)
|
|
||||||
|
|
||||||
def safe_backlight_move(self, pos):
|
def cb_move_backlight_safe(self, pos):
|
||||||
# any move of backlight requires post sample tube out
|
# any move of backlight requires post sample tube out
|
||||||
try:
|
try:
|
||||||
self.assert_post_tube_position(pos="out")
|
self.assert_post_tube_position(pos="out")
|
||||||
@@ -798,7 +820,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
block.layout().addWidget(c)
|
block.layout().addWidget(c)
|
||||||
return block
|
return block
|
||||||
|
|
||||||
def axis_fault(self, pvname, kw):
|
def cb_axis_fault(self, pvname, kw):
|
||||||
"""
|
"""
|
||||||
swissmx - {'pvname': 'SAR-EXPMX:MOT_FY.STAT', 'value': 0, 'char_value': 'NO_ALARM', 'status': 0, 'ftype': 17, 'chid': 38980392,
|
swissmx - {'pvname': 'SAR-EXPMX:MOT_FY.STAT', 'value': 0, 'char_value': 'NO_ALARM', 'status': 0, 'ftype': 17, 'chid': 38980392,
|
||||||
'host': 'SAR-CPPM-EXPMX1.psi.ch:5064', 'count': 1, 'access': 'read-only', 'write_access': False, 'read_access': True,
|
'host': 'SAR-CPPM-EXPMX1.psi.ch:5064', 'count': 1, 'access': 'read-only', 'write_access': False, 'read_access': True,
|
||||||
@@ -885,7 +907,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
def active_task(self):
|
def active_task(self):
|
||||||
return self._active_task
|
return self._active_task
|
||||||
|
|
||||||
def mouse_move_event(self, pos):
|
def cb_mouse_move(self, pos):
|
||||||
app = QApplication.instance()
|
app = QApplication.instance()
|
||||||
self._mouse_pos = pos
|
self._mouse_pos = pos
|
||||||
task = self.active_task()
|
task = self.active_task()
|
||||||
@@ -929,7 +951,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def mouse_click_event(self, event):
|
def cb_mouse_click(self, event):
|
||||||
#_log.debug("{}".format(event))
|
#_log.debug("{}".format(event))
|
||||||
#_log.debug("screen pos {}".format(event.screenPos())) #pixel position on the whole screen
|
#_log.debug("screen pos {}".format(event.screenPos())) #pixel position on the whole screen
|
||||||
#_log.debug("scene pos {}".format(event.scenePos())) #pixel position on the scene (including black frame)
|
#_log.debug("scene pos {}".format(event.scenePos())) #pixel position on the scene (including black frame)
|
||||||
@@ -1191,50 +1213,36 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
#x=imgPos.x();y=imgPos.y()
|
#x=imgPos.x();y=imgPos.y()
|
||||||
|
|
||||||
@pyqtSlot()
|
@pyqtSlot()
|
||||||
def saveSampleCameraScreenshot(self):
|
def cb_save_cam_image(self,overlays=False):
|
||||||
outf = self.get_screenshot_filename()
|
app=QApplication.instance()
|
||||||
_log.info("saving original clean screenshot: {}".format(outf))
|
cam=app._camera
|
||||||
|
filename, _ = QFileDialog.getSaveFileName(self,"Save data file",'', 'PNG files (*.png);;all files (*)')
|
||||||
|
if not filename:
|
||||||
|
return
|
||||||
|
_log.info(f"saving view screenshot: {filename}")
|
||||||
|
#try:
|
||||||
|
if not overlays:
|
||||||
|
import PIL.Image
|
||||||
|
#img=PIL.Image.fromarray(cam.pic.astype(np.uint8))
|
||||||
try:
|
try:
|
||||||
sample_camera.saveimage(outf)
|
pic=cam.pic
|
||||||
except Exception as e:
|
except AttributeError:
|
||||||
_log.warning(e)
|
sim=app._camera._sim
|
||||||
QMessageBox.warning(self, "Screenshot: failed to save image", "Failed to save screenshot!")
|
pic=cam._sim['imgSeq'][sim['imgIdx']]
|
||||||
|
img=PIL.Image.fromarray(pic)
|
||||||
@pyqtSlot()
|
img.save(filename)
|
||||||
def saveSampleCameraScreenshotView(self):
|
else:
|
||||||
outf = self.get_screenshot_filename()
|
|
||||||
_log.info("saving view screenshot: {}".format(outf))
|
|
||||||
|
|
||||||
exporter = pg.exporters.ImageExporter(self.vb)
|
exporter = pg.exporters.ImageExporter(self.vb)
|
||||||
|
|
||||||
# set export parameters if needed
|
# set export parameters if needed
|
||||||
exporter.parameters()["width"] = 2000 # (note this also affects height parameter)
|
#exporter.parameters()["width"] = 2000 # (note this also affects height parameter)
|
||||||
|
|
||||||
# save to file
|
# save to file
|
||||||
try:
|
exporter.export(filename)
|
||||||
exporter.export(outf)
|
|
||||||
except Exception as e:
|
|
||||||
_log.warning(e)
|
|
||||||
QMessageBox.warning(self, "Screenshot: failed to save viewer image", "Failed to save screenshot of viewer!",)
|
|
||||||
|
|
||||||
def get_screenshot_filename(self):
|
#except Exception as e:
|
||||||
global folders
|
# _log.warning(e)
|
||||||
_log.info("taking screenhot")
|
# QMessageBox.warning(self, "Screenshot: failed to save image", "Failed to save screenshot!")
|
||||||
prefix = folders.prefix
|
|
||||||
folder = folders.res_folder
|
|
||||||
base = time.strftime("{}_%Y%m%d_%H%M%S.png".format(prefix))
|
|
||||||
if not os._exists(folder):
|
|
||||||
try:
|
|
||||||
os.makedirs(folder, 0o750, exist_ok=True)
|
|
||||||
except:
|
|
||||||
msg = "Failed to create folder: {}".format(folder)
|
|
||||||
_log.warning(msg)
|
|
||||||
QMessageBox.warning(self, "Screenshot: failed to create folder", "Failed to create output folder for screenshot!\n\n\tScreenshot not taken!",)
|
|
||||||
raise
|
|
||||||
outf = os.path.join(folder, base)
|
|
||||||
return outf
|
|
||||||
|
|
||||||
def execute_collection(self):
|
def cb_execute_collection(self):
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
geo=app._geometry
|
geo=app._geometry
|
||||||
#zoom=app._zoom.get_val()
|
#zoom=app._zoom.get_val()
|
||||||
@@ -1333,7 +1341,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
elif task == TASK_EMBL:
|
elif task == TASK_EMBL:
|
||||||
self.daq_embl_collect_points()
|
self.daq_embl_collect_points()
|
||||||
|
|
||||||
def escape_goToSampleExchange(self):
|
def cb_esc_sample_exchange(self):
|
||||||
self._escape_current_state = "busy"
|
self._escape_current_state = "busy"
|
||||||
steps = []
|
steps = []
|
||||||
if option(CRYOJET_MOTION_ENABLED):
|
if option(CRYOJET_MOTION_ENABLED):
|
||||||
@@ -1348,7 +1356,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self.escape_run_steps(steps, "Transitioning to Sample Exchange")
|
self.escape_run_steps(steps, "Transitioning to Sample Exchange")
|
||||||
self._escape_current_state = "ManualSampleExchange"
|
self._escape_current_state = "ManualSampleExchange"
|
||||||
|
|
||||||
def escape_goToSampleAlignment(self):
|
def cb_esc_sample_alignment(self):
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
self._escape_current_state = "busy"
|
self._escape_current_state = "busy"
|
||||||
|
|
||||||
@@ -1362,7 +1370,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self.escape_run_steps(steps, "Transitioning to Sample Alignment")
|
self.escape_run_steps(steps, "Transitioning to Sample Alignment")
|
||||||
self._escape_current_state = "SampleAlignment"
|
self._escape_current_state = "SampleAlignment"
|
||||||
|
|
||||||
def escape_goToDataCollection(self):
|
def cb_esc_data_collection(self):
|
||||||
self._escape_current_state = "busy"
|
self._escape_current_state = "busy"
|
||||||
steps = [
|
steps = [
|
||||||
# lambda: sample_selection.tell.set_current(30.0),
|
# lambda: sample_selection.tell.set_current(30.0),
|
||||||
@@ -1375,19 +1383,19 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self.escape_run_steps(steps, "Transitioning to Data Collection")
|
self.escape_run_steps(steps, "Transitioning to Data Collection")
|
||||||
self._escape_current_state = "DataCollection"
|
self._escape_current_state = "DataCollection"
|
||||||
|
|
||||||
def really_quit(self):
|
def cb_really_quit(self):
|
||||||
"""called when user Ctrl-Q the app"""
|
"""called when user Ctrl-Q the app"""
|
||||||
if QMessageBox.question(self, "", "Are you sure you want to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No,) == QMessageBox.Yes:
|
if QMessageBox.question(self, "", "Are you sure you want to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No,) == QMessageBox.Yes:
|
||||||
self._do_quit = True
|
self._do_quit = True
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
def home_deltatau_faststages(self):
|
def cb_deltatau_home_faststages(self):
|
||||||
_log.warning("homing fast stages")
|
_log.warning("homing fast stages")
|
||||||
epics.PV("SAR-EXPMX1:ASYN.AOUT").put(b"enable plc 1")
|
epics.PV("SAR-EXPMX1:ASYN.AOUT").put(b"enable plc 1")
|
||||||
|
|
||||||
def prepare_left_tabs(self):
|
def prepare_left_tabs(self):
|
||||||
tabs = self._left_tabs
|
tabs = self._left_tabs
|
||||||
tabs.currentChanged.connect(self.switch_task)
|
tabs.currentChanged.connect(self.cb_switch_task)
|
||||||
|
|
||||||
setup_tab = self._tab_setup
|
setup_tab = self._tab_setup
|
||||||
exp_tab = self._tab_experiment
|
exp_tab = self._tab_experiment
|
||||||
@@ -1532,11 +1540,11 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
#grp.layout().addWidget(self._ppm_feature_size_spinbox, 0, 1)
|
#grp.layout().addWidget(self._ppm_feature_size_spinbox, 0, 1)
|
||||||
self._btn_pix2pos = but = QPushButton("pix2pos")
|
self._btn_pix2pos = but = QPushButton("pix2pos")
|
||||||
but.setCheckable(True)
|
but.setCheckable(True)
|
||||||
but.clicked.connect(self.update_pix2pos)
|
but.clicked.connect(self.cb_update_pix2pos)
|
||||||
grp.layout().addWidget(but, 0, 0)
|
grp.layout().addWidget(but, 0, 0)
|
||||||
self._btn_opt_ctr = but = QPushButton("opt_ctr")
|
self._btn_opt_ctr = but = QPushButton("opt_ctr")
|
||||||
but.setCheckable(True)
|
but.setCheckable(True)
|
||||||
but.clicked.connect(self.update_opt_ctr)
|
but.clicked.connect(self.cb_update_opt_ctr)
|
||||||
grp.layout().addWidget(but, 1, 0)
|
grp.layout().addWidget(but, 1, 0)
|
||||||
|
|
||||||
help = QTextBrowser()
|
help = QTextBrowser()
|
||||||
@@ -1570,7 +1578,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
# tbox.addItem(grp, "PPM ToolBox")
|
# tbox.addItem(grp, "PPM ToolBox")
|
||||||
# self._ppm_toolbox = grp
|
# self._ppm_toolbox = grp
|
||||||
|
|
||||||
tbox.currentChanged.connect(self.switch_task)
|
tbox.currentChanged.connect(self.cb_switch_task)
|
||||||
|
|
||||||
# final stretch
|
# final stretch
|
||||||
# setup_tab.layout().addStretch()
|
# setup_tab.layout().addStretch()
|
||||||
@@ -1610,7 +1618,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
#tab.layout().addWidget(self._preloc_inspect_area)
|
#tab.layout().addWidget(self._preloc_inspect_area)
|
||||||
|
|
||||||
|
|
||||||
def switch_task(self, index=0):
|
def cb_switch_task(self, index=0):
|
||||||
stack = self._centerpiece_stack
|
stack = self._centerpiece_stack
|
||||||
task = self._left_tabs.currentWidget().accessibleName()
|
task = self._left_tabs.currentWidget().accessibleName()
|
||||||
setup_task = self._setup_toolbox.currentWidget().accessibleName()
|
setup_task = self._setup_toolbox.currentWidget().accessibleName()
|
||||||
@@ -1633,7 +1641,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self.set_active_task(active_task)
|
self.set_active_task(active_task)
|
||||||
self._status_task.setText(active_task)
|
self._status_task.setText(active_task)
|
||||||
|
|
||||||
def update_pix2pos(self, calib):
|
def cb_update_pix2pos(self, calib):
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
if calib:
|
if calib:
|
||||||
_log.info("received new pix2pos calibration")
|
_log.info("received new pix2pos calibration")
|
||||||
@@ -1644,11 +1652,11 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
res=QMessageBox.question(self, "calibration", f"use calibration\n{s} ? ")
|
res=QMessageBox.question(self, "calibration", f"use calibration\n{s} ? ")
|
||||||
if res==QMessageBox.Yes:
|
if res==QMessageBox.Yes:
|
||||||
geo=app._geometry
|
geo=app._geometry
|
||||||
geo.update_pix2pos(app._raw_pix2pos)
|
geo.cb_update_pix2pos(app._raw_pix2pos)
|
||||||
app._cfg.setValue(AppCfg.GEO_PIX2POS, geo._lut_pix2pos)
|
app._cfg.setValue(AppCfg.GEO_PIX2POS, geo._lut_pix2pos)
|
||||||
del app._raw_pix2pos
|
del app._raw_pix2pos
|
||||||
|
|
||||||
def update_opt_ctr(self, calib):
|
def cb_update_opt_ctr(self, calib):
|
||||||
app=QApplication.instance()
|
app=QApplication.instance()
|
||||||
if calib:
|
if calib:
|
||||||
_log.info("received new pix2pos calibration")
|
_log.info("received new pix2pos calibration")
|
||||||
@@ -1732,6 +1740,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
sz=np.array(go._dscr['size'])
|
sz=np.array(go._dscr['size'])
|
||||||
fid=fid/sz
|
fid=fid/sz
|
||||||
trf=geometry.geometry.least_square_trf(ptFitTrf,fid)
|
trf=geometry.geometry.least_square_trf(ptFitTrf,fid)
|
||||||
|
print(trf)
|
||||||
tr=go.transform()
|
tr=go.transform()
|
||||||
tr.setMatrix(1, trf[1,0]/trf[0,0], 0,
|
tr.setMatrix(1, trf[1,0]/trf[0,0], 0,
|
||||||
trf[0,1]/trf[1,1], 1, 0,
|
trf[0,1]/trf[1,1], 1, 0,
|
||||||
@@ -2044,7 +2053,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
)
|
)
|
||||||
self.move_gonio_to_mount_position(offset=self._pin_mounting_offset)
|
self.move_gonio_to_mount_position(offset=self._pin_mounting_offset)
|
||||||
elif "samplealignment" in state:
|
elif "samplealignment" in state:
|
||||||
self.escape_goToSampleAlignment()
|
self.cb_esc_sample_alignment()
|
||||||
except:
|
except:
|
||||||
zescape.reply("Maintenance")
|
zescape.reply("Maintenance")
|
||||||
zescape.reply(self._escape_current_state)
|
zescape.reply(self._escape_current_state)
|
||||||
@@ -2238,12 +2247,12 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self.engage_mouse_tracking()
|
self.engage_mouse_tracking()
|
||||||
|
|
||||||
def _OLD_engage_mouse_tracking(self):
|
def _OLD_engage_mouse_tracking(self):
|
||||||
self.glw.scene().sigMouseMoved.connect(self.mouse_move_event)
|
self.glw.scene().sigMouseMoved.connect(self.cb_mouse_move)
|
||||||
self.glw.scene().sigMouseMoved.emit()
|
self.glw.scene().sigMouseMoved.emit()
|
||||||
self._mouse_tracking = True
|
self._mouse_tracking = True
|
||||||
|
|
||||||
def _OLD_disengage_mouse_tracking(self):
|
def _OLD_disengage_mouse_tracking(self):
|
||||||
self.glw.scene().sigMouseMoved.disconnect(self.mouse_move_event)
|
self.glw.scene().sigMouseMoved.disconnect(self.cb_mouse_move)
|
||||||
self._mouse_tracking = False
|
self._mouse_tracking = False
|
||||||
self._lb_coords.setText("")
|
self._lb_coords.setText("")
|
||||||
|
|
||||||
@@ -2376,7 +2385,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
(omega, t_omega, 0.01),
|
(omega, t_omega, 0.01),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
self.escape_goToSampleExchange()
|
self.cb_esc_sample_exchange()
|
||||||
|
|
||||||
def _OLD_lock_goniometer(self):
|
def _OLD_lock_goniometer(self):
|
||||||
# tell.set_in_mount_position(True)
|
# tell.set_in_mount_position(True)
|
||||||
@@ -3063,7 +3072,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self.daq_method_prelocated_update_markers()
|
self.daq_method_prelocated_update_markers()
|
||||||
|
|
||||||
if option(ACTIVATE_PULSE_PICKER) or not option(SKIP_ESCAPE_TRANSITIONS_IF_SAFE):
|
if option(ACTIVATE_PULSE_PICKER) or not option(SKIP_ESCAPE_TRANSITIONS_IF_SAFE):
|
||||||
self.escape_goToSampleAlignment()
|
self.cb_esc_sample_alignment()
|
||||||
|
|
||||||
sequence = {"delta tau program": shapepath.prg, "points": shapepath.points.tolist(), "timestamp": tdstamp(),}
|
sequence = {"delta tau program": shapepath.prg, "points": shapepath.points.tolist(), "timestamp": tdstamp(),}
|
||||||
|
|
||||||
@@ -3111,7 +3120,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
return
|
return
|
||||||
|
|
||||||
if option(ACTIVATE_PULSE_PICKER) or not option(SKIP_ESCAPE_TRANSITIONS_IF_SAFE):
|
if option(ACTIVATE_PULSE_PICKER) or not option(SKIP_ESCAPE_TRANSITIONS_IF_SAFE):
|
||||||
self.escape_goToDataCollection()
|
self.cb_esc_data_collection()
|
||||||
|
|
||||||
folders.make_if_needed()
|
folders.make_if_needed()
|
||||||
|
|
||||||
@@ -3260,7 +3269,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
self.re_connect_collect_button()
|
self.re_connect_collect_button()
|
||||||
jungfrau_detector.abort()
|
jungfrau_detector.abort()
|
||||||
if option(ACTIVATE_PULSE_PICKER) or not option(SKIP_ESCAPE_TRANSITIONS_IF_SAFE):
|
if option(ACTIVATE_PULSE_PICKER) or not option(SKIP_ESCAPE_TRANSITIONS_IF_SAFE):
|
||||||
self.escape_goToSampleAlignment()
|
self.cb_esc_sample_alignment()
|
||||||
self.increaseRunNumberRequest.emit()
|
self.increaseRunNumberRequest.emit()
|
||||||
|
|
||||||
if option(DELTATAU_SHOW_PLOTS):
|
if option(DELTATAU_SHOW_PLOTS):
|
||||||
@@ -3323,15 +3332,15 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
but = QPushButton("Exchange\nSample")
|
but = QPushButton("Exchange\nSample")
|
||||||
but.setAccessibleName("escape_button_se")
|
but.setAccessibleName("escape_button_se")
|
||||||
but.setObjectName("action_SampleExchange")
|
but.setObjectName("action_SampleExchange")
|
||||||
but.clicked.connect(self.escape_goToSampleExchange)
|
but.clicked.connect(self.cb_esc_sample_exchange)
|
||||||
layout.addWidget(but)
|
layout.addWidget(but)
|
||||||
but = QPushButton("Alignment")
|
but = QPushButton("Alignment")
|
||||||
but.setAccessibleName("escape_button_sa")
|
but.setAccessibleName("escape_button_sa")
|
||||||
but.clicked.connect(self.escape_goToSampleAlignment)
|
but.clicked.connect(self.cb_esc_sample_alignment)
|
||||||
layout.addWidget(but)
|
layout.addWidget(but)
|
||||||
but = QPushButton("Collection")
|
but = QPushButton("Collection")
|
||||||
but.setAccessibleName("escape_button_dc")
|
but.setAccessibleName("escape_button_dc")
|
||||||
but.clicked.connect(self.escape_goToDataCollection)
|
but.clicked.connect(self.cb_esc_data_collection)
|
||||||
layout.addWidget(but)
|
layout.addWidget(but)
|
||||||
cont.layout().addWidget(w)
|
cont.layout().addWidget(w)
|
||||||
|
|
||||||
@@ -3565,7 +3574,7 @@ if __name__=="__main__":
|
|||||||
|
|
||||||
startupWin.set(60, f'start main window')
|
startupWin.set(60, f'start main window')
|
||||||
|
|
||||||
app._mainWnd=wnd=SwissMxWnd()
|
app._mainWnd=wnd=WndSwissMx()
|
||||||
wnd.show()
|
wnd.show()
|
||||||
startupWin._wnd.finish(wnd)
|
startupWin._wnd.finish(wnd)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user