PyQt 또는 PySide-사용할 항목
나는 약간의 파이썬을 배우기 시작했고 이제는 gui-building으로 약간의 장난감을 만들고 싶습니다. Qt는 크로스 플랫폼 성 때문에 좋은 선택 인 것 같습니다.
이제 사용 가능한 두 가지 바인딩이있는 것 같습니다. Riverbank Computing의 PyQt와 Nokia가 원래 개발 한 PySide입니다.
그래서 어느 것을 선택해야합니까? 내가 찾을 수있는 것은 2 년 된 기능 비교 뿐이지 만 요즘에는 어떤 차이점이 있습니까?
어느 것이 사용하기 쉽고 더 많은 / 더 나은 문서가 있습니까? 둘 다 아직 개발 중입니까?
상용 응용 프로그램을 작성할 생각이 없기 때문에 라이선스는 나에게별로 중요하지 않습니다.
두 툴킷 모두 적극적으로 유지 관리되고 있으며 기능과 품질이 어느 정도 동일합니다. 중요하지 않은 차이점은 거의 없습니다.
그래도 Python 2 용 PySide를 권장합니다. 더 합리적인 API가 있습니다. 주로 Qt 유형을 노출하지 않습니다. 주로 Python에서 직접 동등하거나 (예 : QString, QList 등) 또는 다음으로 인해 완전히 불필요합니다. QVariant와 같은 Python의 동적 특성. 이렇게하면 Qt 유형과의 지루한 변환이 많이 방지되므로 프로그래밍이 쉬워지고 많은 오류가 방지됩니다.
PyQt는이 최신 API도 지원하며 기본적으로 Python 3에서 사용하지만 이전 버전과의 호환성을 유지하기 위해 Python 2에서는 사용하지 않습니다.
라이센스 차이도 있습니다. PySide는 LGPL이고 PyQt는 GPL입니다. 프로젝트를 오픈 소스로 만들고 싶지 않다면 차이를 만들 수 있습니다. PyQt는 항상 상당히 합리적인 가격에 적절한 버전을 제공합니다.
나는 PySide 문서가 더 직관적 인 경향이 있습니다. 제 생각에 API는 약간 더 Pythonic이며 버그 수정 속도는 현재 상당히 인상적입니다.
PyQt는 Python 3 지원 및 현직이라는 이점이 있습니다. 더 많은 타사 문서 / 튜토리얼이 있습니다.
최근에 PyQt에서 PySide로 중요한 코드베이스 (8,000 줄 이상의 코드)를 이식했습니다.
지금 당장은 PyQt가 훨씬 더 성숙하고 성능이 뛰어나고 안정적인 프로젝트라고 말하고 싶습니다. 나는 PySide에서 많은 버그를 발견했고 큰 프로젝트가 문제가 될 것이라고 의심합니다. 그렇게 말하면서 나는 프로젝트에 버그를보고했고 몇 주 안에 새로운 릴리스로 수정되었습니다. 앱이 종료되는 데 약 15 초가 걸리는 문제도 있습니다. 나는 아직 그 이유를 알아 내기 위해 시간을 투자하지 않았습니다. 그러나 PySide 대신 PyQt를 선택할 이유가없는 것은 시간 문제 일뿐입니다.
당분간 PyQt를 사용하기로 결정했다면 API v2를 전체적으로 사용해야합니다. 더 나은 API이며 향후 PySide로 쉽게 전환 할 수 있습니다. 또한 포팅을한다면 PySide 위키의 지침을 따르십시오. 약 20 개의 소스 파일로 구성된 8+ kloc 앱의 경우에도 오후 시간이 걸렸습니다.
중요한 사실은 PyQt4에는 몇 가지 사항에 대해 두 가지 버전의 API가 있다는 것입니다. 버전 1 항목을 사용하여 같은 일을하다 QString대신 unicode하고, QVariant대신 포장 - (나는 실제로 그것을 사용 아무것도 해본 적이 없다 기본적으로 그냥 래퍼, 저는 믿습니다). PyQt4이있다; PySide가 너무이지만, 분명히 더 나은 점점 그들과 함께 일부 남아있는 호환성 문제는 여전히있다 - 파이썬 2에서 사용할 수 있으며, 파이썬 3에서 사용 가능 버전 2는 여러 곳에서 훨씬 더 (하지만 여전히 unpythonic입니다. QtCore.pyqt(Signal|Slot|Property), PySide에는 QtCore.(Signal|Slot|Property).
내 프로젝트의 경우 코드를 변경하지 않고 둘 다 지원하기로 결정했습니다. 저는 PySide를 선호하지만 Windows에서는 PyQt4로 배포합니다. 현재 배포 용으로는 상당히 작습니다. 내 해결책은 PySide를 확인하고 거기에있는 경우 가져 오기 후크를 삽입하여 PyQt4 가져 오기를 PySide로 리디렉션하거나 그렇지 않은 경우 PyQt4가 정상적으로 작동하도록 수정하는 것입니다.
사용 된 파일 :
- pyqt4pysideimporter.py
- zip_imp.py (py2exe 지원용)
- make_gui.py (pyside 또는 pyqt4 도구를 사용하여 .ui 파일 및 .qrc 파일을 빌드하고 일관되게 가져 오기를 수정하는 스크립트; 파일 변경 사항을 폴링하고 변경된 사항을 다시 빌드합니다. inotify와 같은 하이테크는 없습니다)
그런 다음 ( 그 저장소 에서 import pyqt4pysideimporter와 pyqt4pysideimporter.autoselect()같이 main.py). 그 후에는 import PyQt4.
곁에 : 또한 며칠 전 PySide 메일 링리스트에 그들이 앞으로 몇 달 안에 파이썬 3을 완전히 지원할 계획이라고 언급했습니다.
Qt / C ++ 클래스에 대한 인터페이스는 비슷할 수 있지만 신호 / 슬롯 / 속성 같은 Qt / C ++ 매크로에 대한 인터페이스는 매우 다릅니다. 서로 포팅하는 것은 쉬운 일이 아닙니다. 처음에 올바른 결정을 내리는 것이 좋습니다.
문법 / 라이선스 차이 외에도 Python으로 QML 프로젝트를 작성하는 데 필수적 일 수있는 언어 바인딩에서 PyQt의 일부 결함을 지적하고 싶습니다. 이러한 차이점은 결국 나를 PyQt에서 PySide로 밀어 붙입니다.
qmlRegisterType
qmlRegisterType은 QML로 런타임 C ++ 바인딩을 생성하는 데 필수적입니다. PySide에서는 PySide.QtDeclarative의 일부입니다. 그리고 이것은 파이썬에서 꽤 잘 작동합니다.
PyQt에는 qmlRegisterType이 없습니다. 그리고 나는 대안을 찾을 수 없었습니다. QML 컨텍스트를 설정하여 간단한 작업을 수행 할 수 있다는 것을 알고 있습니다. 그러나 qmlRegister 및 Q_INVOKABLE을 사용한 런타임 바인딩이 정말로 필요한 경우 PySide가 현재 유일한 선택이라고 생각합니다.
Shiboken VS SIP
둘 다 Qt / C ++를 python 플러그인으로 래핑 할 수 있습니다. Shiboken의 경우 더 간단하고 코딩이 덜 필요하다고 생각합니다. 내보내려는 클래스 의 이름을 포함하는 typesystem xml을 생성하기 만하면 됩니다. Shiboken은 대상 클래스의 구조에 대한 추가 수동 설명이 필요하지 않습니다.
SIP의 경우 더 많은 추가 코딩이 필요합니다. C ++ 헤더의 모든 것을 거의 다시 구현하는 SIP 파일을 만들어야합니다. 클래스 의 NAME 뿐만 아니라 대상 클래스 에있는 메소드 의 세부 사항 도 필요합니다. C ++ 클래스가 Pimp를 사용하여 좋은 디자인에 있고 그 안에있는 모든 메서드를 내보내려는 경우 SIP는 현재 불가능한 모든 클래스 메서드를 자동으로 내보내는 방법을 제공해야합니다. 이는 또한 SIP와 C ++ 헤더 간의 일관성 유지에 대한 부담을 추가합니다.
그러나 Qt 위키의 Shiboken에 대한 문서는 매우 나쁘고 오해의 소지가 있다고 말해야합니다. Windows에서 Shiboken으로 Python 플러그인을 생성하는 데 반드시 CMake 가 필요한 것은 아닙니다 . generatorrunner 도 필요하지 않습니다. Windows cmd 스크립트를 사용하여 shiboken을 호출하고 qmake pro를 대상 플러그인을 컴파일합니다.
PySide로 변환하는 데 실패한 20k 라인 Python 앱이 있습니다. 변환은 쉽고 대부분의 기능이 작동합니다. '더 이상 사용되지 않는다'는 이유로 구현되지 않은 메서드가 몇 가지 있으므로 수정해야했습니다. 괜찮 았습니다. Windows에서 PySide-1.1.2를 사용하면 '=='연산자가 많은 Qt 객체에 대해 구현되지 않습니다. 한 가지 해결 방법은 "if id (item1) == id (item2) :"라고 말하는 것입니다. 다른 관찰은 PySide가 눈에 띄게 느려 보였습니다. 속도 저하의 원인으로 PySide를 분리하지 않았지만 PyQt로 되 돌리면 문제가 사라졌습니다.
마지막으로 현재로서는 PySide가 포함 된 Android 키트가 황금 시간대에 준비되지 않은 것 같습니다.
참고 URL : https://stackoverflow.com/questions/6888750/pyqt-or-pyside-which-one-to-use
'Nice programing' 카테고리의 다른 글
| 파일> 새 MVC 3 프로젝트의 새로운 "HTML5 의미 마크 업 사용"옵션 (0) | 2020.11.08 |
|---|---|
| grep 및 sed를 사용하여 문자열 찾기 및 바꾸기 (0) | 2020.11.08 |
| 파이썬 파일을 실행할 때 어떻게 독 스트링을 인쇄 할 수 있습니까? (0) | 2020.11.08 |
| Task에서 예외를 포착하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.08 |
| golang에서 맵에서 값 조각을 얻는 좋은 방법이 있습니까? (0) | 2020.11.08 |