6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python Pysideで、PyQtGraphを使用する際は、importする順番に注意

Posted at

#とりあえずこれをim.pyとして保存し、実行する。

from PySide import QtCore, QtGui
import pyqtgraph as pg
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
    <span style="color: #008000">self</span><span style="color: #666666">.</span>verticalLayout <span style="color: #666666">=</span> QtGui<span style="color: #666666">.</span>QVBoxLayout(<span style="color: #008000">self</span><span style="color: #666666">.</span>centralwidget)
    <span style="color: #008000">self</span><span style="color: #666666">.</span>verticalLayout<span style="color: #666666">.</span>setObjectName(<span style="color: #BA2121">&quot;verticalLayout&quot;</span>)

    <span style="color: #008000">self</span><span style="color: #666666">.</span>graph01 <span style="color: #666666">=</span> pg<span style="color: #666666">.</span>PlotWidget(<span style="color: #008000">self</span><span style="color: #666666">.</span>centralwidget)
    <span style="color: #008000">self</span><span style="color: #666666">.</span>graph01<span style="color: #666666">.</span>setObjectName(<span style="color: #BA2121">&quot;graph01&quot;</span>)
    <span style="color: #008000">self</span><span style="color: #666666">.</span>verticalLayout<span style="color: #666666">.</span>addWidget(<span style="color: #008000">self</span><span style="color: #666666">.</span>graph01)
    
    <span style="color: #008000">self</span><span style="color: #666666">.</span>psbtn <span style="color: #666666">=</span> QtGui<span style="color: #666666">.</span>QPushButton(<span style="color: #008000">self</span><span style="color: #666666">.</span>centralwidget)
    <span style="color: #008000">self</span><span style="color: #666666">.</span>psbtn<span style="color: #666666">.</span>setObjectName(<span style="color: #BA2121">&quot;psbtn&quot;</span>)
    <span style="color: #008000">self</span><span style="color: #666666">.</span>psbtn<span style="color: #666666">.</span>setText(<span style="color: #BA2121">&quot;Plot&quot;</span>)
    <span style="color: #008000">self</span><span style="color: #666666">.</span>verticalLayout<span style="color: #666666">.</span>addWidget(<span style="color: #008000">self</span><span style="color: #666666">.</span>psbtn)

    QtCore<span style="color: #666666">.</span>QObject<span style="color: #666666">.</span>connect(<span style="color: #008000">self</span><span style="color: #666666">.</span>psbtn, QtCore<span style="color: #666666">.</span>SIGNAL(<span style="color: #BA2121">&quot;clicked()&quot;</span>), <span style="color: #008000">self</span><span style="color: #666666">.</span>plot)
    

<span style="color: #008000; font-weight: bold">def</span> <span style="color: #0000FF">plot</span>(<span style="color: #008000">self</span>):
    frq <span style="color: #666666">=</span> <span style="color: #666666">10.0</span>
    duration <span style="color: #666666">=</span> <span style="color: #666666">1.0</span>
    samples <span style="color: #666666">=</span> <span style="color: #666666">1001</span>
    x <span style="color: #666666">=</span> np<span style="color: #666666">.</span>linspace(<span style="color: #666666">0</span>, duration, samples)
    rad <span style="color: #666666">=</span> np<span style="color: #666666">.</span>linspace(<span style="color: #666666">0</span>, <span style="color: #666666">2</span> <span style="color: #666666">*</span> np<span style="color: #666666">.</span>pi <span style="color: #666666">*</span> frq, samples)
    y <span style="color: #666666">=</span> np<span style="color: #666666">.</span>sin(rad)
    <span style="color: #008000">self</span><span style="color: #666666">.</span>graph01<span style="color: #666666">.</span>plot(x, y)

import sys
import numpy as np
pg.setConfigOption('foreground', 'k')
pg.setConfigOption('background', 'w')
class ControlMainWindow(QtGui.QMainWindow):
def init(self, parent=None):
super(ControlMainWindow, self).init(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
if name == "main":
app = QtGui.QApplication(sys.argv)
mySW = ControlMainWindow()#class no instance-ka
mySW.show()
sys.exit(app.exec_())

#こうなる
Screenshot from 2016-08-22 11-11-38.png

#最初の二行を入れ替えると
つまりこの順番だと

import pyqtgraph as pg
from PySide import QtCore, QtGui
エラー起きる。 TypeError: arguments did not match any overloaded call: QGraphicsView(QWidget parent=None): argument 1 has unexpected type 'PySide.QtGui.QWidget' QGraphicsView(QGraphicsScene, QWidget parent=None): argument 1 has unexpected type 'PySide.QtGui.QWidget'

#理由はここに書いてありました
http://www.pyqtgraph.org/documentation/how_to_use.html#pyqt-and-pyside
多分訳になっているはず。

PyQt と PySide

PyQtGraphは、二つのポピュラーなQTライブラリ用のPythonラッパー、PyQtと、PySideをサポートしています。
両パッケージ共に、ほとんど同一のAPI、関数を提供していますが、様々な理由から、どちらか一方を選んで使用すると思います。
pyqtgraphが最初にimportされたとき、pyqtgraphは、次のチェック項目により、どちらのライブラリを使用するかを自動的に決定します。

1 もし、PyQt4が既にimportされているなら、それを使い、
2 そうでなければ、PySideが既にimportされていれば、それを使い、
3 そうでなければ、PyQt4のimportを試みようとし、
4 もし、PyQt4のimportが失敗したら、PySideのimportを試みます。

もし、あなたのシステムに、PyQt4とPySideの両方のライブラリがインストールされていて、どちらか一方でpyqtgraphを使いたいのであれば、単純に、pyqtgraphをimportする前に、そのライブラリをimportするようにしてください。

import PySide ## this will force pyqtgraph to use PySide instead of PyQt4
import pyqtgraph as pg

先ほどのエラー、
argument 1 has unexpected type 'PySide.QtGui.QWidget'は、

self.graph01 = pg.PlotWidget(self.centralwidget)の行で、pyqtgraph.PlotWidgetは、引数にPyQtの何かを入れてもらうつもりだった

'PySide.QtGui.QWidget'が入ってきた。
引数1は想定外の型'PySide.QtGui.QWidget'を持っています。
という状態だと思う。
#PyQtGraph
Pythonでプロットするための、ライブラリ。
http://www.pyqtgraph.org/

#Matplotlibじゃだめなの?
だめじゃない。
Matplotlibは、Pythonでプロットするためのスタンダードなライブラリ。
けどPyQtGraphの方が早い。
http://yukara-13.hatenablog.com/entry/2013/12/05/025655

#PySideとPyQt
PythonでQtを使って、GUIを作りたいなら、この二つから選ぶと思う。
ライセンスに、LGPLとGPLの違いがある。
PySide・・・LGPL。あまり使っている人がいないのか、ネット上に情報少ない気がする。(google検索すると、約 214,000 件)
PyQt・・・GPL。コピーレフト。ユーザーの数は検索結果に現れる気がする。(google検索 667,000件)

6
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?