Python | PyQt5からPyQt6へ移行(QPen編)AttributeError: type object ‘Qt’ has no attribute ‘yellow’

GUI App

pyqtgraphをPyQt5環境からPyQt6環境に移行する際のAttributeError: type object ‘Qt’ has no attribute ‘yellow’の対処方法を説明する。

結論

PyQt5:QPen(QtCore.Qt.色, 太さ)
PyQt6:QPen(QColor(R, G, B), 太さ)

コード例

下記のグラフ表示プログラムを例に説明する。

PyQt5のコード

#!/usr/bin/env python3

import sys
import numpy as np
from PyQt5.QtGui import QPen, QColor
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5 import QtCore
import pyqtgraph as pg


class GuiWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setGeometry(0, 0, 500, 45)
        self.show()
        self.make_xy_data()
        self.plot()

    def make_xy_data(self):
        self.x = range(0, 360)
        self.y = np.zeros(360)
        for i in range(360):
            self.y[i] = np.sin(2 * np.pi * i/360)

    def plot(self):
        pen = QPen(QtCore.Qt.yellow, 0.3)          # ?
        self.graph = pg.GraphicsWindow()
        self.graph.move(11, 93)
        self.p = self.graph.addPlot()
        self.p.plot(x=self.x, y=self.y, pen=pen)
        self.p.showGrid(x=True, y=True)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = GuiWindow()
    sys.exit(app.exec())

PyQt6のコード

#!/usr/bin/env python3

import sys
import numpy as np
from PyQt6.QtGui import QPen, QColor
from PyQt6.QtWidgets import QApplication, QWidget

import pyqtgraph as pg


class GuiWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setGeometry(0, 0, 500, 45)
        self.show()
        self.make_xy_data()
        self.plot()

    def make_xy_data(self):
        self.x = range(0, 360)
        self.y = np.zeros(360)
        for i in range(360):
            self.y[i] = np.sin(2 * np.pi * i/360)

    def plot(self):
        pen = QPen(QColor(255, 255, 0), 0.3)             # ?
        self.graph = pg.GraphicsLayoutWidget(show=True)
        self.graph.move(11, 93)
        self.p = self.graph.addPlot()
        self.p.plot(x=self.x, y=self.y, pen=pen)
        self.p.showGrid(x=True, y=True)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = GuiWindow()
    sys.exit(app.exec())

差分

画像に alt 属性が指定されていません。ファイル名: %E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2022-05-04-9.36.35-1024x645.png

その他、PyQt5からPyQt6への移行方法の基本は下記記事を参照。

まとめ

type object ‘Qt’ has no attribute ‘yellow’の対処方法を説明した。

コメント