본문 바로가기
Software/Python

[PyQt 파이썬 GUI프로그래밍] Layout으로 창크기에 따라 창요소 크기도 같이 조절되도록 하기

by lovey25 2019. 5. 21.
반응형

GUI프로그래밍을 도와주는 PyQt에서 창크기에 따라 내부 요소들의 크기들이 자동으로 변경될 수 있도록 하는 방법을 알아보겠습니다.

PyQt의 Qt designer를 이용해서 다음과 같은 형태의 프로그램 UI를 디자인했습니다.

키워드를 맨위에 있는 박스에 입력하고 검색버튼을 누르면 아래에 결과가 나타나는 그런 동작을 수행할 UI되겠습니다.

위젯 구성은 다음과 같습니다.

메인 윈도우에 Grid Layout을 먼저 깔고 lineEdit, pushButton, tableWidget을 베치하였습니다.

Grid Layout은 내부에 웨젯 배치를 손쉽게 해주기 위해서 그리드형태로 위젯의 위치에 대한 가이드를 잡아주는 역할을 합니다. 그래서 필요한 위젯을 드레그 해서 Grid Layout 위로 가져가면 상하좌우에 하이라이트 표시가 생기면서 어느 부분에 스냅을 시킬것인지 선택할 수 있게 됩니다.

그래서 맨처음 그림에서 보시는 것처럼 위젯들을 가로 3줄, 세로 3줄 형태로 배치를 하였습니다.

이렇게 구성된 Grid Layout은 크기가 변경되면 그 내부에 포함되어 있는 위젯들도 다같이 동일한 비율을 유지하며 Grid Layout의 크기에 맞추어 변경이 됩니다.

그렇지만 이렇게 해서는 Grid Layout이 창과는 연동되지 않아서 창크기가 변경되어도 내부 요소들의 크기는 따라 변경되지를 않습니다.

보시는 것처럼 창의 크기가 줄어들었지만 내부의 위젯의 크기는 그대로 유지되고 있습니다.

모든 위젯의 크기가 창크기에 의존적으로 조절될 수 있도록 하려면 여기서 한가지만 더 해주면 됩니다.

Qt designer편집화면에서, 생성한 메인 윈도우의 여백부분을 선택한후 마우스 우클릭을 한다음 "Lay out > Lay Out in a Grid"를 선택해줍니다.

그러면 만들어둔 Grid Layout이 창의 크기 꽉 맞도록 자동으로 크기가 변경됩니다. 그리고 메인 윈도우 크기를 조절해보면 내부의 위젯들이 모두 비율을 유지하면서 따라서 크기가 조정되는 걸 확인할 수 있습니다.

PyQt는 정말 간단하네요.

Grid Layout 외에도 수식 수평 방향의 가이드를 잡아주는 Vertical Layout, Horizontal Layout이 있습니다. 필요에 따라서 골라서 사용하면 되겠네요.

 

끝!

반응형

댓글