Python 2で期待どおりに機能するコード(以下を参照)がありますが、Python 3で実行すると、例外が発生します。
Traceback (most recent call last):
File "./test3.py", line 23, in <module>
programsComboBox.addItem("Jan Novak",QtCore.QVariant("661107/3939"))
TypeError: PyQt4.QtCore.QVariant represents a mapped type and cannot be instantiated
これはなぜですか、回避策はありますか?
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys
def activated(i):
data=programsComboBox.itemData(i)
label.setText("Rodne cislo: "+data.toString())
app = QtGui.QApplication(sys.argv)
mainWindow = QtGui.QMainWindow()
mainWindow.setWindowTitle("QVariant")
mainWidget=QtGui.QWidget(mainWindow)
mainWindow.setCentralWidget(mainWidget)
layout=QtGui.QVBoxLayout(mainWidget)
label=QtGui.QLabel("Rodne cislo: ",mainWidget)
programsComboBox=QtGui.QComboBox(mainWidget)
programsComboBox.addItem("Jan Novak",QtCore.QVariant("661107/3939"))
programsComboBox.addItem("Jakub Dvorak",QtCore.QVariant("750802/1278"))
layout.addWidget(programsComboBox)
layout.addWidget(label)
app.connect(programsComboBox,QtCore.SIGNAL("activated (int)"),activated)
mainWindow.show()
sys.exit(app.exec_())
更新:この単純なコードの場合、最初のPyQt4インポートの前にこれらを追加するだけで十分です。
import sip
sip.setapi('QVariant', 1)
しかし、実際のコードではそれを行うことはできません(別の場所QVariant
でapi2が必要です)。