Skip to content
Snippets Groups Projects
controltab.py 4.59 KiB
Newer Older
from PyQt5 import QtWidgets, QtCore
from pymeasure.display.widgets import TabWidget

class ControlTab(TabWidget, QtWidgets.QWidget):
    def __init__(self, name, parent=None):
        super().__init__(parent)
        self.name = name
        self.x_pos = 0
        self.y_pos = 0
        self.z_pos = 0
        self.x_speed = 0
        self.y_speed = 0
        self.z_speed = 0
        self.delay = 200

        layout = QtWidgets.QGridLayout()

        self.x_label = QtWidgets.QLabel("X Position:")
        self.x_value = QtWidgets.QLabel(str(self.x_pos))
        layout.addWidget(self.x_label, 0, 0)
        layout.addWidget(self.x_value, 0, 1)

        self.y_label = QtWidgets.QLabel("Y Position:")
        self.y_value = QtWidgets.QLabel(str(self.y_pos))
        layout.addWidget(self.y_label, 1, 0)
        layout.addWidget(self.y_value, 1, 1)

        self.z_label = QtWidgets.QLabel("Z Position:")
        self.z_value = QtWidgets.QLabel(str(self.z_pos))
        layout.addWidget(self.z_label, 2, 0)
        layout.addWidget(self.z_value, 2, 1)

        self.x_up_button = QtWidgets.QPushButton("X ↑")
        self.x_down_button = QtWidgets.QPushButton("X ↓")
        layout.addWidget(self.x_up_button, 0, 2)
        layout.addWidget(self.x_down_button, 0, 3)

        self.y_up_button = QtWidgets.QPushButton("Y ↑")
        self.y_down_button = QtWidgets.QPushButton("Y ↓")
        layout.addWidget(self.y_up_button, 1, 2)
        layout.addWidget(self.y_down_button, 1, 3)

        self.z_up_button = QtWidgets.QPushButton("Z ↑")
        self.z_down_button = QtWidgets.QPushButton("Z ↓")
        layout.addWidget(self.z_up_button, 2, 2)
        layout.addWidget(self.z_down_button, 2, 3)

        self.setLayout(layout)

        self.x_up_button.pressed.connect(self.start_x_up_timer)
        self.x_up_button.released.connect(self.stop_timer)
        self.x_up_button.clicked.connect(self.increment_x_up)
        self.x_down_button.pressed.connect(self.start_x_down_timer)
        self.x_down_button.released.connect(self.stop_timer)
        self.x_down_button.clicked.connect(self.increment_x_down)

        self.y_up_button.pressed.connect(self.start_y_up_timer)
        self.y_up_button.released.connect(self.stop_timer)
        self.y_up_button.clicked.connect(self.increment_y_up)
        self.y_down_button.pressed.connect(self.start_y_down_timer)
        self.y_down_button.released.connect(self.stop_timer)
        self.y_down_button.clicked.connect(self.increment_y_down)

        self.z_up_button.pressed.connect(self.start_z_up_timer)
        self.z_up_button.released.connect(self.stop_timer)
        self.z_up_button.clicked.connect(self.increment_z_up)
        self.z_down_button.pressed.connect(self.start_z_down_timer)
        self.z_down_button.released.connect(self.stop_timer)
        self.z_down_button.clicked.connect(self.increment_z_down)

        self.timer = QtCore.QTimer()
        self.timer.timeout.connect(self.update_positions)

    def start_x_up_timer(self):
        self.x_speed = 1
        self.timer.start(self.delay) 

    def start_x_down_timer(self):
        self.x_speed = -1
        self.timer.start(self.delay)

    def increment_x_up(self):
        self.x_pos += 1
        self.x_value.setText(str(self.x_pos))
    
    def increment_x_down(self):
        self.x_pos -= 1
        self.x_value.setText(str(self.x_pos))

    def start_y_up_timer(self):
        self.y_speed = 1
        self.timer.start(self.delay)

    def start_y_down_timer(self):
        self.y_speed = -1
        self.timer.start(self.delay)

    def increment_y_up(self):
        self.y_pos += 1
        self.y_value.setText(str(self.y_pos))
    
    def increment_y_down(self):
        self.y_pos -= 1
        self.y_value.setText(str(self.y_pos))


    def start_z_up_timer(self):
        self.z_speed = 1
        self.timer.start(self.delay)

    def start_z_down_timer(self):
        self.z_speed = -1
        self.timer.start(self.delay)

    def increment_z_up(self):
        self.z_pos += 1
        self.z_value.setText(str(self.z_pos))
    
    def increment_z_down(self):
        self.z_pos -= 1
        self.z_value.setText(str(self.z_pos))


    def stop_timer(self):
        self.x_speed = 0
        self.y_speed = 0
        self.z_speed = 0
        self.delay = 200
        self.timer.stop()

    def update_positions(self):
        self.x_pos += self.x_speed
        self.y_pos += self.y_speed
        self.z_pos += self.z_speed
        self.delay = max(self.delay - 5, 50)
        self.timer.start(self.delay)
        self.x_value.setText(str(self.x_pos))
        self.y_value.setText(str(self.y_pos))
        self.z_value.setText(str(self.z_pos))