Python 3.8.2でPyQtGraphを使った場合のエラーを回避する

Share on:

Pythonでグラフを描いてみたくて、いつもPyQt5を使ってGUIを作っているということもあり、PyQtGraphを使ってグラフを描いてみました。

とりあえず実行してみる

PyQt5のQMainWindowにpyqtgparh.PlotWidget()を追加して表示してみると下記のようなエラーが出ました。

1例外が発生しました: AttributeError
2module 'time' has no attribute 'clock'
3  File "D:\Python\sample\pyqtgraph_Test\main.py", line 4, in <module>
4    import pyqtgraph as pg

timeモジュールにはclockはありませんよ、という例外のようです。4行目のimport pyqtgraphでエラーが発生しているのでpyqtgraph内でtime.clock()という関数を使っているのだろうと推測できます。

PyQtGraphのライブラリをPython3.8.2用に修正する

time.clock()が無いと言われたのでpyqtgraphのフォルダ内でtime.clockと検索してみました。

ptime.pyにsystime.clock()というコードが見つかりました。おそらくこのコードがエラーを吐いているコードでしょう。そこで、なぜtime.clock()が無いと言われるのかググってみるとpython3.3以降ではtime.clock()は廃止されたということがわかりました。

この関数time.clock()は、Python 3.3以降廃止された後、削除されました。要件に応じて、代わりにを使用するtime.perf_counter()かtime.process_time()、明確に定義された動作を実行してください

今回の環境はpython3.8.2なのでエラーを吐いていたのでしょう。どっちが良いかは調べていませんが、とりあえずtime.process_time()と書き換えてみました。

modified!!!と書いてライブラリのコードを修正しました。それで最初のコードを実行してみると無事に実行できました。

ソースコード

 1# -*- coding: utf-8 -*-
 2import sys
 3from PyQt5 import QtWidgets
 4import pyqtgraph as pg
 5
 6class MainWindow(QtWidgets.QMainWindow):
 7    def __init__(self, parent=None):
 8        super(MainWindow, self).__init__(parent)
 9        
10        self.centralwidget = QtWidgets.QWidget()
11        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
12
13        self.graph_widget = pg.PlotWidget(self)
14
15        self.setCentralWidget(self.graph_widget)
16
17        self.resize(600,600)
18
19def main():
20    app = QtWidgets.QApplication(sys.argv)
21    window = MainWindow()
22    window.show()
23    app.exec()
24
25if __name__ == '__main__':
26    main()

関連記事