상황을 더 복잡하게 하기 위해 QtQuick에는 파이썬과 유사한 가비지 수집기도 있습니다. 그러나 여기서 함정은 Qt가 파이썬이 아닌 C ++에서 구현된다는 것입니다. app.exec_() 실행하면 Qt/C++ 이벤트 루프가 시작되며, 이 루프는 중지될 때까지 영원히 반복됩니다. 물론 애초에 이런 식으로 응용 프로그램을 디자인해서는 안 되지만 때로는 제어할 수 없는 외부 라이브러리에 의존하기도 합니다. 예를 들어 메시지가 도착할 때 콜백을 트리거하는 미들웨어 라이브러리입니다. 대부분의 경우 파이썬 및 Qt로 작업 할 때 Qt의 메모리 관리에 신경 쓸 필요가 없습니다. 그러나 경우에 따라 파이썬 개체 또는 그 일부가 Qt 개체보다 오래 살 수 있습니다. 따라서 Qt 및 기타 많은 GUI 관련 프레임워크에는 창 기반 그래픽 응용 프로그램에 특히 적합한 자체 메모리 관리 메커니즘이 함께 제공됩니다. 원리는 매우 간단합니다. 모든 개체는 자식을 가질 수 있으며 자식청소를 담당합니다. 예를 들어 응용 프로그램 창에 단추인 자식이 있다고 가정해 보겠습니다. 창이 닫히면 창이 remove를 호출합니다단추의 나중에 기능. 이렇게 하면 예를 들어 복잡한 GUI 양식이 올바른 순서로 정리됩니다.

API 관점에서 PyQt5는 PySide2와 매우 유사합니다. 예를 들어 [python_qt_binding](https://github.com/ros-시각화/python_qt_binding)과 같은 래퍼에서 사용할 수 있으며 PyQt 문서에서 대부분의 작업을 수행할 수 있습니다. 또한 Qt/C++ 문서는 일반적으로 Qt API에 도움이 됩니다. 또한 QObject는 자식을 즉시 삭제하지 않고 대신 개체 삭제를 이벤트 루프에 위임합니다. 이렇게 하면 예를 들어 다른 작업에서 만든 개체도 올바르게 정리됩니다. 그러나 더 복잡한 응용 프로그램의 경우 메모리 관리가 소리만큼 쉽지 않습니다. 예를 들어 인스턴스 외부에서 생성되고 다른 개체 인스턴스에 할당된 개체를 정리하는 책임은 무엇입니까? 글로벌 스케줄러 오브젝트가 여전히 틱 인스턴스 함수에 대한 참조를 가지고 있기 때문에 파이썬 객체가 QObject보다 오래 살았습니다. 우리 모두가 알다시피, 파이썬은 자동 메모리 관리를 지원하므로 가비지 수집기는 더 이상 참조되지 않는 변수를 찾고 메모리를 해제합니다. 이것은 일반적으로 매우 잘 작동하며 아마도 예를 들어 C ++보다 파이썬 방식으로 쉽게 작업 할 수있는 기능 중 하나일 것입니다. 지난 몇 주 동안, 나는 파이썬과 Qt, 특히 PyQt를 광범위하게 사용했습니다. 이 주 동안 나는 실수로 발에 자신을 촬영하는 방법을 몇 가지 방법을 발견했다.

파이썬과 Qt를 사용하는 또 다른 „발에 자신을 쏴“경험은 메모리 관리와 관련이 있습니다. 그러나 기다려 – 파이썬 클래스에는 소멸자가 없습니다 (예, __del___ 메서드가 있지만 파이썬 객체는 여전히 살아 있습니다.). 글쎄, 해결책은 사소한 것처럼 들리며 파이썬 객체가 파괴 될 때 콜백을 등록 취소합니다. 또한 비디오 코스를 만들거나 직접 책을 쓰는 것에 대해 생각하고 있었지만 아직 최선을 다하지는 않았습니다. 파이썬 세계에서 Qt를 배우는 데 얼마나 많은 사람들이 관심이 있는지 궁금합니다. 이 문서에서는 Qt 및 Python으로 GUIs에서 작업할 때 주의해야 할 사항과 결과 문제를 방지하는 방법을 알아봅니다.

python qtimer 예제