我开始使用 pyqtgraph。我尝试运行下面的示例代码,但它给出了一个错误。此示例代码来自 this page在文档中。我所做的唯一更改是从 PySide 而不是 PyQt4 导入 QtGui,评论明确表示应该可以。
问题 我该如何解决这个错误?我使用的是错误的版本吗?这是 PySide 中的错误吗?
注意:我知道我可以使用 PyQt4 而不是 PySide,但这对我来说不是一个有效的解决方法,原因有几个(许可和加入 PySide 潮流的愿望)。
我对错误的了解
- 如果我从 PyQt4 导入 QtGui,该示例将完美运行
- 投诉似乎是我试图将 PlotWidget 添加到 QGridLayout,使用它的 addWidget 方法,但只允许 QWidget 对象。这是没有意义的,因为 AFAIK PlotWidget 是 QWidget 的后代。我猜这是包装底层 Qt 库的问题?
- 使用:
- Ubuntu 14.04
- PySide 1.2.1
PySide.QtCore.qVersion
给出“4.8.6”PySide.QtCore.__version__
也是“4.8.6”,这意味着 PySide 是使用我正在使用的相同 Qt 版本编译的。
要修复的错误:
Traceback (most recent call last):
File "<some file I made>", line 133, in <module>
testPlot0()
File "<some file I made>", line 52, in testPlot0
layout.addWidget(plot, 0, 1, 3, 1) # plot goes on right side, spanning 3 rows
TypeError: 'PySide.QtGui.QGridLayout.addWidget' called with wrong argument types:
PySide.QtGui.QGridLayout.addWidget(PlotWidget, int, int, int, int)
Supported signatures:
PySide.QtGui.QGridLayout.addWidget(PySide.QtGui.QWidget, int, int, PySide.QtCore.Qt.Alignment = 0)
PySide.QtGui.QGridLayout.addWidget(PySide.QtGui.QWidget, int, int, int, int, PySide.QtCore.Qt.Alignment = 0)
PySide.QtGui.QGridLayout.addWidget(PySide.QtGui.QWidget)
产生此错误的代码
from PySide import QtGui # (the example applies equally well to PySide)
import pyqtgraph as pg
## Always start by initializing Qt (only once per application)
app = QtGui.QApplication([])
## Define a top-level widget to hold everything
w = QtGui.QWidget()
## Create some widgets to be placed inside
btn = QtGui.QPushButton('press me')
text = QtGui.QLineEdit('enter text')
listw = QtGui.QListWidget()
plot = pg.PlotWidget()
## Create a grid layout to manage the widgets size and position
layout = QtGui.QGridLayout()
w.setLayout(layout)
## Add widgets to the layout in their proper positions
layout.addWidget(btn, 0, 0) # button goes in upper-left
layout.addWidget(text, 1, 0) # text edit goes in middle-left
layout.addWidget(listw, 2, 0) # list widget goes in bottom-left
layout.addWidget(plot, 0, 1, 3, 1) # plot goes on right side, spanning 3 rows
## Display the widget as a new window
w.show()
## Start the Qt event loop
app.exec_()
最佳答案
可能发生的事情是 pyqtgraph 不使用不可知的导入,而是使用特定的 PyQt 导入并创建类型小部件:
PyQt.QtGui.QWidget
代替
PySide.QtGui.QWidget
您可能需要进入 pyqtgraph 的源代码并更改其导入以匹配您的导入。
同时支持PySide和PyQt
在此页面的底部:
https://wiki.qt.io/Differences_Between_PySide_and_PyQt
它讨论了如何使您的代码对 pyside v pyqt 导入更加不可知...使用 py_compat.py
或构建/安装名为 python_qt_binding
的中间件加载器,然后更改所有 header 以使用中性 header 。
关于python - pyqtgraph 文档示例不适用于 PySide,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054237/