2024-12-25 19:52:32 +03:00

151 lines
5.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import time
from PyQt6 import QtCore, QtGui, QtWidgets
from ui import Ui_Controller
import controller.controller_reifined as controller
class Window(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.ui = Ui_Controller()
self.ui.setupUi(self)
# controller
self.controller = controller.ControllerInterface(controller.ControllerRefined(0xFFFFFFFFFFFF, 0x112233445542))
# dev selection
self.hoverFilter = self.ComboBoxHoverEventFilter(self.ui.DeviceSelection, self.refreshDeviceList)
self.connected = False
# qt styles
self.redLineEdit = "QLineEdit { background: rgb(255, 0, 0); selection-background-color: rgb(111, 136, 222); }"
self.defLineEdit = "QLineEdit { }"
# object containers
self.currentFields = [
self.ui.Current1Field,
self.ui.Current2Field,
self.ui.Current3Field,
self.ui.Current4Field,
]
# modes, currents, etc
self.modes = []
# connect signals
self.connectMethods()
class ComboBoxHoverEventFilter(QtCore.QObject):
def __init__(self, parent, onEnter):
super().__init__(parent)
self.parent = parent
self.onEnter = onEnter
def eventFilter(self, obj, event):
if event.type() == QtCore.QEvent.Type.Enter:
self.onEnter()
return super().eventFilter(obj, event)
def connectMethods(self):
self.ui.DeviceSelection.activated.connect(self.deviceSelected)
self.ui.DeviceSelection.installEventFilter(self.hoverFilter)
def resetAllStyles(self) -> None:
for f in self.currentFields:
f.setStyleSheet(self.defLineEdit)
def clearAllFields(self) -> None:
for f in self.currentFields:
f.setText("")
def setStatus(self, text: str) -> None :
print(text)
def deviceSelected(self, deviceIndex: int):
device = self.ui.DeviceSelection.itemText(deviceIndex)
self.connected = False
self.resetAllStyles()
self.clearAllFields()
self.setStatus(f'Подключение к {device}...')
self.controller.close()
self.controller.connect(device)
print(device)
if self.readControllerCurrentsAndData():
self.setStatus(f'Выбранный порт: {device}')
self.connected = True
else:
self.setStatus(f'Не удалось подключиться к {device}')
self.ui.DeviceSelection.clear()
self.connected = False
self.controller.close()
def readControllerCurrentsAndData(self) -> bool:
self.setStatus(f'Чтение токов {self.controller.controller.ser.port}...')
values = self.controller.readCurrents()
if not values:
for f in self.currentFields:
f.setStyleSheet(self.redLineEdit)
else:
for i, f in enumerate(self.currentFields):
f.setStyleSheet(self.defLineEdit)
f.setText(str(values[i] * 10))
self.setStatus(f'Чтение адреса {self.controller.controller.ser.port}...')
address = self.controller.readAddress()
if address == -1:
self.ui.DmxAddressField.setStyleSheet(self.redLineEdit)
else:
self.ui.DmxAddressField.setStyleSheet(self.defLineEdit)
self.ui.DmxAddressField.setText(str(address))
self.modes = []
self.setStatus(f'Чтение режимов {self.controller.controller.ser.port}...')
dev_info = self.controller.readDeviceInfo()
if dev_info:
mode_count = dev_info[2]
for index in range(mode_count):
self.setStatus(f'Чтение режима {index + 1} {self.controller.controller.ser.port}...')
mode = self.controller.readMode(index)
if not mode:
self.modes = []
break
self.modes.append(mode)
time.sleep(0.05)
if not self.modes:
self.ui.ModeSelection.clear()
self.ui.ModeSelection.setCurrentText('ERROR')
else:
self.ui.ModeSelection.setStyleSheet('QComboBox {}')
self.ui.ModeSelection.clear()
for m in self.modes:
self.ui.ModeSelection.addItem(m[1])
mode_names = []
for index, m in enumerate(self.modes):
mode_names.append(f'{index + 1}:{m[1]}')
self.ui.ModeSelection.setCurrentText(mode_names[dev_info[1] - 1])
self.ui.ModeSelection.clear()
self.ui.ModeSelection.addItems(mode_names)
return values or address != -1 or self.modes
def refreshDeviceList(self):
self.ui.DeviceSelection.clear()
self.ui.DeviceSelection.addItems(self.controller.readComPorts())
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec())