AI 프로그래밍/OnB(One Button Executor)

One Button 프로그램 개발기 - 21

플로7 2024. 11. 13. 23:41
728x90
728x90

기존에 사용하던 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의 결과물 차이는 다음과 같다.

기존의 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의 적용 시의 모습은 다음과 같다.

PySide6 적용 시

 

오픈 라이선스임에도 상당히 깔끔하다 !

PyQt5 보다 더 깔끔한 인터페이스 및 텍스트를 보여주는것이 인상깊었다.

 

깔끔한 디자인을 보고 OnB의 인터페이스를 전면 PySide6로 변경을 시도해 보았으나 아쉽게도 기능이 너무 많아 버그의 발생이 상당히 많았다.

 

그래서 다음 혹은 다른 프로그램 개발 시 처음부터 PySide6를 기본적으로 사용하여 만들어 볼 예정이다.

 

 

 

계속...

 

One Button 프로그램 개발기 - 22

어떻게 하다보니 Cursor가 다시 정상화되어 작동이 되는것을 확인하였다.이제 OnB를 약간만 수정 한 후 배포를 하려고 한다. 예정보다 너무 많은 시간이 흘렀기에 더 이상은 과한 욕심이라고 생각

livelikeflow.tistory.com

처음 이야기

One Button 프로그램 개발기 - 1

 

728x90
728x90