Source code for twinpy.ui.tabs

"""Module containing complete UI tabs."""

from typing import Optional

from PyQt5.QtWidgets import (
    QWidget,
    QVBoxLayout,
    QHBoxLayout,
    QGroupBox,
)

from ..twincat import SimulinkModel
from .tc_widgets import TcCheckBox

try:
    from pyqtconsole.console import PythonConsole
except ModuleNotFoundError:
    PythonConsole = None  # Make console optional


if PythonConsole is not None:

[docs] class ConsoleTab(PythonConsole): """Tab with the Python console. The `clear()` command is available in the console. """ def __init__( self, actuator: Optional[SimulinkModel] = None, controller: Optional[SimulinkModel] = None, ): super().__init__() self.push_local_ns("actuator", actuator) self.push_local_ns("controller", controller) # Make the `clear()` command available in the console self.interpreter.locals["clear"] = self.edit.clear self.eval_in_thread()
else: ConsoleTab = None
[docs]class FirmwareTab(QWidget): """Widget for the firmware CtrlWord options (Base Station only).""" def __init__(self, actuator: Optional[SimulinkModel] = None): super().__init__() layout_main = QVBoxLayout(self) layout_check = QHBoxLayout() group_check = QGroupBox("CtrlWord") group_check.setLayout(layout_check) self.check_sto = TcCheckBox("Enable STO") self.check_power_off = TcCheckBox("Power off") layout_check.addWidget(self.check_sto) layout_check.addWidget(self.check_power_off) layout_main.addWidget(group_check) if actuator is not None: try: fw = actuator.WRBS_A self.check_sto.connect_symbol(fw.FirmwareSTO.Value) self.check_power_off.connect_symbol(fw.FirmwarePowerOff.Value) except AttributeError: pass # Ignore if properties don't exist for old backpack compatibility