Python | PyQt5からPyQt6へ移行(QComboBox編)KeyError: ‘there is no matching overloaded signal’

GUI App

Python PyQt5環境からPyQt6環境に移行する際のKeyError: ‘there is no matching overloaded signal’の対処方法を説明する。

結論

PyQt5:.activated[str].connect(self.onActivated)
PyQt6:.textActivated[str].connect(self.onActivated)

コード例

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

PyQt5のコード

#!/usr/bin/env python3

import os
from PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QComboBox)
import sys


class GuiWindow(QWidget):

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

    def buidl_ui(self):
        self.label_q = QLabel('誰を選びますか?', self)
        self.label_q.setGeometry(10,20,250,30)

        self.label_a = QLabel('', self)
        self.label_a.setGeometry(10,100,250,30)

        self.qcb = QComboBox(self)
        self.qcb.setGeometry(10,60,250,30)
        self.qcb.addItem(" ")
        self.qcb.addItem(" ビアンカ")
        self.qcb.addItem(" フローラ")
        self.qcb.addItem(" いしかわりか")
        self.qcb.activated[str].connect(self.onActivated)  # ?

    def onActivated(self, text):
        self.label_a.setText('あなたは ' + text + ' を選びました。')


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

PyQt6のコード

#!/usr/bin/env python3

import os
from PyQt6.QtWidgets import (QApplication, QWidget, QLabel, QComboBox)
import sys


class GuiWindow(QWidget):

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

    def buidl_ui(self):
        self.label_q = QLabel('誰を選びますか?', self)
        self.label_q.setGeometry(10,20,250,30)

        self.label_a = QLabel('', self)
        self.label_a.setGeometry(10,100,250,30)

        self.qcb = QComboBox(self)
        self.qcb.setGeometry(10,60,250,30)
        self.qcb.addItem(" ")
        self.qcb.addItem(" ビアンカ")
        self.qcb.addItem(" フローラ")
        self.qcb.addItem(" いしかわりか")
        self.qcb.textActivated[str].connect(self.onActivated)  # ?

    def onActivated(self, text):
        self.label_a.setText('あなたは ' + text + ' を選びました。')


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

まとめ

‘there is no matching overloaded signal’の対処方法を説明した。

コメント