한국어
Qt
 

[Qt News] Qt for Python을 위한 기술 비전 (Technical vision for 'Qt for Python')

이전의 Qt의 다음 주요 릴리스의 비전(vision)과 관련된 이전 게시물 이후, 우리는 Qt for Python 스토리를 설명하는 단락으로는 향후 릴리스(release)에 대해 고려한 모든 기능과 변경 사항을 공유하기에 충분하지 않다고 생각했습니다.

Qt 6 로의 전환

Qt와 같은 거대한 프레임 워크를 다른 언어로 노출하는 것은 쉬운 일이 아니며 이것이 Qt 4의 이전 PySide 버전에서 Qt 5로 느리게 포팅하는 주된 이유였습니다. 많은 개발자들의 시간이 새로운 Qt 5 API와 더 중요한 것은 모든 것이 올바르게 처리될 수 있도록 바인딩 생성기 도구(binding generator tool)에 적응하는 데 사용되었습니다.

Qt for Python의 개발이 Qt 6의 C++ 및 QML 스토리와 나란히 진행되고 있기 때문에 Qt 6에서는 상황이 달라집니다. 바라건대, 이번에는 놀랄 일이 거의 없을 것입니다. 실제로 이 효과는 현재 5.x 릴리스에서 볼 수 있으며 PySide2는 Qt 릴리스와 거의 동시에 사용 가능하며 경우에 따라 며칠 정도만 지연될 수 있습니다.

[역자주] PySide의 두 번째 버전(PySide2)를 'Qt for Python'이라는 제품명으로 부르고 있습니다. 두 가지 용어가 혼재되어 설명될 수 있습니다.

Qt 5.12.0의 공식 릴리스 이후 Qt for Python의 다운로드가 날마다 증가하고 있으며, 이는 커뮤니티가 프로젝트를 채택하고 즐기는 것을 의미합니다.

첫 번째 안정 버전 5.12.0 출시 이후 PyPi 다운로드

왜 Qt for Python을 개발하고 있습니까?

첫 번째 Qt 릴리스로 발전한 첫 번째 코드 줄은 90년대 초로 거슬러 올라갑니다. 이 코드는 파이썬 탄생과 거의 같은 날짜입니다. 두 프로젝트 모두 개발자의 삶을 편하게 하기 위한 생각으로 시작되었습니다. 두 프로젝트의 조합은 항상 좋은 아이디어였으며 PySide의 공식 출시 이후 Python 커뮤니티에 대한 Qt의 큰 발전을 보았습니다.

우리(Qt Company)는 스스로를 속일 수 없으며, python에 대한 다른 Qt 바인딩(binding) 세트 인 PyQt도 고려하지 않을 수 없었습니다. PySide가 시작된 이래 PyQt 코드와 소스 호환성을 유지하려고 노력했습니다. PyQt 사용자는 PySide도 지원하고 있으며 주요 차이점은 대부분 import name을 변경하고 있다고 주장합니다. 이와 같은 이유로 Qt for Python 프로젝트의 배후에 계신 분들께 정말 감사하고 있습니다. 두 바인딩 세트는 상당히 성숙하지만 한 단계 더 나아가고 싶습니다. 실제로 우리는 QVariant 및 다른 것들을 노출시키지 않는 것과 같은 일부 결정적인 결정을 내렸습니다.

현재 Qt for Python에 사용하는 두 가지 유형의 개발자를 위해 다음과 같은 주요 내용이 있습니다.

C++ 개발자

  • 빠른 프로토타이핑(prototyping) : 특정 프로젝트의 요구 사항을 고려하면 너무 많은 것을 설정하지 않고 아이디어를 프로토타이핑하는 빠른 방법을 사용하는 것이 정말 편리합니다. 종종 그들은 단지 하나의 pip install pyside2 호출입니다. 약간의 반복 후 응용 프로그램에 실제로 보다 성능이 뛰어난 동작이나 강력한 형식(strongly typed)의 언어가 필요한 경우 코드를 C++로 간단하게 전환할 수 있습니다.

PySide2로 예제 애플리케이션 작성

  • Python 내장(embedding) : Python 을 사용하거나 add-ons/plug-in 시스템을 통해 또는 응용 프로그램의 다른 측면을 조작하기 위해 내장된 인터프리터(interpreter)를 사용하여 기존 응용 프로그램을 확장할 수 있습니다.

텍스트 필드에 작성된 코드를 실행하는 Python 인터프리터가 내장되어 Qt/C++ 응용 프로그램 자체를 수정할 수 있는 Qt/C++ 응용 프로그램.

Python 개발자

  • GUI 개발을 위한 강력한 프레임 워크 : Python으로 그래픽 사용자 인터페이스를 작성하는 많은 옵션이 있지만 Qt는 멋진 GUI에 대한 대부분의 요구 사항을 충족하는 것으로 입증된 완전하고 강력한 프레임워크를 제공합니다. 우리는 다른 모듈을 추적하여 다음 릴리스에 포함시킬 수 있는 좋은 아이디어를 얻었습니다.

PySide2 설치 과정

  • 바인딩(binding) 생성 : 파이썬 모듈을 만드는 것은 어려운 작업일 수 있으며 현재 많은 프로젝트에서 이를 달성하기 위한 간단한 인터페이스를 제공하려고 합니다. Shiboken은 모든 C++ 프로젝트를 처리할 수 있는 힘을 점점 더 많이 얻고 있습니다. 많은 코스튬과 사용자의 경험으로 인해 이 도구는 기존 C++ 프로젝트에 Python 바인딩을 제공하기에 충분합니다. 예를 들어 Gamry Instruments가 이미 한 일을 참조하십시오.

Shiboken을 사용하여 예제“Hello World”모듈 만들기

Qt for Python의 미래

Python/Pyside2의 첫 공식 Qt 릴리스 이후 많은 아이디어를 모았습니다.

몇 가지 주요 사항은 다음과 같습니다.

  • 이름 붙이기(Naming), 모듈의 버전 관리는 파이썬과 Qt가 독립적인 번호 매기기를 했으며, 이는 사용자에게 혼란을 주었습니다. 따라서 우리는 Qt 6부터 Qt 버전 관리를 따르기로 결정했습니다. 이름 자체 그대로 유지되는 PySide 6이 릴리스됩니다.

  • Python2 지원, 2020년 초부터 Python2는 더 이상 유지 보수되지 않습니다. 우리는 동일한 작업을 수행하기로 결정했으며 PySide6가 릴리스되면 지원을 중단할 것입니다. 내부적으로 이것은 현재 Python2와 Python3을 동시에 처리하는 많은 문제를 해결합니다.

  • uic 및 rcc를위한 별도의 툴 세트를 갖는 **툴링(tooling)**은 공식 툴의 모든 변경 사항을 추적하고 이를 변형으로 포팅해야 했기 때문에 의미가 없었습니다. 파이썬을 공식 도구에 통합하는 것이 더 나은 것 같습니다. PySide2 5.14부터는 파이썬 wrapper 대신 Qt의 uic과 rcc를 직접 사용할 수 있기를 바랍니다.

  • **메타 위젯과 유틸리티(Meta Widgets and utilities)**는 빠른 개발을 위해 파이썬 개발자의 삶을 편하게해 줄 유틸리티와 위젯 세트를 작성하려고 합니다. NumPyPandas 및 기타와 같은 모듈과의 즉각적인 통합도 우리의 우선 순위 목록에 있습니다.

  • Qt6에 포함될 모든 새로운 기능을 적용하는 Shiboken이 우리의 주요 초점이 될 것입니다. 다행스럽게도 버그 수정 및 새로운 기능을 제출하는 더 많은 기여자(contributor)를 확보했습니다. 결과적으로 더 성숙한 시보켄(shiboken) 릴리스를 얻는 것은 시간 문제입니다.

JIRA(PYSIDE-904)에 대한 더 완전한 목록을 읽을 수 있습니다. Qt 6에서 사용할 수 있게 될 것입니다. (우리는 최선을 다할 것이며, ☺ 약속).

Qt for Python 커뮤니티에게 진심으로 감사드립니다. 현재 작업중인 대부분의 기능은 그 곳에서 비롯되었습니다. 이러한 점을 염두에 두고 IRC 채널 #qt-pyside 에서 귀하의 우려 사항과 아이디어를 알려 주시기 바랍니다. 우리는 여러분의 생각과 Qt for Python를 어떻게 개선할 수 있는지 듣고 싶습니다.

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 91276
80 컨테이너에 적재된 객체를 편리하게 삭제하기 makersweb 2019.09.18 2332
79 C++로 구현된 모델을 QML의 ListView에서 참조 file makersweb 2019.09.07 5819
78 QSocketNotifier로 파일 디스크립터의 활동감지 makersweb 2019.08.28 2507
77 MCU용 Qt에 대해서 makersweb 2019.08.22 2537
» [Qt News] Qt for Python을 위한 기술 비전 j2doll 2019.08.20 2295
75 열거형(enum)을 QML에서 사용하는 방법과 문자열(QString)로 얻기 makersweb 2019.08.20 4788
74 [Qt News] Qt 6 기술 비전 (Technical vision for Qt 6) [2] j2doll 2019.08.08 2778
73 [Qt News] Qt6 Git 개발 초기 단계 시작하기 j2doll 2019.08.02 3046
72 [Qt] Google Play의 향후 요구 사항을 준수하는 방법 [2] j2doll 2019.07.29 1610
71 Qt기반의 오픈소스 프로젝트들 - 2 운영자 2019.07.21 4746
70 QML, 이미지, 폰트등을 바이너리 리소스로 만들기 makersweb 2019.06.24 4318
69 Qt Creator에서 임베디드 장치로 deploy설정(Custom Process Step) file makersweb 2019.06.15 2982
68 Qt Quick Controls 2사용 및 스타일 설정 file makersweb 2019.06.07 7056
67 QML 강좌 - 동적 Listing (ListView) file makersweb 2019.06.01 11090
66 QtInstallerFramework로 온라인 설치프로그램(Online Installer)만드는 방법 [4] file makersweb 2019.05.28 6991
65 QtCreator Design으로 GUI만들기 (QML로 만드는 Hello World -2) [1] file makersweb 2019.05.26 16401
64 QML에서 멀티 스레드(multithreading) 프로그래밍 file makersweb 2019.05.25 3190
63 QtSerialPort를 사용한 시리얼(Serial)통신 [3] makersweb 2019.05.21 13539
62 Qt기반의 오픈소스 프로젝트들 makersweb 2019.05.15 6421
61 Q_D매크로와 d-pointer file makersweb 2019.05.07 1525