Не получается обновить/удалить график pyqtgraph и вывести данные по времени на график из SQlite3
Выделяю через checkbox необходимые параметры которые уже записаны в базу данных sqlite3. Нажимаю на кнопку обновить график и в начале удаляем все что там было и рисуем новое. Таким способом решил сбрасывать старые графики. Как удалять полностью график или определенный?
Когда загружаются данные по выделенным параметрам checkbox из базы данных sqlite3 есть возможность вытащить точное время и дату. Как можно на графике масштабировать значения опираясь и отображая дату из базы данных sqlite3 ?
Программировать начал не давно и буду рад ЛЮБОМУ совету. Ищу хороший источник pyqtgraph с понятными объяснением и примерами :)
# -*- coding: utf-8 -*-
# Подключение, объявление библиотек и модулей. Ничего не удалять!
from PyQt5 import QtCore, QtGui, QtWidgets, uic # подключение библиотек ядра, интерфейса, различных виджетов
from PyQt5.QtWidgets import QMainWindow # подключение модуля главного окна из библиотеки
from SOG_DESIGNER import Ui_MainWindow
from SOG_DESIGNER_WindowOneGraf_SAU_TKA1 import Ui_MainWindowOneGrafSAUTKA1 # и преобразованого из раcширения .ui в .py
from datetime import timedelta
import datetime
import sqlite3
import sys # подключение модулей работы с временем, базой данных, системой
import pyqtgraph as pg # подключение модуля графики
import numpy as np
# Функция чтения ОБРАБОТАННЫХ данных из базы данных СОГ таблицы САУ ТКА №1
def sqlite3_read_db_SAU_TKA1_processed_NGG(): # функции передали значение название базы данных и таблицы
DBread = sqlite3.connect('Test_SAU_TKA1_processed.db') # присваиваем ссылку на базу данных
cur = DBread.cursor() # подключаем курсор для обращения к элементам базы
cur.execute("SELECT NGG FROM Data_processed")
data = cur.fetchall() # вытаскиваем и присваивает все данные по запросу выше
clear_data = [] # новый массив данных для чистых данных
for element in data: # перезаписываем данные из типа () в новый тип []
clear_data.append(element)
data = clear_data # присваеваем данные
del(clear_data) # чистим массив для чистки данных
DBread.commit() # закрываем таблицу САУ ТКА №1
cur.close() # закрываем курсор для работы с базой данных СОГ
DBread.close() # закрываем базу данных СОГ
return data # возвращаем данные полученые по запросу в данной функции
# Функция чтения ОБРАБОТАННЫХ данных из базы данных СОГ таблицы САУ ТКА №1
def sqlite3_read_db_SAU_TKA1_processed_t4g(): # функции передали значение название базы данных и таблицы
DBread = sqlite3.connect('Test_SAU_TKA1_processed.db') # присваиваем ссылку на базу данных
cur = DBread.cursor() # подключаем курсор для обращения к элементам базы
cur.execute("SELECT t4g FROM Data_processed")
data = cur.fetchall() # вытаскиваем и присваивает все данные по запросу выше
clear_data = [] # новый массив данных для чистых данных
for element in data: # перезаписываем данные из типа () в новый тип []
clear_data.append(element)
data = clear_data # присваеваем данные
del(clear_data) # чистим массив для чистки данных
DBread.commit() # закрываем таблицу САУ ТКА №1
cur.close() # закрываем курсор для работы с базой данных СОГ
DBread.close() # закрываем базу данных СОГ
return data # возвращаем данные полученые по запросу в данной функции
# Функция чтения ОБРАБОТАННЫХ данных из базы данных СОГ таблицы САУ ТКА №1
def sqlite3_read_db_SAU_TKA1_processed_vibgg(): # функции передали значение название базы данных и таблицы
DBread = sqlite3.connect('Test_SAU_TKA1_processed.db') # присваиваем ссылку на базу данных
cur = DBread.cursor() # подключаем курсор для обращения к элементам базы
cur.execute("SELECT vibgg FROM Data_processed")
data = cur.fetchall() # вытаскиваем и присваивает все данные по запросу выше
clear_data = [] # новый массив данных для чистых данных
for element in data: # перезаписываем данные из типа () в новый тип []
clear_data.append(element)
data = clear_data # присваеваем данные
del(clear_data) # чистим массив для чистки данных
DBread.commit() # закрываем таблицу САУ ТКА №1
cur.close() # закрываем курсор для работы с базой данных СОГ
DBread.close() # закрываем базу данных СОГ
return data # возвращаем данные полученые по запросу в данной функции
# Класс основного окна
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None, *args, **kwargs): # метод инициализации класса и объявления родителей
QMainWindow.__init__(self, parent) # инициализация модуля библиотеки для работы с его методами
self.setupUi(self) # инициализация интерфейса
self.pushButton_one_graf_sau_tka1.clicked.connect(self.Open_WindowOneGraf_SAU_TKA1)
# Открывает окно с ГРАФИКОМ
def Open_WindowOneGraf_SAU_TKA1(self):
self.Open_WinOneGraf_SAU_TKA_1 = Window_SAU_TKA1()
self.Open_WinOneGraf_SAU_TKA_1.show()
# Класс окна графика
class Window_SAU_TKA1(QMainWindow, Ui_MainWindowOneGrafSAUTKA1):
def __init__(self, parent=None, *args, **kwargs): # метод инициализации класса и объявления родителей
QMainWindow.__init__(self, parent) # инициализация модуля библиотеки для работы с его методами
self.setupUi(self) # инициализация интерфейса
self.pushButton_plot_db.clicked.connect(self.Graf_plot_db) # вызываем метод при нажатиии на кнопку
# Метод проверяет какие параметры выгружать из базы и отображать на графике
def Graf_plot_db(self):
###########################
delItem = self.GraphWidget.getPlotItem() # ЗДЕСЬ пытаюсь присвоить элемент графика и очистить
self.GraphWidget.removeItem(delItem) # ТУТ ничего не получилось :(
###########################
if self.checkBox_NGG.checkState(): # если checkBox выбран то рисуем по этому параметру график
NewDataNGG = sqlite3_read_db_SAU_TKA1_processed_NGG() # Выгружаем данные параметра NGG из sqlite3(можно время и дату выгрузить)
x = [] # для массива данных оси Х
y = [] # для массива данных оси У
count = 0 # счетчик для элементов массива
for i in NewDataNGG: # цикл для того чтобы пробежать по элементам массива и удалить лишнее символы
Y1_strNGG = NewDataNGG[count] # пример данных ('1002',)
Str_element1 = str(Y1_strNGG)[2:len(Y1_strNGG) - 4] # пример данных после вырезания 1002
#############################################
x.append(count) # ТУТ добавляем значение в массив(должно быть ВРЕМЯ из БАЗЫ как то отмасштабировано)
#############################################
y.append(int(Str_element1)) # добавляем значение из базы данных обработанное от символов
if len(NewDataNGG) == count: # условие выхода из цикла при переполнении счетчика
break
count = count + 1 # счетчик для массива
self.plot((x), (y)) # вызываем метод для отображения графика по координатам из базы
if self.checkBox_t4g.checkState():
NewDatat4g = sqlite3_read_db_SAU_TKA1_processed_t4g()
x = []
y = []
count = 0
for i in NewDatat4g:
Y1_strNGG = NewDatat4g[count]
Str_element1 = str(Y1_strNGG)[2:len(Y1_strNGG) - 4]
x.append(count)
y.append(int(Str_element1))
if len(NewDatat4g) == count:
break
count = count + 1
self.plot((x), (y))
if self.checkBox_vibgg.checkState():
NewDatavibgg = sqlite3_read_db_SAU_TKA1_processed_vibgg()
x = []
y = []
count = 0
for i in NewDatavibgg:
Y1_strNGG = NewDatavibgg[count]
Str_element1 = str(Y1_strNGG)[2:len(Y1_strNGG) - 4]
x.append(count)
y.append(int(Str_element1))
if len(NewDatavibgg) == count:
break
count = count + 1
self.plot((x), (y))
# Метод отображения графика по координатам
def plot(self, X, Y):
self.GraphWidget.plot(X, Y)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
GeneralWindow = MainWindow()
GeneralWindow.show()
sys.exit(app.exec_())
тут ниже два подключаемых модуля и база которую можно опрашивать Архив с модулями и базой

