diff --git a/Server/server_gui.py b/Server/server_gui.py index 5e9536a..b448385 100644 --- a/Server/server_gui.py +++ b/Server/server_gui.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'server_gui.ui' # -# Created by: PyQt5 UI code generator 5.13.1 +# Created by: PyQt5 UI code generator 5.13.0 # # WARNING! All changes made in this file will be lost! @@ -44,9 +44,17 @@ class Ui_MainWindow(object): self.verticalLayout.setSizeConstraint(QtWidgets.QLayout.SetMaximumSize) self.verticalLayout.setObjectName("verticalLayout") self.formLayout = QtWidgets.QFormLayout() - self.formLayout.setLabelAlignment(QtCore.Qt.AlignCenter) - self.formLayout.setFormAlignment(QtCore.Qt.AlignCenter) + self.formLayout.setLabelAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop) + self.formLayout.setFormAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop) self.formLayout.setObjectName("formLayout") + self.start_text = QtWidgets.QLabel(self.centralwidget) + self.start_text.setLayoutDirection(QtCore.Qt.RightToLeft) + self.start_text.setAlignment(QtCore.Qt.AlignCenter) + self.start_text.setObjectName("start_text") + self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.start_text) + self.start_delay_spin = QtWidgets.QSpinBox(self.centralwidget) + self.start_delay_spin.setObjectName("start_delay_spin") + self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.start_delay_spin) self.music_text = QtWidgets.QLabel(self.centralwidget) self.music_text.setLayoutDirection(QtCore.Qt.RightToLeft) self.music_text.setObjectName("music_text") @@ -56,6 +64,10 @@ class Ui_MainWindow(object): self.music_delay_spin.setMaximum(1000.0) self.music_delay_spin.setObjectName("music_delay_spin") self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.music_delay_spin) + self.music_play_text = QtWidgets.QLabel(self.centralwidget) + self.music_play_text.setLayoutDirection(QtCore.Qt.RightToLeft) + self.music_play_text.setObjectName("music_play_text") + self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.music_play_text) self.music_checkbox = QtWidgets.QCheckBox(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) @@ -70,18 +82,6 @@ class Ui_MainWindow(object): self.music_checkbox.setChecked(False) self.music_checkbox.setObjectName("music_checkbox") self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.music_checkbox) - self.music_play_text = QtWidgets.QLabel(self.centralwidget) - self.music_play_text.setLayoutDirection(QtCore.Qt.RightToLeft) - self.music_play_text.setObjectName("music_play_text") - self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.music_play_text) - self.start_delay_spin = QtWidgets.QSpinBox(self.centralwidget) - self.start_delay_spin.setObjectName("start_delay_spin") - self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.start_delay_spin) - self.start_text = QtWidgets.QLabel(self.centralwidget) - self.start_text.setLayoutDirection(QtCore.Qt.RightToLeft) - self.start_text.setAlignment(QtCore.Qt.AlignCenter) - self.start_text.setObjectName("start_text") - self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.start_text) self.verticalLayout.addLayout(self.formLayout) self.line = QtWidgets.QFrame(self.centralwidget) self.line.setFrameShape(QtWidgets.QFrame.HLine) @@ -89,42 +89,71 @@ class Ui_MainWindow(object): self.line.setObjectName("line") self.verticalLayout.addWidget(self.line) self.formLayout_2 = QtWidgets.QFormLayout() - self.formLayout_2.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) + self.formLayout_2.setLabelAlignment(QtCore.Qt.AlignCenter) + self.formLayout_2.setFormAlignment(QtCore.Qt.AlignCenter) self.formLayout_2.setObjectName("formLayout_2") - self.stop_button = QtWidgets.QPushButton(self.centralwidget) - self.stop_button.setObjectName("stop_button") - self.formLayout_2.setWidget(10, QtWidgets.QFormLayout.FieldRole, self.stop_button) - self.pause_button = QtWidgets.QPushButton(self.centralwidget) - self.pause_button.setObjectName("pause_button") - self.formLayout_2.setWidget(9, QtWidgets.QFormLayout.FieldRole, self.pause_button) + self.check_button = QtWidgets.QPushButton(self.centralwidget) + self.check_button.setEnabled(True) + self.check_button.setObjectName("check_button") + self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.check_button) self.start_button = QtWidgets.QPushButton(self.centralwidget) self.start_button.setEnabled(True) self.start_button.setFlat(False) self.start_button.setObjectName("start_button") - self.formLayout_2.setWidget(8, QtWidgets.QFormLayout.FieldRole, self.start_button) - self.check_button = QtWidgets.QPushButton(self.centralwidget) - self.check_button.setEnabled(True) - self.check_button.setObjectName("check_button") - self.formLayout_2.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.check_button) + self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.start_button) + self.pause_button = QtWidgets.QPushButton(self.centralwidget) + self.pause_button.setObjectName("pause_button") + self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.pause_button) self.verticalLayout.addLayout(self.formLayout_2) + self.line_5 = QtWidgets.QFrame(self.centralwidget) + self.line_5.setFrameShape(QtWidgets.QFrame.HLine) + self.line_5.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_5.setObjectName("line_5") + self.verticalLayout.addWidget(self.line_5) + self.formLayout_5 = QtWidgets.QFormLayout() + self.formLayout_5.setLabelAlignment(QtCore.Qt.AlignCenter) + self.formLayout_5.setFormAlignment(QtCore.Qt.AlignCenter) + self.formLayout_5.setContentsMargins(-1, 0, -1, -1) + self.formLayout_5.setObjectName("formLayout_5") + self.land_selected_button = QtWidgets.QPushButton(self.centralwidget) + self.land_selected_button.setObjectName("land_selected_button") + self.formLayout_5.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.land_selected_button) + self.land_all_button = QtWidgets.QPushButton(self.centralwidget) + self.land_all_button.setObjectName("land_all_button") + self.formLayout_5.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.land_all_button) + self.verticalLayout.addLayout(self.formLayout_5) + self.line_6 = QtWidgets.QFrame(self.centralwidget) + self.line_6.setFrameShape(QtWidgets.QFrame.HLine) + self.line_6.setFrameShadow(QtWidgets.QFrame.Sunken) + self.line_6.setObjectName("line_6") + self.verticalLayout.addWidget(self.line_6) + self.formLayout_7 = QtWidgets.QFormLayout() + self.formLayout_7.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) + self.formLayout_7.setContentsMargins(-1, 0, -1, -1) + self.formLayout_7.setObjectName("formLayout_7") + self.visual_land_button = QtWidgets.QPushButton(self.centralwidget) + self.visual_land_button.setObjectName("visual_land_button") + self.formLayout_7.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.visual_land_button) + self.emergency_land_button = QtWidgets.QPushButton(self.centralwidget) + self.emergency_land_button.setObjectName("emergency_land_button") + self.formLayout_7.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.emergency_land_button) + self.verticalLayout.addLayout(self.formLayout_7) self.line_2 = QtWidgets.QFrame(self.centralwidget) self.line_2.setFrameShape(QtWidgets.QFrame.HLine) self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_2.setObjectName("line_2") self.verticalLayout.addWidget(self.line_2) self.formLayout_3 = QtWidgets.QFormLayout() - self.formLayout_3.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) + self.formLayout_3.setLabelAlignment(QtCore.Qt.AlignCenter) + self.formLayout_3.setFormAlignment(QtCore.Qt.AlignCenter) self.formLayout_3.setVerticalSpacing(6) self.formLayout_3.setObjectName("formLayout_3") self.disarm_all_button = QtWidgets.QPushButton(self.centralwidget) self.disarm_all_button.setObjectName("disarm_all_button") self.formLayout_3.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.disarm_all_button) - self.disarm_button = QtWidgets.QPushButton(self.centralwidget) - self.disarm_button.setObjectName("disarm_button") - self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.disarm_button) - self.emergency_button = QtWidgets.QPushButton(self.centralwidget) - self.emergency_button.setObjectName("emergency_button") - self.formLayout_3.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.emergency_button) + self.disarm_selected_button = QtWidgets.QPushButton(self.centralwidget) + self.disarm_selected_button.setObjectName("disarm_selected_button") + self.formLayout_3.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.disarm_selected_button) self.verticalLayout.addLayout(self.formLayout_3) self.line_3 = QtWidgets.QFrame(self.centralwidget) self.line_3.setFrameShape(QtWidgets.QFrame.HLine) @@ -132,11 +161,9 @@ class Ui_MainWindow(object): self.line_3.setObjectName("line_3") self.verticalLayout.addWidget(self.line_3) self.formLayout_4 = QtWidgets.QFormLayout() - self.formLayout_4.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) + self.formLayout_4.setLabelAlignment(QtCore.Qt.AlignCenter) + self.formLayout_4.setFormAlignment(QtCore.Qt.AlignCenter) self.formLayout_4.setObjectName("formLayout_4") - self.land_button = QtWidgets.QPushButton(self.centralwidget) - self.land_button.setObjectName("land_button") - self.formLayout_4.setWidget(8, QtWidgets.QFormLayout.FieldRole, self.land_button) self.flip_button = QtWidgets.QPushButton(self.centralwidget) self.flip_button.setObjectName("flip_button") self.formLayout_4.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.flip_button) @@ -170,7 +197,8 @@ class Ui_MainWindow(object): self.line_4.setObjectName("line_4") self.verticalLayout.addWidget(self.line_4) self.formLayout_6 = QtWidgets.QFormLayout() - self.formLayout_6.setFormAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) + self.formLayout_6.setLabelAlignment(QtCore.Qt.AlignCenter) + self.formLayout_6.setFormAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignHCenter) self.formLayout_6.setObjectName("formLayout_6") self.reboot_fcu = QtWidgets.QPushButton(self.centralwidget) self.reboot_fcu.setObjectName("reboot_fcu") @@ -187,7 +215,7 @@ class Ui_MainWindow(object): self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 1360, 25)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 1360, 22)) self.menubar.setObjectName("menubar") self.menuOptions = QtWidgets.QMenu(self.menubar) self.menuOptions.setObjectName("menuOptions") @@ -292,19 +320,20 @@ class Ui_MainWindow(object): def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Clever Drone Show")) + self.start_text.setText(_translate("MainWindow", " Start after")) + self.start_delay_spin.setSuffix(_translate("MainWindow", " s")) self.music_text.setText(_translate("MainWindow", " Music after")) self.music_delay_spin.setSuffix(_translate("MainWindow", " s")) self.music_play_text.setText(_translate("MainWindow", " Play music")) - self.start_delay_spin.setSuffix(_translate("MainWindow", " s")) - self.start_text.setText(_translate("MainWindow", " Start after")) - self.stop_button.setText(_translate("MainWindow", "Stop and land all")) - self.pause_button.setText(_translate("MainWindow", "Pause")) - self.start_button.setText(_translate("MainWindow", "Start animation")) self.check_button.setText(_translate("MainWindow", "Preflight check")) + self.start_button.setText(_translate("MainWindow", "Start animation")) + self.pause_button.setText(_translate("MainWindow", "Pause")) + self.land_selected_button.setText(_translate("MainWindow", "Land selected")) + self.land_all_button.setText(_translate("MainWindow", "Land ALL")) + self.visual_land_button.setText(_translate("MainWindow", "Visual land")) + self.emergency_land_button.setText(_translate("MainWindow", "Emergency land")) self.disarm_all_button.setText(_translate("MainWindow", "Disarm ALL")) - self.disarm_button.setText(_translate("MainWindow", "Disarm selected")) - self.emergency_button.setText(_translate("MainWindow", "Emergency land")) - self.land_button.setText(_translate("MainWindow", "Land")) + self.disarm_selected_button.setText(_translate("MainWindow", "Disarm selected")) self.flip_button.setText(_translate("MainWindow", "Flip")) self.takeoff_button.setText(_translate("MainWindow", "Takeoff")) self.leds_button.setText(_translate("MainWindow", "Test leds")) diff --git a/Server/server_gui.ui b/Server/server_gui.ui index e39eefe..59e73ad 100644 --- a/Server/server_gui.ui +++ b/Server/server_gui.ui @@ -71,11 +71,31 @@ - Qt::AlignCenter + Qt::AlignHCenter|Qt::AlignTop - Qt::AlignCenter + Qt::AlignHCenter|Qt::AlignTop + + + + Qt::RightToLeft + + + Start after + + + Qt::AlignCenter + + + + + + + s + + + @@ -99,6 +119,16 @@ + + + + Qt::RightToLeft + + + Play music + + + @@ -127,36 +157,6 @@ - - - - Qt::RightToLeft - - - Play music - - - - - - - s - - - - - - - Qt::RightToLeft - - - Start after - - - Qt::AlignCenter - - - @@ -168,24 +168,23 @@ - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + Qt::AlignCenter - - + + Qt::AlignCenter + + + + + true + - Stop and land all + Preflight check - - - - Pause - - - - + true @@ -198,13 +197,75 @@ - - - - true - + + - Preflight check + Pause + + + + + + + + + Qt::Horizontal + + + + + + + Qt::AlignCenter + + + Qt::AlignCenter + + + 0 + + + + + Land selected + + + + + + + Land ALL + + + + + + + + + Qt::Horizontal + + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + 0 + + + + + Visual land + + + + + + + Emergency land @@ -219,8 +280,11 @@ + + Qt::AlignCenter + - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + Qt::AlignCenter 6 @@ -233,19 +297,12 @@ - + Disarm selected - - - - Emergency land - - - @@ -257,16 +314,12 @@ - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + Qt::AlignCenter + + + Qt::AlignCenter - - - - Land - - - @@ -341,8 +394,11 @@ + + Qt::AlignCenter + - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + Qt::AlignBottom|Qt::AlignHCenter @@ -379,7 +435,7 @@ 0 0 1360 - 25 + 22 diff --git a/Server/server_qt.py b/Server/server_qt.py index ef78935..d645cf2 100644 --- a/Server/server_qt.py +++ b/Server/server_qt.py @@ -18,7 +18,7 @@ from server_gui import Ui_MainWindow from server import * import messaging_lib as messaging from copter_table_models import * -from emergency import * +from visual_land import * import threading @@ -98,12 +98,13 @@ class MainWindow(QtWidgets.QMainWindow): # Connect calibrating signal (testing) self.model.selected_calibrating_signal.connect(self.ui.check_button.setDisabled) self.model.selected_calibrating_signal.connect(self.ui.pause_button.setDisabled) - self.model.selected_calibrating_signal.connect(self.ui.stop_button.setDisabled) - self.model.selected_calibrating_signal.connect(self.ui.emergency_button.setDisabled) - self.model.selected_calibrating_signal.connect(self.ui.disarm_button.setDisabled) + self.model.selected_calibrating_signal.connect(self.ui.land_selected_button.setDisabled) + self.model.selected_calibrating_signal.connect(self.ui.land_all_button.setDisabled) + self.model.selected_calibrating_signal.connect(self.ui.visual_land_button.setDisabled) + self.model.selected_calibrating_signal.connect(self.ui.emergency_land_button.setDisabled) + self.model.selected_calibrating_signal.connect(self.ui.disarm_selected_button.setDisabled) self.model.selected_calibrating_signal.connect(self.ui.disarm_all_button.setDisabled) self.model.selected_calibrating_signal.connect(self.ui.leds_button.setDisabled) - self.model.selected_calibrating_signal.connect(self.ui.land_button.setDisabled) self.model.selected_calibrating_signal.connect(self.ui.reboot_fcu.setDisabled) self.model.selected_calibration_ready_signal.connect(self.ui.calibrate_gyro.setEnabled) self.model.selected_calibration_ready_signal.connect(self.ui.calibrate_level.setEnabled) @@ -137,16 +138,19 @@ class MainWindow(QtWidgets.QMainWindow): self.ui.check_button.clicked.connect(self.selfcheck_selected) self.ui.start_button.clicked.connect(self.send_starttime_selected) self.ui.pause_button.clicked.connect(self.pause_resume_selected) - self.ui.stop_button.clicked.connect(self.land_all) - self.ui.emergency_button.clicked.connect(self.emergency) - self.ui.disarm_button.clicked.connect(self.disarm_selected) + self.ui.land_selected_button.clicked.connect(self.land_selected) + self.ui.land_all_button.clicked.connect(self.land_all) + + self.ui.visual_land_button.clicked.connect(self.visual_land) + self.ui.emergency_land_button.clicked.connect(self.emergency_land_selected) + + self.ui.disarm_selected_button.clicked.connect(self.disarm_selected) self.ui.disarm_all_button.clicked.connect(self.disarm_all) self.ui.leds_button.clicked.connect(self.test_leds_selected) self.ui.takeoff_button.clicked.connect(self.takeoff_selected) self.ui.flip_button.clicked.connect(self.flip_selected) - self.ui.land_button.clicked.connect(self.land_selected) self.ui.reboot_fcu.clicked.connect(self.reboot_selected) self.ui.calibrate_gyro.clicked.connect(self.calibrate_gyro_selected) @@ -272,24 +276,83 @@ class MainWindow(QtWidgets.QMainWindow): copter.client.send_message('resume', {"time": server.time_now() + time_gap}) self.ui.pause_button.setText('Pause') + + @pyqtSlot() + def land_selected(self): + for copter in self.model.user_selected(): + copter.client.send_message("land") + @pyqtSlot() def land_all(self): Client.broadcast_message("land") + @pyqtSlot() + def visual_land(self): + client_row_min = 0 + client_row_max = self.model.rowCount() - 1 + result = -1 + while (result != 0) and (result != 3) and (result != 4): + # light_green_red(min, max) + client_row_mid = int(math.ceil((client_row_max + client_row_min) / 2.0)) + print(client_row_min, client_row_mid, client_row_max) + for row_num in range(client_row_min, client_row_mid): + self.model.data_contents[row_num].client \ + .send_message("led_fill", {"green": 255}) + for row_num in range(client_row_mid, client_row_max + 1): + self.model.data_contents[row_num].client \ + .send_message("led_fill", {"red": 255}) + + Dialog = QtWidgets.QDialog() + ui = Ui_Dialog() + ui.setupUi(Dialog) + Dialog.show() + result = Dialog.exec() + print("Dialog result: {}".format(result)) + + if client_row_max != client_row_min: + if result == 1: + for row_num in range(client_row_mid, client_row_max + 1): + self.model.data_contents[row_num].client \ + .send_message("led_fill") + client_row_max = client_row_mid - 1 + + elif result == 2: + for row_num in range(client_row_min, client_row_mid): + self.model.data_contents[row_num].client \ + .send_message("led_fill") + client_row_min = client_row_mid + + if result == 0: + Client.broadcast_message("led_fill") + elif result == 3: + for row_num in range(client_row_min, client_row_max + 1): + self.model.data_contents[row_num].client \ + .send_message("land") + elif result == 4: + for row_num in range(client_row_min, client_row_max + 1): + self.model.data_contents[row_num].client \ + .send_message("disarm") + + @pyqtSlot() + def emergency_land_selected(self): + for copter in self.model.user_selected(): + copter.client.send_message("emergency_land") + @pyqtSlot() def disarm_selected(self): for copter in self.model.user_selected(): copter.client.send_message("disarm") + + @pyqtSlot() + def disarm_all(self): + Client.broadcast_message("disarm") + @pyqtSlot() def test_leds_selected(self): for copter in self.model.user_selected(): copter.client.send_message("led_test") - @pyqtSlot() - def disarm_all(self): - Client.broadcast_message("disarm") - @pyqtSlot() @confirmation_required("This operation will takeoff copters immediately. Proceed?") def takeoff_selected(self, **kwargs): @@ -307,11 +370,6 @@ class MainWindow(QtWidgets.QMainWindow): if flip_checks(copter): copter.client.send_message("flip") - @pyqtSlot() - def land_selected(self): - for copter in self.model.user_selected(): - copter.client.send_message("land") - @pyqtSlot() def reboot_selected(self): for copter in self.model.user_selected(): @@ -544,60 +602,12 @@ class MainWindow(QtWidgets.QMainWindow): logging.info("Playing music") self.player.play() - @pyqtSlot() - def emergency(self): - client_row_min = 0 - client_row_max = self.model.rowCount() - 1 - result = -1 - while (result != 0) and (result != 3) and (result != 4): - # light_green_red(min, max) - client_row_mid = int(math.ceil((client_row_max + client_row_min) / 2.0)) - print(client_row_min, client_row_mid, client_row_max) - for row_num in range(client_row_min, client_row_mid): - self.model.data_contents[row_num].client \ - .send_message("led_fill", {"green": 255}) - for row_num in range(client_row_mid, client_row_max + 1): - self.model.data_contents[row_num].client \ - .send_message("led_fill", {"red": 255}) - - Dialog = QtWidgets.QDialog() - ui = Ui_Dialog() - ui.setupUi(Dialog) - Dialog.show() - result = Dialog.exec() - print("Dialog result: {}".format(result)) - - if client_row_max != client_row_min: - if result == 1: - for row_num in range(client_row_mid, client_row_max + 1): - self.model.data_contents[row_num].client \ - .send_message("led_fill") - client_row_max = client_row_mid - 1 - - elif result == 2: - for row_num in range(client_row_min, client_row_mid): - self.model.data_contents[row_num].client \ - .send_message("led_fill") - client_row_min = client_row_mid - - if result == 0: - Client.broadcast_message("led_fill") - elif result == 3: - for row_num in range(client_row_min, client_row_max + 1): - self.model.data_contents[row_num].client \ - .send_message("land") - elif result == 4: - for row_num in range(client_row_min, client_row_max + 1): - self.model.data_contents[row_num].client \ - .send_message("disarm") - @messaging.message_callback("telemetry") def get_telem_data(self, **kwargs): message = kwargs.get("value") window.update_table_data(self, message) - def except_hook(cls, exception, traceback): sys.__excepthook__(cls, exception, traceback)