from __future__ import absolute_import
from types import MethodType
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import Qt
from holypipette.controller import TaskController
from holypipette.gui.manipulator import ManipulatorGui
[docs]class PatchGui(ManipulatorGui):
patch_command_signal = QtCore.pyqtSignal(MethodType, object)
patch_reset_signal = QtCore.pyqtSignal(TaskController)
def __init__(self, camera, pipette_interface, patch_interface,
with_tracking=False):
super(PatchGui, self).__init__(camera, pipette_interface,
with_tracking=with_tracking)
self.setWindowTitle("Patch GUI")
# Note that pipette interface already runs in a thread, we need to use
# the same for the patch interface
self.patch_interface = patch_interface
self.patch_interface.moveToThread(pipette_interface.thread())
self.interface_signals[self.patch_interface] = (self.patch_command_signal,
self.patch_reset_signal)
self.add_config_gui(self.patch_interface.config)
# Update the pressure and information in the status bar every 50ms
self.pressure_timer = QtCore.QTimer()
self.pressure_timer.timeout.connect(self.display_pressure)
self.pressure_timer.start(50)
[docs] def display_pressure(self):
pressure = self.patch_interface.pressure.get_pressure()
self.set_status_message('pressure', 'Pressure: {:.0f} mbar'.format(pressure))
[docs] def register_commands(self):
super(PatchGui, self).register_commands()
self.register_mouse_action(Qt.LeftButton, Qt.ShiftModifier,
self.patch_interface.patch_with_move)
self.register_mouse_action(Qt.LeftButton, Qt.ControlModifier,
self.patch_interface.patch_without_move)
self.register_key_action(Qt.Key_B, None,
self.patch_interface.break_in)
self.register_key_action(Qt.Key_F2, None,
self.patch_interface.store_cleaning_position)
self.register_key_action(Qt.Key_F3, None,
self.patch_interface.store_rinsing_position)
self.register_key_action(Qt.Key_F4, None,
self.patch_interface.clean_pipette)
[docs]class TrackingPatchGui(PatchGui):
def __init__(self, camera, pipette_interface, patch_interface,
with_tracking=False):
super(TrackingPatchGui, self).__init__(camera, pipette_interface,
patch_interface,
with_tracking=True)
self.setWindowTitle("Patch GUI with tracking")
[docs] def register_commands(self):
super(TrackingPatchGui, self).register_commands()
self.register_key_action(Qt.Key_F5, None,
self.patch_interface.sequential_patching)
self.register_key_action(Qt.Key_F8, None,
self.patch_interface.contact_detection)
self.register_mouse_action(Qt.RightButton, None,
self.camera_interface.track_object)