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

GUI App

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

結論

PyQt5:QtCore.QEvent.Enter:
PyQt6:QtCore.QEvent.Type.Enter:

コード例

下記アプリを例に説明する。

PyQt5のコード

#!/usr/bin/env python3

from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QPushButton)
from PyQt5 import QtCore
import sys


class GuiWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.build_ui()
        self.show()

    def build_ui(self):
        self.ラベル = QLabel('', self)
        self.ラベル.setGeometry(30,40,200,30)

        self.カスガ = QPushButton('カスガ', self)
        self.カスガ.setGeometry(30,100,100,30)
        self.カスガ.installEventFilter(self)

        self.よしお = QPushButton('よしお', self)
        self.よしお.setGeometry(160,100,100,30)
        self.よしお.installEventFilter(self)

        self.カスガ.clicked.connect(self.clicked_kasuga)
        self.よしお.clicked.connect(self.clicked_yoshio)

    def clicked_kasuga(self):
        self.ラベル.setText('アパ〜〜〜〜〜〜〜')

    def clicked_yoshio(self):
        self.ラベル.setText('ウィ〜〜〜〜〜〜〜')

    def eventFilter(self, object, event):
        if object == self.カスガ:
            if event.type() == QtCore.QEvent.Enter:       # ?
                self.ラベル.setText('トゥース!')
            elif event.type() == QtCore.QEvent.Leave:     # ?
                self.ラベル.setText('')

        if object == self.よしお:
            if event.type() == QtCore.QEvent.Enter:       # ?
                self.ラベル.setText('ピ~ヤ!')
            elif event.type() == QtCore.QEvent.Leave:     # ?
                self.ラベル.setText('')

        if event.type() == QtCore.QEvent.Leave:           # ?
            self.ラベル.setText('')
        return False


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

PyQt6のコード

#!/usr/bin/env python3

from PyQt6.QtWidgets import (QApplication, QWidget, QLabel, QPushButton)
from PyQt6 import QtCore
import sys


class GuiWindow(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.build_ui()
        self.show()

    def build_ui(self):
        self.ラベル = QLabel('', self)
        self.ラベル.setGeometry(30,40,200,30)

        self.カスガ = QPushButton('カスガ', self)
        self.カスガ.setGeometry(30,100,100,30)
        self.カスガ.installEventFilter(self)

        self.よしお = QPushButton('よしお', self)
        self.よしお.setGeometry(160,100,100,30)
        self.よしお.installEventFilter(self)

        self.カスガ.clicked.connect(self.clicked_kasuga)
        self.よしお.clicked.connect(self.clicked_yoshio)

    def clicked_kasuga(self):
        self.ラベル.setText('アパ〜〜〜〜〜〜〜')

    def clicked_yoshio(self):
        self.ラベル.setText('ウィ〜〜〜〜〜〜〜')

    def eventFilter(self, object, event):
        if object == self.カスガ:
            if event.type() == QtCore.QEvent.Type.Enter:       # ?
                self.ラベル.setText('トゥース!')
            elif event.type() == QtCore.QEvent.Type.Leave:     # ?
                self.ラベル.setText('')

        if object == self.よしお:
            if event.type() == QtCore.QEvent.Type.Enter:       # ?
                self.ラベル.setText('ピ~ヤ!')
            elif event.type() == QtCore.QEvent.Type.Leave:     # ?
                self.ラベル.setText('')

        if event.type() == QtCore.QEvent.Type.Leave:           # ?
            self.ラベル.setText('')
        return False


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

まとめ

‘QEvent’ has no attribute ‘Enter’の対処方法を説明した。

コメント