python - 使用 pyside2 将 pyqtgraph 图添加到 QTDesigner
问题描述
我有一个带有 QVBoxLayout 的 QTDesigner 文件,我尝试在其中添加一个 GLViewWidget:
我使用这个Embed Pyqtgraph to PySide2示例来创建我的代码。在我的应用程序中,所有这些都嵌入在 ROS 环境中。QTDesigner QVBoxLayout:
...
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="leftMargin">
<number>10</number>
</property>
<property name="topMargin">
<number>10</number>
</property>
<property name="rightMargin">
<number>10</number>
</property>
<property name="bottomMargin">
<number>10</number>
</property>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>10</width>
<height>10</height>
...
我尝试通过 addWidget 函数将 GLViewWidget 添加到 QVBoxLayout:
#!/usr/bin/env python2
# ROS imports
import rospkg
import rospy
# QT imports
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile, QObject
import pyqtgraph.opengl as pg
from pyqtgraph.Qt import QtCore
import ros_numpy
class ConfigUi(QObject):
def __init__(self, subscriber, parent=None):
super(ConfigUi, self).__init__(parent)
r = rospkg.RosPack()
pkg_path = r.get_path('config_ui')
ui_file = QFile(pkg_path + '/ui/main_window.ui')
ui_file.open(QFile.ReadOnly)
loader = QUiLoader()
self.subscriber = subscriber
self.window = loader.load(ui_file)
self.gv = self.window.verticalLayout_2
self.w = self.plotWidget()
self.gv.addWidget(self.w)
self.w.show()
def plotWidget(self):
w = pg.GLViewWidget()
w.opts['distance'] = 20
w.setWindowTitle('pyqtgraph example: GLScatterPlotItem')
self.sp3 = pg.GLScatterPlotItem(pos=ros_numpy.point_cloud2.pointcloud2_to_xyz_array(self.subscriber.pc),
color=(1, 1, 1, .3), size=0.01, pxMode=False)
w.addItem(self.sp3)
t = QtCore.QTimer()
t.timeout.connect(self.update)
t.start(50)
return w
def update(self):
pc = ros_numpy.point_cloud2.pointcloud2_to_xyz_array(self.subscriber.pc)
self.sp3.setData(pos=pc)
if __name__ == '__main__':
listener = CameraListner()
app = QApplication(sys.argv)
window = ConfigUi(subscriber)
sys.exit(app.exec_())
开始后我得到错误:
TypeError: 'PySide2.QtWidgets.QBoxLayout.addWidget' called with wrong argument types:
PySide2.QtWidgets.QBoxLayout.addWidget(GLViewWidget)
Supported signatures:
PySide2.QtWidgets.QBoxLayout.addWidget(PySide2.QtWidgets.QWidget, int = 0, PySide2.QtCore.Qt.Alignment = 0)
谢谢你的帮助。
解决方案
我是使用 pyqtgraph 字节的新手,通过首先在 Qt 设计器中放置对象名称为“plotwidget”的 QWidget,成功地在条形图中绘制值列表。然后将此 Qwidget 提升为 pyqtgraph.PlotWidget 类。绘制我的条的代码很简单:
bg = pg.BarGraphItem(x=range(len(value_list)), height=value_list, width=0.8, brush='b')
self.ui.plotwidget.addItem(bg)
我会尝试在 Qt Designer 中将 QWidget 提升为 GLViewWidget,然后像在代码中使用 BarGraphItem 一样添加 GLScatterPlotItem。
我使用 pyqtpgraph 0.11.0rc0 和 Pyside2 5.13.1
推荐阅读
- javascript - 另一个未处理的拒绝(错误):引发了跨域错误
- oracle - kafka connect(oracle)数据表示,对象代替字符串,字节代替数字
- c# - Stacktrace 仅显示错误例程中的第一行并且不完整
- node.js - 如何在移动和 Web 前端使用相同的 nodeJS api
- asp.net - ASP.NET Core AJAX 帖子
- google-apps-script - 谷歌表格根据条件获取特定单元格范围的每日/每周计数总和
- flutter - 在 initState 中调用提供者上下文
- r - 不同页面上的多个图形并另存为pdf
- javascript - 语法错误;导入声明只能出现在模块的顶层
- database - 如何查询特定图形到 RDF 数据库