とりあえずこれを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)
self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.graph01 = pg.PlotWidget(self.centralwidget)
self.graph01.setObjectName("graph01")
self.verticalLayout.addWidget(self.graph01)
self.psbtn = QtGui.QPushButton(self.centralwidget)
self.psbtn.setObjectName("psbtn")
self.psbtn.setText("Plot")
self.verticalLayout.addWidget(self.psbtn)
QtCore.QObject.connect(self.psbtn, QtCore.SIGNAL("clicked()"), self.plot)
def plot(self):
frq = 10.0
duration = 1.0
samples = 1001
x = np.linspace(0, duration, samples)
rad = np.linspace(0, 2 * np.pi * frq, samples)
y = np.sin(rad)
self.graph01.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_())
こうなる
最初の二行を入れ替えると
つまりこの順番だと
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件)