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

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



とりあえず実行してみる

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

例外が発生しました: AttributeError
module 'time' has no attribute 'clock'
  File "D:\Python\sample\pyqtgraph_Test\main.py", line 4, in <module>
    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!!!と書いてライブラリのコードを修正しました。それで最初のコードを実行してみると無事に実行できました。

ソースコード

# -*- coding: utf-8 -*-
import sys
from PyQt5 import QtWidgets
import pyqtgraph as pg

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        
        self.centralwidget = QtWidgets.QWidget()
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)

        self.graph_widget = pg.PlotWidget(self)

        self.setCentralWidget(self.graph_widget)

        self.resize(600,600)

def main():
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec()

if __name__ == '__main__':
    main()

コメント

タイトルとURLをコピーしました