Проблема с графиком PyQT5
from PyQt5 import QtWidgets, uic
from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo
from PyQt5.QtCore import QIODevice
from pyqtgraph import PlotWidget
import pyqtgraph as pg
import sys
# https://stackoverflow.com/questions/35932660/qcombobox-click-event обновление по клику
app = QtWidgets.QApplication([])
ui = uic.loadUi("design.ui")
ui.setWindowTitle("SerialGUI")
serial = QSerialPort()
serial.setBaudRate(115200)
portList = []
ports = QSerialPortInfo().availablePorts()
for port in ports:
portList.append(port.portName())
ui.comL.addItems(portList)
posX = 200
posY = 100
listX = []
for x in range(100): listX.append(x)
listY = []
for x in range(100): listY.append(0)
def onRead():
rx = serial.readLine()
rxs = str(rx, 'utf-8').strip()
data = rxs.split(',')
ui.lcdN.display(rxs)
global listX
global listY
listY = listY[1:]
listY.append(rxs)
ui.graph.plot(listX. listY)
def onOpen():
serial.setPortName(ui.comL.currentText())
serial.open(QIODevice.ReadWrite)
def onClose():
serial.close()
serial.readyRead.connect(onRead)
ui.openB.clicked.connect(onOpen)
ui.closeB.clicked.connect(onClose)
ui.show()
app.exec()
График не может образоваться, выдает ошибку
ui.graph.plot(listX. listY)
AttributeError: 'list' object has no attribute 'listY'
Что в итоге делать? Я новичок Python, не знаю, что и как. Код design.ui файла:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>553</width>
<height>314</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<property name="tabShape">
<enum>QTabWidget::Rounded</enum>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QLCDNumber" name="lcdN">
<property name="geometry">
<rect>
<x>60</x>
<y>120</y>
<width>71</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="PlotWidget" name="graph" native="true">
<property name="geometry">
<rect>
<x>50</x>
<y>160</y>
<width>121</width>
<height>121</height>
</rect>
</property>
</widget>
<widget class="PlotWidget" name="graph_2" native="true">
<property name="geometry">
<rect>
<x>220</x>
<y>160</y>
<width>121</width>
<height>121</height>
</rect>
</property>
</widget>
<widget class="PlotWidget" name="graph_3" native="true">
<property name="geometry">
<rect>
<x>380</x>
<y>160</y>
<width>121</width>
<height>121</height>
</rect>
</property>
</widget>
<widget class="QLCDNumber" name="lcdN_2">
<property name="geometry">
<rect>
<x>250</x>
<y>120</y>
<width>71</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QLCDNumber" name="lcdN_3">
<property name="geometry">
<rect>
<x>410</x>
<y>120</y>
<width>71</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>80</x>
<y>30</y>
<width>381</width>
<height>61</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QComboBox" name="comL"/>
</item>
<item>
<widget class="QPushButton" name="openB">
<property name="text">
<string>OPEN</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="closeB">
<property name="text">
<string>CLOSE</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QGroupBox" name="groupBox_2">
<property name="geometry">
<rect>
<x>50</x>
<y>20</y>
<width>451</width>
<height>71</height>
</rect>
</property>
<property name="title">
<string>Serial</string>
</property>
</widget>
<zorder>groupBox_2</zorder>
<zorder>lcdN</zorder>
<zorder>graph</zorder>
<zorder>graph_2</zorder>
<zorder>graph_3</zorder>
<zorder>lcdN_2</zorder>
<zorder>lcdN_3</zorder>
<zorder>layoutWidget</zorder>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<customwidgets>
<customwidget>
<class>PlotWidget</class>
<extends>QWidget</extends>
<header>pyqtgraph</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
Ответы (1 шт):
Автор решения: Nikita Gorodnyansky
→ Ссылка
Похоже на то что ты в строке
ui.graph.plot(listX. listY)
должен использовать вместо точки запятую. Т.е. передать функции plot 2 списка, по оси X и Y, а вместо этого пытаешься передать атрибут listY у элемента listX. Попробуй
ui.graph.plot(listX, listY)