2011-11-29 4 views
2

나는 파이썬 3.2와 PyQt 4.8.6에 문제가있다. 마치 파이썬 3.2가 가져 오기를 찾을 수없는 것처럼 보인다. 특히 "Q"- 방법. 아래 QString 예를 들어.Python 3.2와 Qt가 호환되지 않습니까?

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

파이썬 2.7에서는 모든 것이 정상적으로 작동합니다. 내 코드에서 실수는 어디에서 발생합니까?

답변

2

Python3은 언어를 "정리"하기 위해 많은 양립 불가능한 변경을했으며, PyQt는 일부 API의 "더 pythonic"버전을 도입하여 동일하게 수행했습니다. 그러나이 다른 API 버전은 Python2 Python3 모두에 대해 클래스별로 선택할 수 있으므로 유일한 차이점은 각 Python 버전에 대해 기본값이 선택된다는 것입니다.

Python2에서 QString의 기본 API 버전은 "v1"이며 파이썬 유형으로 구현됩니다. Python3에서 기본값은 적절한 Python 문자열 객체로 자동으로 변환되는 "v2"입니다.

sip 패키지의 setapi 기능을 사용하여 API 버전을 선택할 수 있습니다. 따라서 PyQt는 모듈이 처음으로 가져 오기 전에 바로 확인 appropropriate 버전이 설정되어 있는지 확인, 응용 프로그램에서 QString 클래스를 사용하여 계속이 방법을 설정할 수있는 모든 API에 대한 자세한 내용

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

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

here를 참조하십시오.

2

notes about Python 3 in the PyQt Reference Guide을 살펴보십시오.

QString 클래스는 이 자동으로 파이썬 문자열로 변환되는 매핑 된 유형으로 구현됩니다. 또한 없음은 null QString로 변환됩니다. 그러나 null QString은 빈 파이썬 문자열 (None이 아닌)으로 변환 된 입니다. 나는 아직 파이썬 3를 통해 코드를 이동하지했습니다

( Qt는 종종 그것이 아마 빈 QString를 반환해야 널 QString를 반환하기 때문입니다.),하지만 난 생각이 사용하는 것입니다 믿습니다 QString 대신 일반 파이썬 문자열. PyQt는 그것들을 받아 들일 것이고 파이썬 3에서 이미 유니 코드를 지원합니다. 보통 PyQt 함수가 QString을 반환하면 파이썬 3에서 일반 파이썬 문자열을 반환합니다.

링크 된 페이지의 다른 차이점을 살펴보십시오.

관련 문제