【发布时间】:2020-05-17 14:32:45
【问题描述】:
我正在尝试在 pyqtgraph 中绘制矩形以显示二维数组中的数据,它位于设计器中创建的窗口内。有没有办法绘制一个矩形并将对象保存到二维数组,以便我以后可以更新它的颜色?我尝试按照自定义绘图示例进行操作,但我不断收到以下错误:
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()
这是我的 ui 文件,名为 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>
【问题讨论】:
-
哎呀抱歉。我只是添加了代码来满足要求。