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’の対処方法を説明した。
コメント