首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PySide文档示例不适用于PySide

PySide文档示例不适用于PySide
EN

Stack Overflow用户
提问于 2015-08-17 15:31:28
回答 2查看 1.8K关注 0票数 4

我开始用比例尺了。我试着运行下面的示例代码,但是它给出了一个错误。这个示例代码来自文档中的此页。我所做的唯一改变是从PySide导入PySide,而不是从PyQt4导入,这些注释明确地说,PyQt4应该可以工作。

问题如何修复此错误?我是不是用错了什么东西?这是PySide中的一个bug吗?

注意:我知道我可以使用PyQt4而不是PySide,但这对我来说不是一个有效的解决办法,原因有几个(包括许可和加入PySide潮流的愿望)。

我知道的关于错误的

  • 如果我从QtGui中导入PyQt4,则该示例运行良好。
  • 抱怨之处似乎是,我试图使用PlotWidget的addWidget方法向QGridLayout添加一个QWidget,但只允许使用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版本编译的。

要修复的错误

代码语言:javascript
复制
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)

产生此错误的代码

代码语言:javascript
复制
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_()
EN

回答 2

Stack Overflow用户

发布于 2015-08-17 16:43:02

可能正在发生的事情是,pyqtgraph不使用不可知的导入,而是使用特定的PyQt导入并创建类型小部件:

PyQt.QtGui.QWidget

而不是

PySide.QtGui.QWidget

您可能需要进入pyqtgraph的源代码并将其导入更改为与您的导入相匹配。

同时支持PySide和PyQt

在本页底部:

PyQt

它讨论了如何使您的代码对pyside about导入更加不可知。要么使用py_compat.py,要么构建/安装一个名为python_qt_binding的中间件加载程序,然后将所有的标题更改为使用中性的标题。

票数 1
EN

Stack Overflow用户

发布于 2016-11-11 12:21:23

我也遇到了同样的问题,并无意中指责此链接

显然你需要

如果您的系统上安装了这两个库,并且希望强制pyqtgraph使用其中一个库,只需确保它在pyqtgraph之前导入:

就像这样:

代码语言:javascript
复制
import PySide  ## this will force pyqtgraph to use PySide instead of PyQt4
import pyqtgraph as pg

这解决了我的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32054237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档