오래전에 C# Coroutine을 살펴본적이 있다. Coroutine을 실행하면, yield를 만날 때까지 실행되다가 yield를 만나면 리턴된다. 특이한 점은 다음 실행시, yield 부분부터 실행된다는 점이다. Unity는 초당 수십번 루프를 돌며 프레임 렌더링등을 처리하기 때문에, 단일 쓰레드에서 Coroutine을 마치 새로운 쓰레드를 생성한 것처럼 사용할 수 있었다. 이처럼 C#의 Coroutine과 유사하게 Python 에서도 yield를 사용할 수 있다. 보통 함수에 리턴대신…
[월:] 2020년 05월
Design Pattern: Command Pattern
객체에서 다른 객체로 request를 보낼 때, request 내용이 복잡해 지거나 확장이 필요하면, 프로토콜을 따로 설계하게된다. 그렇게 해야 보다 유연해지기 때문이다. request에 대한 프로토콜을 별도의 Command 오브젝트로 구현하는 방법이 바로 Command Pattern이다. request를 보내는 Invoker 객체는 이를 받는 Reciever 객체에 대한 정보가 없어도 되기 때문에(Command 객체가 갖고있다), 두 객체간 coupling을 제거할 수 있다. Command Pattern의 실제…
Python: Qt QSlider 에 기능추가하기
music player를 만들어 보고 있는데, QSlider가 의외로 기능이 부실해서 그대로 쓸수가 없었다. 미디어 플레이어들을 보면, slider에 클릭 한번으로 위치를 이동하고, 드래그도 부드럽게 되는걸 볼 수 있다. 반면, 기본 QSlider는 임의 위치 클릭이 page 단위 이동을 의미하고, 슬라이더 바를 드래그 할 수 있지만, 자연스럽지 않게 tick 단위로 움직인다. 이를 보완하며 알게된 점을 기록해본다. Qt Designer에 custom…
Python : Qt menu 만들기
윈도우를 생성하고 가장 기본적으로 생성하는 공통 작업이 메뉴만들기일 것이다. 간단하게 메뉴에 대해 알아보려한다. QMainWindow 는 다음과 같이 영역이 구분되어 있다. ( Qt 공식문서 참조 ) 그림에 보이듯이 메뉴는 상단의 Menu Bar 영역에 메뉴가 만들어진다. 메뉴를 만드는 작업은 다음과 같은 과정으로 이루어진다. 메뉴바를 만든다. File, Edit 같은 최상위(팝업) 메뉴를 추가한다. 서브메뉴는 QAction을 생성해서 할당해준다. 메뉴바를 다루기…
Python QT : QT Designer 사용하기
UI를 만들 때, 코드로 하나씩 만들어가는 방법도 알아야 하지만, 너무 비효율적이다. Qt에는 Qt Designer라는게 있고, UI 초안을 이걸로 만들면 매우 빠르게 생성할 수 있다. Qt Designer 에서 Widget 배치하기 Qt Designer를 처음 접했을 때, Widget들을 어떻게 배치할지 난감했다. 이걸 기록하는 이유도 난감했던 기억을 잊지 않기위해 하는 것이다. 코드로 UI를 구성할 때, Layout으로 Widget의 배치를 한다는걸…