One Button 프로그램 개발기 - 21
기존에 사용하던 OnB의 버튼 크기 조정 등 기능이 워낙 말썽이 많아
Tkinter대신 PyQt5를 시도해 보려고 한다.(찍먹만 해보기)
그 둘의 차이에 대해 표 작성을 ChatGPT에게 요청하였다.
구분 | Tkinter | PyQt5 |
사용 용이성 | Python에 내장되어 있으며 설치가 필요 없고, 초보자가 사용하기 쉬움 | 설치가 필요하고 다소 복잡하지만, 고급 애플리케이션 개발에 적합 |
위젯 종류 | 기본 위젯 제공 (버튼, 레이블, 입력 창 등) | 다양한 고급 위젯 제공 (데이터 테이블, 트리 뷰 등) |
디자인 및 스타일링 | 제한된 스타일링 기능, 기본적인 UI 구현에 적합 | 스타일 시트를 통해 세부적인 디자인 가능, 다양한 테마 지원 |
이벤트 처리 | 일반적인 이벤트 바인딩 방식 사용 | 시그널/슬롯 시스템을 통한 효율적인 이벤트 처리 가능 |
확장성 | 작은 규모의 단순한 애플리케이션에 적합 | 대규모 애플리케이션 및 상업용 프로젝트에 적합 |
라이선스 | Python과 함께 제공되어 자유롭게 사용 가능 | GPL 및 상업용 라이선스, 상업 프로젝트의 경우 라이선스 비용 필요 |
커뮤니티 및 문서화 | Python 표준 라이브러리로 문서와 예제가 많음 | Qt 라이브러리 기반으로 방대한 문서와 예제 제공 |
호환성 | 플랫폼별로 다소 다른 외관을 가질 수 있음 | 일관된 크로스 플랫폼 지원, 각 운영체제에서 동일한 UI 제공 |
성능 | 가벼운 프로그램에 적합하며, 간단한 GUI에 적합 | 성능이 우수하며, 복잡한 GUI 프로그램에서도 원활하게 작동 |
프로젝트 규모 | 소규모 프로젝트나 빠른 프로토타이핑에 적합 | 복잡한 기능과 고급 UI가 필요한 대규모 프로젝트에 적합 |
요약:
- Tkinter는 가볍고 단순한 애플리케이션을 빠르게 개발할 때 유리하며, 초보자에게 적합합니다.
- PyQt5는 다양한 위젯과 고급 스타일링을 지원하여 복잡하고 큰 규모의 애플리케이션을 개발하는 데 더 적합합니다.
아무래도 PyQt5의 자유도가 높은 탓인지, Cursor의 일반적인 대화 창의 프롬프트로는
몇 번을 요청을 해도 코드에 적용이 되지 않았다.
그래서 이전에 사용해 보았던 Cursor의 Composer기능을 시도하였다.
Composer 기능의 경우 한번에 다양한 파일의 코드를 수정 및 적용하는것이 기본적으로 가능해서
시도해 보면 될 것 같았다.
테스트 해 보니 Cursor의 가장 첫 마디는 다음과 같았다.
PyQt5로 변환하는 작업은 큰 프로젝트이므로 단계적으로 진행하는 것이 좋습니다.
먼저 기본 구조와 핵심 기능을 구현하는 코드를 작성해드리겠습니다.
역시 코드가 길어서 적용이 안 되었던 것 같다.
Tkinter과 PyQt5의 결과물 차이는 다음과 같다.
확실히 PyQt5를 쓴 쪽이 Window11기준 훨씬 깔끔하게 보인다.
사진으로 표현이 잘 되는지 모르겠지만 Tkinter의 해상도가 낮아보이는 반면,
PyQt5의 인터페이스가 픽셀이 깨진 것 같은 현상이 적었다.
글씨의 픽셀이 안 좋아보이는것은 아마 폰트 때문일 것이다.
비교해 보니, PyQt5가 깔끔해서 사용을 하려고 생각을 하였는데
라이센스 문제가 있다는 것을 발견하였다.
그래서 안 쓰기로 했다.
아직 OnB를 상업용으로 판매할 생각은 없지만,
향후 다른 기능들을 하나씩 추가한 후에는 판매를 할 수도 있기 때문이다.
그래서 대안으로 찾은 것은 Pyside6이다.
PyQt5와 PySide6의 장단점을 비교한 표는 다음과 같다.
구분 | PyQt5 | PySide6 |
라이선스 | GPL 및 상업용 라이선스 제공. 상업적 사용 시 라이선스 비용 필요 | LGPL 라이선스 제공. 상업적 프로젝트에서 무료 사용 가능 |
호환성 | Python 3.x 및 Qt 5 기반 | Python 3.x 및 최신 Qt 6 기반 |
기능 지원 | Qt 5 기능 대부분 지원. 일부 최신 Qt 기능 미지원 가능 | 최신 Qt 6 기능 완벽 지원, 최신 Qt API 사용 가능 |
커뮤니티와 문서화 | 오랜 시간 동안 커뮤니티 형성, 방대한 문서와 예제 존재 | PyQt5보다 상대적으로 문서가 적지만, Qt 공식 지원으로 점차 문서와 예제가 증가 |
업데이트 빈도 | 유지 보수 및 업데이트가 지속적이나 Qt 5 기반의 기능 추가는 제한적 | Qt 공식 지원을 받아 Qt 6에 맞춘 최신 업데이트와 기능 추가 가능 |
호환성 및 안정성 | Qt 5 기반으로 안정성 높음, 다양한 운영체제에서 테스트된 안정적인 선택지 | Qt 6 기반으로 최신 기술 사용 가능하나 일부 운영체제에서 호환성 이슈 발생 가능 |
상업적 사용의 용이성 | 상업적 사용 시 비용 문제 발생 가능. 상업 프로젝트에서 PyQt5와의 라이선스 체결 필요 | LGPL 라이선스를 통해 상업적 사용에 유리하며 무료로 사용 가능 |
Qt Designer 지원 | Qt Designer와의 호환성 뛰어나고, GUI를 시각적으로 쉽게 제작 가능 | Qt Designer와 호환 가능, 최신 Qt 6 기능을 활용한 GUI 제작 가능 |
프로젝트 크기 적합성 | 대규모 및 상업 프로젝트에서도 많이 사용됨 | 대규모 및 상업 프로젝트에서도 적합, 최신 Qt 6의 성능을 활용 가능 |
성능 및 최적화 | Qt 5의 최적화로 안정적인 성능을 제공하지만 최신 최적화 기능은 제한적 | Qt 6의 최적화된 성능을 제공하며, 최신 하드웨어 및 소프트웨어 최적화 가능 |
요약:
- PyQt5는 Qt 5 기반으로 안정적이며, 방대한 문서와 커뮤니티 지원을 제공합니다. 상업용으로 사용 시에는 라이선스 비용이 발생하지만, Qt 5의 안정적인 성능을 바탕으로 대규모 프로젝트에 적합합니다.
- PySide6는 최신 Qt 6 기능을 제공하며 LGPL 라이선스로 상업적 프로젝트에서 무료로 사용할 수 있는 장점이 있습니다. 최신 기능과 최적화된 성능을 제공하지만, 일부 플랫폼에서의 호환성 문제를 주의해야 합니다.
단, PySide6 사용시 주의점이 있다. 위에서 언급한 것 처럼
LGPL (Lesser General Public License) 라이센스를 준수해야 한다. 그 조건은 다음과 같다.
LGPL 조건을 간단히 설명하면 다음과 같습니다:
동적 링크: PySide6를 사용하는 애플리케이션에서 PySide6 라이브러리는
동적 링크(다이나믹 링크) 방식으로 연결되어야 합니다.
즉, 애플리케이션 코드가 PySide6의 코드를 직접적으로 수정하거나 통합하지 않고,
독립적으로 분리된 상태로 연결되어야 합니다.
소스 코드 제공 의무 없음: PySide6를 동적으로 링크한 경우,
애플리케이션의 소스 코드를 공개할 의무는 없습니다.
따라서 상업용 애플리케이션에서 비공개 소스 코드를 유지할 수 있습니다.
수정된 라이브러리 제공: PySide6 라이브러리를 수정하여 사용한 경우,
수정된 라이브러리의 소스를 사용자에게 제공할 의무가 있습니다.
하지만 일반적으로 PySide6를 수정하지 않고 사용하므로 이 부분은 크게 신경 쓰지 않아도 됩니다.
PySide6의 적용 시의 모습은 다음과 같다.
오픈 라이선스임에도 상당히 깔끔하다 !
PyQt5 보다 더 깔끔한 인터페이스 및 텍스트를 보여주는것이 인상깊었다.
깔끔한 디자인을 보고 OnB의 인터페이스를 전면 PySide6로 변경을 시도해 보았으나 아쉽게도 기능이 너무 많아 버그의 발생이 상당히 많았다.
그래서 다음 혹은 다른 프로그램 개발 시 처음부터 PySide6를 기본적으로 사용하여 만들어 볼 예정이다.
계속...
One Button 프로그램 개발기 - 22
어떻게 하다보니 Cursor가 다시 정상화되어 작동이 되는것을 확인하였다.이제 OnB를 약간만 수정 한 후 배포를 하려고 한다. 예정보다 너무 많은 시간이 흘렀기에 더 이상은 과한 욕심이라고 생각
livelikeflow.tistory.com
처음 이야기