import sys # import project classes # import names from dialin.squish import utils, denaliMessages # Import PySide2 classes from PySide2.QtUiTools import QUiLoader from PySide2 import QtCore, QtWidgets from PySide2.QtCore import QFile, SIGNAL, Slot import PySide2.QtWidgets # global variables declarations ui_file_name = "SalineBolusSimulator.ui" # application app: QtWidgets.QApplication # main widget window: QtWidgets.QWidget # pushbutton btnSalineAccept: QtWidgets.QPushButton btnSalineReject: QtWidgets.QPushButton # label lblSalineAction: QtWidgets.QLabel # spinbox spnSalineRejectReason: QtWidgets.QSpinBox # combobox cmbSalineAcceptTarget: QtWidgets.QComboBox # sliders sldSalineTarget: QtWidgets.QSlider sldSalineCumulative: QtWidgets.QSlider sldSalineVolume: QtWidgets.QSlider # tables tblSalineSubMode: QtWidgets.QTableWidget tblSalineUFStates: QtWidgets.QTableWidget tblSalineSalineStates: QtWidgets.QTableWidget def init_app(): """ initializing the QApplication app and the main container QWidget window. :return: none """ global app, window app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.resize(320, 240) def start_app(): """ shows the main container window :return: none """ global app, window window.show() sys.exit(app.exec_()) def load_ui(): """ loads the ui file of the GUI :return: none """ global app, window ui_file = QFile(ui_file_name) ui_file.open(QFile.ReadOnly) loader = QUiLoader() window = loader.load(ui_file) ui_file.close() window.setWindowTitle('Saline Bolus Simulator ' + QtCore.__version__) def setup_saline_adjustment(): """ sets up the treatment saline bolus adjustment GUI section :return: none """ global app, window global btnSalineAccept, btnSalineReject global lblSalineAction, spnSalineRejectReason, cmbSalineAcceptTarget btnSalineAccept = window.findChild(QtWidgets.QPushButton, 'btnSalineAccept') btnSalineReject = window.findChild(QtWidgets.QPushButton, 'btnSalineReject') lblSalineAction = window.findChild(QtWidgets.QLabel, 'lblSalineAction') spnSalineRejectReason = window.findChild(QtWidgets.QSpinBox, 'spnSalineRejectReason') cmbSalineAcceptTarget = window.findChild(QtWidgets.QComboBox, 'cmbSalineAcceptTarget') btnSalineAccept.clicked.connect(do_accept) btnSalineReject.clicked.connect(do_reject) def setup_saline_data(): """ sets up the treatment saline bolus data sender GUI section :return: none """ global app, window global sldSalineTarget, sldSalineCumulative, sldSalineVolume sldSalineTarget = window.findChild(QtWidgets.QSlider, 'sldSalineTarget') sldSalineCumulative = window.findChild(QtWidgets.QSlider, 'sldSalineCumulative') sldSalineVolume = window.findChild(QtWidgets.QSlider, 'sldSalineVolume') sldSalineTarget.valueChanged.connect(do_saline_data) sldSalineCumulative.valueChanged.connect(do_saline_data) sldSalineVolume.valueChanged.connect(do_saline_data) def setup_treatment_states(): """ sets up the treatment saline bolus states GUI section :return: none """ global app, window global tblSalineSubMode, tblSalineUFStates, tblSalineSalineStates tblSalineSubMode = window.findChild(QtWidgets.QTableWidget, 'tblSalineSubMode') tblSalineUFStates = window.findChild(QtWidgets.QTableWidget, 'tblSalineUFStates') tblSalineSalineStates = window.findChild(QtWidgets.QTableWidget, 'tblSalineSalineStates') tblSalineSubMode.setCurrentCell(0, 0) tblSalineUFStates.setCurrentCell(0, 0) tblSalineSalineStates.setCurrentCell(0, 0) tblSalineSubMode.cellClicked.connect(do_saline_saline_state) tblSalineUFStates.cellClicked.connect(do_saline_saline_state) tblSalineSalineStates.cellClicked.connect(do_saline_saline_state) @Slot() def do_accept(): """ the slot for accept saline bolus button :return: none """ target = cmbSalineAcceptTarget.currentText() denaliMessages.setSalineBolusResponse(True, 0, target) lblSalineAction.setText('Accepted ' + target) @Slot() def do_reject(): """ the slot for accept saline bolus button :return: none """ reason = spnSalineRejectReason.value() denaliMessages.setSalineBolusResponse(False, reason, 0) lblSalineAction.setText('Rejected ' + reason) @Slot() def do_saline_saline_state(row, column): """ the slot for saline bolus state change :param row : row of the selected item in the list of saline bolus states :param column: column of the selected item in the list of saline bolus states :return: none """ sub_mode = tblSalineSubMode.verticalHeaderItem(tblSalineSubMode.currentRow()).text() uf_state = tblSalineUFStates.verticalHeaderItem(tblSalineUFStates.currentRow()).text() saline = tblSalineSalineStates.verticalHeaderItem(tblSalineSalineStates.currentRow()).text() denaliMessages.setTreatmentStatesData(sub_mode, uf_state, saline) @Slot() def do_saline_data(): """ the slot which is called to send the saline bolus data by calling the denaliMessage API setTreatmentSalineBolusData :return: none """ denaliMessages.setTreatmentSalineBolusData(sldSalineTarget.value(), sldSalineCumulative.value(), sldSalineVolume.value()) def main(): """ the main function which initializes the Simulator and starts it. :return: none """ utils.tstStart(__file__) init_app() load_ui() setup_saline_adjustment() setup_saline_data() setup_treatment_states() start_app() utils.tstDone() if __name__ == "__main__": main()