qpython2和3_python-3.x – QComboBox中的QVariant(Python 2与Python 3)

我有一些代码(见下文)在

Python 2下按预期工作,但是当我在Python 3下执行它时会引发异常:

Traceback (most recent call last):

File "./test3.py", line 23, in

programsCombo­Box.addItem("Jan Novak",QtCore­.QVariant("661107/39­39"))

TypeError: PyQt4.QtCore.QVa­riant 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).

最佳答案 你有什么理由要使用QVariant吗?

如果您将项目添加为字符串:

programsComboBox.addItem("Jan Novak", "661107/3939")

然后代码应该在Python 2和3中工作.

我自己不使用Python 3,因此无法对此进行测试,但修改在Python 2.7上运行良好.

编辑:

我很好奇,所以我在使用Python 3.2的VM中测试了这个.似乎.itemData()将返回一个字符串对象而不是Python 3中的QVariant.

除了在上面添加项目时使用字符串,您还可以将激活的函数修改为:

def activated(i):

data=programsComboBox.itemData(i)

if not isinstance(data, str):

data = data.toString()

label.setText("Rodne cislo: " +data)

因此它可以与Python 2和3一起使用.如果.itemData()的返回不是字符串,那么该函数将使用.toString()转换为字符串.

我不确定这是不是正确的方法,但它对我有用.我仍然需要正确地研究整个2到3的移植事物.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值