PyQt: новый API с Python 2 - PullRequest
       9

PyQt: новый API с Python 2

6 голосов
/ 04 июня 2011

PyQt имеет два разных API: старый и новый.По умолчанию вы получаете старый API с Python 2 и новый API с Python 3. Возможно ли включить новый API PyQt с Python 2?Как?

Ответы [ 3 ]

13 голосов
/ 15 декабря 2011

Из этого комментария reddit ,

import sip
API_NAMES = ["QDate", "QDateTime", "QString", "QTextStream", "QTime", "QUrl", "QVariant"]
API_VERSION = 2
for name in API_NAMES:
    sip.setapi(name, API_VERSION)
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtSvg import *
from PyQt4.QtCore import pyqtSignal as Signal
from PyQt4.QtCore import pyqtSlot as Slot

(... хотя я бы порекомендовал from PyQt4 import QtCore и т. Д. Вместо import *)

9 голосов
/ 04 июня 2011

Возможно, вы можете попробовать использовать sip.setapi.Простой пример из документов:

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

И список поддерживаемых API:

QDate v1, v2
QDateTime v1, v2
QString v1, v2
QTextStream v1, v2
QTime v1, v2
QUrl v1, v2
QVariant v1, v2
4 голосов
/ 17 октября 2011

Посмотрите на "Несовместимый apis" с берега реки сайт

PyQt обеспечивает ограниченную поддержку нескольких несовместимых API и возможность для приложения выбирать между ними во время выполнения. Например, приложение может выбрать, будет ли QString реализован как тип Python или автоматически преобразован в объект Unicode Python v2 или в строковый объект Python v3.

Эта возможность позволяет разработчикам решать, как управлять переходом от устаревшего устаревшего API к более новому несовместимому API.

Каждый API, который можно выбрать таким образом, имеет имя и диапазон номеров версий. Приложение вызывает sip.setapi (), чтобы установить номер версии конкретного API. Этот вызов должен быть выполнен до импорта любого модуля, который реализует API. После установки номер версии не может быть изменен. Если не установлено, то API будет использовать свою версию по умолчанию.

Например, следующий код отключит использование QString:

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

from PyQt4 import QtCore

# This will raise an attribute exception because QString is only wrapped
# in version 1 of the API.
s = QtCore.QString()

В настоящее время реализованы следующие API:

  • QDate v1, v2
  • QDateTime v1, v2
  • QString v1, v2
  • QTextStream v1, v2
  • QTime v1, v2
  • QUrl v1, v2
  • QVariant v1, v2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...