2011-11-29 120 views
2

我有Python 3.2和PyQt 4.8.6的問題 好像Python 3.2無法找到導入。 尤其是「Q」 - 方法。例如下面的QString。Python 3.2與Qt不兼容?

from PyQt4 import QtCore, QtGui 
try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    _fromUtf8 = lambda s: s 

與Python 2.7一切工作正常。 我的代碼中的錯誤在哪裏?

回答

2

爲了「清理」語言,Python3做了許多不兼容的修改,並且在某種程度上,PyQt通過引入一些API的「更多pythonic」版本來做同樣的事情。但是可以爲Python2 Python3按類別選擇這些不同的API版本,所以唯一真正的區別是爲每個Python版本選擇的默認值。

在Python2中,QString的默認API版本是「v1」,它將其實現爲Python類型;在Python3中,默認值是「v2」,它會自動轉換爲適當的Python字符串對象以及從相應的Python字符串對象中轉換。

可以使用sip軟件包中的setapi函數來選擇API版本。因此,要繼續使用您的應用程序QString類,只要確保appropropriate版本爲先進口PyQt的模塊之前:

import sip 
sip.setapi('QString', 1) 

from PyQt4 import QtCore, QtGui 
try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    _fromUtf8 = lambda s: s 

對於可以這樣設置的所有API的詳細信息,請參閱here

2

看看notes about Python 3 in the PyQt Reference Guide

QString類實現爲自動轉換爲Python字符串或從Python字符串轉換爲 的映射類型。另外一個 沒有被轉換爲空的QString。但是,空QString是 轉換爲空的Python字符串(而不是無)。 (這是因爲 Qt的經常返回一個空的QString時,它可能應該返回一個空 QString的。)

我沒有過到Python 3已經搬了任何代碼,但我相信這個想法是使用正常的Python字符串而不是QStrings。 PyQt將接受它們,並且它們已經支持Python 3中的unicode。通常,PyQt函數將返回一個QString,它將在Python 3下返回一個常規Python字符串。

查看鏈接頁面上的其他差異。