From 7b71cdd0c500ac3c9d5c84dfe24301fa962dbf48 Mon Sep 17 00:00:00 2001 From: vova Date: Mon, 10 Apr 2023 21:24:32 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BB(=D0=B0)=20?= =?UTF-8?q?'main2'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main2 | 299 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 main2 diff --git a/main2 b/main2 new file mode 100644 index 0000000..7b26c53 --- /dev/null +++ b/main2 @@ -0,0 +1,299 @@ +from PyQt5 import QtCore, QtGui, QtWidgets +from PyQt5 import uic +from PyQt5.QtGui import QColor, QPalette +from PyQt5.QtGui import QPixmap +from PyQt5.QtCore import QTimer +from PyQt5.QtWidgets import * +from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest + +import requests +import time +import json +import Res_rc +import copy +import pyqtgraph as pg +#import matplotlib.pyplot as plt +#import sys + +colors = {} +last_clicked_label = None +plotLen = 20 +valArr = [20] * plotLen +plot = None + +def led1 (checked): + if checked: + form.pushButton_2.setText("Выкл") + print("I'm worked too much") + form.label_24.hide() + form.label_20.show() + else: + form.label_20.hide() + form.label_24.show() + form.pushButton_2.setText("Вкл") + print ("I'm worked too") + +def led2 (checked): + if checked: + form.pushButton_3.setText("Выкл") + print("I'm worked too much") + form.label_27.hide() + form.label_26.show() + else: + form.label_26.hide() + form.label_27.show() + form.pushButton_3.setText("Вкл") + print ("I'm worked too") + +def led3 (checked): + if checked: + form.pushButton_4.setText("Выкл") + print("I'm worked too much") + form.label_31.hide() + form.label_29.show() + #state = form.label_24.isVisible() + + else: + form.label_29.hide() + form.label_31.show() + form.pushButton_4.setText("Вкл") + print ("I'm worked too") + + +def updateLCD(): + global temp + form.lcdNumber.display(temp) + +def sed (): + print ("I'm worked!") + +led_data = { + "leds1": {"red": 0, "green": 0, "blue": 0}, + "leds2": {"red": 0, "green": 0, "blue": 0}, + "leds3": {"red": 0, "green": 0, "blue": 0}, + "leds4": {"red": 0, "green": 0, "blue": 0}, + "leds5": {"red": 0, "green": 0, "blue": 0}, + "leds6": {"red": 0, "green": 0, "blue": 0}, + "leds7": {"red": 0, "green": 0, "blue": 0}, + "leds8": {"red": 0, "green": 0, "blue": 0}, +} + +def vkl(): + for led in form.leds: + #caution! Naming will be the same for a Led and JSON led objects + led.setStyleSheet(f"background-color: yellow;") + led_data[led.objectName()]["red"] = 255 + led_data[led.objectName()]["green"] = 255 + led_data[led.objectName()]["blue"] = 0 + +def vikl(): + for led in form.leds: + #caution! Naming will be the same for a Led and JSON led objects + led.setStyleSheet(f"background-color: black;") + led_data[led.objectName()]["red"] = 0 + led_data[led.objectName()]["green"] = 0 + led_data[led.objectName()]["blue"] = 0 + +def color(): + color = QColorDialog.getColor() + if color.isValid(): + palette = QPalette() + palette.setColor(QPalette.Button, color) + form.color_b.setPalette(palette) + for led in form.leds: + led.setStyleSheet(f"background-color: {color.name()};") + led_data[led.objectName()]["red"] = color.red() + led_data[led.objectName()]["green"] = color.green() + led_data[led.objectName()]["blue"] = color.blue() + +def led_clicked(event): + colors = led.palette().color(QPalette.Background) + sender= QApplication.widgetAt(event.globalPos()) #QApplication.widgetAt() для получения текущего виджета, на котором было совершено действие + color = QColorDialog.getColor() + if color.isValid(): + #caution! Naming will be the same for a Led and JSON led objects + sender.setStyleSheet(f"background-color: {color.name()};") + led_data[sender.objectName()]["red"] = color.red() + led_data[sender.objectName()]["green"] = color.green() + led_data[sender.objectName()]["blue"] = color.blue() + else: + form.leds.setStyleSheet(" ") + +def sendMessage(): + url = form.lineEdit.text() + labels_dict = {} + labels_dict["LED1"] = form.label_20.isVisible() + labels_dict["LED2"] = form.label_26.isVisible() + labels_dict["LED3"] = form.label_29.isVisible() + + json_data = {} + json_data.update(led_data) + json_data.update(labels_dict) + json_str = json.dumps(json_data, separators=(',', ':')) + + data_str = 'Я отправляю текст на: ' + url + '\n'+ json_str + form.textEdit.setPlainText(data_str) + + headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} #заголовки запроса + response = requests.post(url, json=json_data, headers=headers) #отправка POST запроса + + # обрабатываем ответ и выводим его в поле вывода + if response.status_code == 200: + form.textEdit.append('О, все прошло успешно!\n') #выводим значение в line_edit + else: + form.textEdit.append('Ошибка при получении данных') + + + +def getValueFromMacket(): + url = form.lineEdit_2.text() + response = requests.get(url) #отправка POST запроса + + # обрабатываем ответ и выводим его в поле вывода + if response.status_code == 200: + data=response.json() #функция преобразования данных в объект питон + #Parse the date + form.textEdit.append(json.dumps(data)) #выводим значение в line_edit + form.textEdit.append(str(data["temperature"])) + + bs = list() + bs.append(data["button1State"]) + bs.append(data["button2State"]) + bs.append(data["button3State"]) + update_button(bs) + + update_pressure(data["pressure"]) + + form.lcdNumber_7.display(data["ambient_light"]) + form.lcdNumber_2.display (data["red_light"]) + form.lcdNumber_3.display (data["green_light"]) + form.lcdNumber_4.display (data["blue_light"]) + form.lcdNumber_8.display (data["lightness"]) + + form.lcdNumber_5.display(data['acceleration_x']) + form.lcdNumber_9.display (data['acceleration_y']) + form.lcdNumber_6.display (data['acceleration_z']) + + led1(data['LED1']) + led2(data['LED2']) + led3(data['LED3']) + valArr.pop(0) + valArr.append(data["temperature"]) + print(valArr) + UpdatePlot(plot, valArr) + else: + form.textEdit.append('Ошибка при получении данных') + + +#json.load(file) @ACHT! Method to convert Str to JSON + + +def update_pressure(p): + form.lcd_pressure.display(p) + +def update_button (bs): + for i in range(1, 4): + button_state = bs[i-1] + if button_state == 'True': + getattr(form, f'on_{i}').show() + getattr(form, f'off_{i}').hide() + else: + getattr(form, f'on_{i}').hide() + getattr(form, f'off_{i}').show() + + +def UpdatePlot(plot, val): + x = list(range(1, len(valArr)+1)) + bargraph = pg.BarGraphItem(x = x, height = val, width = 0.6, brush ='g') + plot.clear() + plot.addItem(bargraph) + +def Plots(form, valArr): + widget = QWidget() + plot = pg.plot() #создает объект PlotWidget из библиотеки PyqtGraph + + x = list(range(1, len(valArr)+1)) + bargraph = pg.BarGraphItem(x = x, height = valArr, width = 0.6, brush ='g') + plot.addItem(bargraph) + + # Creating a grid layout + layout = QGridLayout() + layout.addWidget(plot, 0,0) + form.plotwidget.setLayout(layout) + + return plot + + +if __name__ == "__main__": + # Opening JSON file + f = open('config.json') #открывает файл 'config.json', загружает его содержимое в переменную 'conf' в формате словаря (dictionary) при помощи функции 'json.load()', а затем выводит все ключи словаря 'conf' при помощи цикла 'for'. + conf = json.load(open('config.json')) + f.close() + + print("Find an arguments:") + for i in conf: + print(i) + + import sys + + Form, Window = uic.loadUiType(conf['uiPath'] + conf['uiFileName']) + + app = QApplication(sys.argv)# Создаем экземпляр QApplication и передаем параметры командной строки + window = Window() + form = Form() + form.setupUi(window) + window.show() # Окна скрыты по умолчанию! + window.setWindowTitle('Lr4') #nazvanie + form.pushButton.clicked.connect(sendMessage) #привязываем функцию к кнопке Отправить + form.lineEdit.setText("http://" + conf['defaultMDNSname'] + conf['defaultPostRoute']) + form.lineEdit_2.setText("http://" + conf['defaultMDNSname'] + conf['defaultGetRoute']) + form.pushButton_5.clicked.connect(getValueFromMacket) #привязываем функцию к кнопке Отправить GET запрос + + + form.pushButton_2.setCheckable(True) #вкл режим перекл + form.pushButton_2.setChecked(False) #нач значение + form.label_20.hide() + form.pushButton_2.toggled["bool"].connect(led1) + + form.pushButton_3.setCheckable(True) #вкл режим перекл + form.pushButton_3.setChecked(False) #нач значение + form.label_26.hide() + form.pushButton_3.toggled["bool"].connect(led2) + + form.pushButton_4.setCheckable(True) #вкл режим перекл + form.pushButton_4.setChecked(False) #нач значение + form.label_29.hide() + form.pushButton_4.toggled["bool"].connect(led3) + + form.on_1.hide() + form.on_2.hide() + form.on_3.hide() + + form.lcdNumber.display(45) + + + form.leds = [form.leds1, form.leds2, form.leds3, form.leds4, form.leds5, form.leds6, form.leds7, form.leds8] + + + for led in form.leds: + led.mousePressEvent = led_clicked + + timer = QTimer() + timer.setInterval(1000) + + #Connect the timer to the update_pressure function + #TODO connect to getSensValue from macket + #timer.timeout.connect(update_pressure) + #timer.timeout.connect (update_button) + #timer.timeout.connect (update_light) + #timer.timeout.connect (update_acceleration) + + timer.start() + + form.vkl_b.clicked.connect(vkl) + form.vikl_b.clicked.connect(vikl) + form.color_b.clicked.connect(color) + + plot = Plots(form, valArr) + + sys.exit (app.exec_()) # Запуск цикла событий