Цель: простое приложение для просмотра / построения графика данных об окружающей среде в зависимости от времени (температура, давление, влажность, яркость).
Вот скриншот приложения:
Я относительно новичок в Qt, поэтому надеюсь, что смогу объяснить это адекватно ...
проблема: код работает, приложение запускается медленно, я считаю, что это как-то связано с тем, как я добавляя данные к каждой серии для построения графика (см. код для графика температуры ниже), в настоящее время я просматриваю каждую строку данных, которые были прочитаны (из CsvReader), беру временные данные и данные температуры (или другие) и добавляю их к объекту серии. Кажется, из-за этого приложение медленно запускается? Есть ли способ сделать это более эффективно? Я пробовал добавить полный набор данных за пределы l oop, но объект QSplineSeries не принимает списки, есть ли уловка, которую мне здесь не хватает?
Примечание: продукт fini sh выиграл не отображать все данные, как показано на скриншоте, мы надеемся, что он покажет определенный пользователем диапазон. Снизит ли это снижение производительности, которое я наблюдаю в настоящее время?
Любая помощь будет принята с благодарностью, спасибо.
class TempPlot(qtch.QChartView):
chartTitle = CsvReader()._headers[1]
def __init__(self):
super().__init__()
# Create QChart object
chart = qtch.QChart(title=self.chartTitle)
self.setChart(chart)
# Create series object
self.series = qtch.QSplineSeries(name='Degrees Celsius')
chart.addSeries(self.series)
# Next populate a series object with the data
startTime = qtc.QDateTime.fromString(CsvReader()._data[0][0], 'dd/MM/yyyy hh:mm')
endTime = qtc.QDateTime.fromString(CsvReader()._data[-1][0], 'dd/MM/yyyy hh:mm')
tick = int(len(CsvReader()._data)/(7*48))
for row in CsvReader()._data:
tempVal = float(row[1])
timeVal = qtc.QDateTime.fromString(row[0], 'dd/MM/yyyy hh:mm').toMSecsSinceEpoch()
self.series.append(timeVal, tempVal)
# format the axes
xAxis = qtch.QDateTimeAxis()
xAxis.setTickCount(tick)
xAxis.setFormat('dd/MM/yyyy hh:mm')
xAxis.setRange(startTime, endTime)
yAxis = qtch.QValueAxis()
yAxis.setRange(-10, 50)
chart.setAxisX(xAxis, self.series)
chart.setAxisY(yAxis, self.series)
# As we are using curves there is one appearance optimization to do:
self.setRenderHint(qtg.QPainter.Antialiasing)
# We can enable the user to pan around the chart by overriding the keyPressEvent() method in the QChart Object
def keyPressEvent(self, event):
keymap = {
qtc.Qt.Key_Up: lambda: self.chart().scroll(0, -10),
qtc.Qt.Key_Down: lambda: self.chart().scroll(0, 10),
qtc.Qt.Key_Right: lambda: self.chart().scroll(-10, 0),
qtc.Qt.Key_Left: lambda: self.chart().scroll(10, 0),
qtc.Qt.Key_Greater: self.chart().zoomIn,
qtc.Qt.Key_Less: self.chart().zoomOut
}
callback = keymap.get(event.key())
if callback:
callback()