Я пытаюсь нарисовать прямоугольники в pyqtgraph, чтобы показать данные в двумерном массиве, он находится внутри окна, созданного в конструкторе. Есть ли способ нарисовать прямоугольник и сохранить объект в 2D-массив, чтобы я мог позже обновить его цвет? Я попытался следовать примеру с пользовательским графиком, но продолжаю получать следующую ошибку:
AttributeError: 'QRectF' object has no attribute 'zValue'
def Draw2DSquare(self):
self.picture = QtGui.QPicture()
p = QtGui.QPainter(self.picture)
p.setPen(pg.mkPen('w'))
p.drawLine(QtCore.QPointF(0, 0), QtCore.QPointF(1, 1))
p.setBrush(pg.mkBrush('g'))
p.drawRect(QtCore.QRectF(0, 0, 4.5, 4.5))
p.end()
self.graphWidget_2D.addItem(QtCore.QRectF(self.picture.boundingRect()))
Я не знаю, является ли это лучшим подходом. Есть ли более простой способ нарисовать прямоугольник?
это мой python файл:
import time
from PyQt5 import QtWidgets, uic, QtGui, QtCore
import pyqtgraph as pg
import pyqtgraph.opengl as gl
import sys
import numpy as np
from PyQt5.QtGui import QIcon, QKeySequence
from PyQt5.QtWidgets import QAction
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
# Load the UI Page
uic.loadUi('help.ui', self)
self.showMaximized()
self.Draw2DSquare()
def Draw2DSquare(self):
self.picture = QtGui.QPicture()
p = QtGui.QPainter(self.picture)
p.setPen(pg.mkPen('w'))
p.drawLine(QtCore.QPointF(0, 0), QtCore.QPointF(1, 1))
p.setBrush(pg.mkBrush('g'))
p.drawRect(QtCore.QRectF(0, 0, 4.5, 4.5))
p.end()
self.graphWidget_2D.addItem(QtCore.QRectF(self.picture.boundingRect()))
def main():
app = QtWidgets.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
, и это мой пользовательский интерфейс с именем help.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>1120</width>
<height>833</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="PlotWidget" name="graphWidget_2D" native="true"/>
</item>
<item row="0" column="1">
<widget class="GLViewWidget" name="graphWidget_3D" native="true"/>
</item>
<item row="1" column="0">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>1120</width>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
</property>
<addaction name="actionFile"/>
<addaction name="actionOpen"/>
<addaction name="actionSave"/>
<addaction name="separator"/>
<addaction name="actionOptions"/>
<addaction name="separator"/>
<addaction name="actionExit"/>
</widget>
<addaction name="menuFile"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<action name="actionOpen">
<property name="text">
<string>Open</string>
</property>
</action>
<action name="actionFile">
<property name="text">
<string>File</string>
</property>
</action>
<action name="actionOptions">
<property name="text">
<string>Options</string>
</property>
</action>
<action name="actionSave">
<property name="text">
<string>Save</string>
</property>
</action>
<action name="actionExit">
<property name="text">
<string>Exit</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>
<class>PlotWidget</class>
<extends>QWidget</extends>
<header>pyqtgraph.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>GLViewWidget</class>
<extends>QWidget</extends>
<header>pyqtgraph.opengl.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>