본문 바로가기

728x90

GUI

(9)
PyQt GUI (15) 리스트 아이템(list item) 드래그-앤-드롭(drag and drop) 이용하기 드래그-앤-드롭 Drag-and-Drop은 GUI에서 매우 많이 사용되는 기능입니다. 선택 가능한 리스트 중에서, 원하는 아이템을 고르는데 주로 사용됩니다. 이번 포스팅에서는 리스트 아이템에 드래그-앤-드롭 기능을 추가해 보도록 하겠습니다. 리스트 위젯 QListWidget() 2개를 만들었습니다. 첫번째 리스트 위젯은 선택할 수 있는 아이템을 보여주는 리스트 위젯이고, 두번째 리스트 위젯은 선택하는 아이템을 담는 리스트 위젯 입니다. 즉 위에 있는 아이템 리스트를 드래그-앤-드롭하여 아래에 있는 리스트 위젯에 담으려고 하는 것 입니다. 주로 "보기" 중에서 몇 개를 (순서대로) "선택" 하는 경우에 위와 같은 UI를 구성할 것 입니다. 리스트에는 색깔을 나타내는 Red, Green, Blue가 있는데 ..
PyQt GUI (14) 그래프 라이브러리 Matplotlib을 GUI에 포함하기(embeding) Matplotlib은 Python을 이용하여 그래프를 그릴 때 매우 빈번하게 사용하는 라이브러리 입니다. matplotlib을 이용하면 단순한 2차원 그래프부터, 3차원 그래프 뿐 아니라, 막대그래프, 파이그래프 등 거의 원하는 모든 형태의 그래프를 그릴 수 있습니다. Python에는 다양한 그래프 라이브러리가 있지만, matplotlib은 그 중에서도 아주 많이 사용되는 라이브러리이니, 만일 matplotlib을 처음 접하시는 분이라면 아래 포스팅을 읽는 것 보다는 GUI와는 상관 없이 우선 일반적인 python 출력을 통해 matplotlib에서 그래프를 그려 보는 것을 추천합니다. 꼭 GUI 뿐만 아니라 다양한 곳에서 활용도가 매우 높은 라이브러리 이기 때문입니다. (제 블로그의 모든 그래프는 이 ..
PyQt GUI (12) 어플리케이션 만들기 (2) : 기억력 카드 게임 만들기 단순히 Layout이나 Widget의 사용법만을 익히면 좀 지루한 감이 있으니, 배운 내용을 바탕으로 의미있는 GUI 프로그램을 만들어 보는 시간을 갖도록 하겠습니다. 지난번에는 계산기 어플리케이션을 만들었는데, 이번 시간에는 기억력 카드 게임을 만들어 보겠습니다. 이 어플리케이션은 유투브 채널의 시청자님의 요청으로 만들게 되었습니다. 영상을 촬영하고 편집하는데는 시간이 좀 걸리니 우선, 바로 쓸 수 있는 블로그 포스팅 부터 하도록 하겠습니다. 우선, 최종적으로 만든 어플리케이션을 보여드리면서 기억력 카드 게임이 무엇인지, 그리고 프로그램을 어떻게 사용하는지를 설명드리겠습니다. 사용법은 아래와 같습니다. (0) 첫째줄에는 6개의 동물 이미지가 있습니다. 사용자가 사용할 이미지를 준비해 놓고 해당 파일의 ..
PyQt GUI (8) : 프레임을 사용하여 UI창 구분하여 활용하기 - QFrame 윈도우 탐색기는 크게 폴더트리 부분과 폴더의 내용을 보여주는 부분으로 나눠져 있습니다. 폴더트리와 폴더의 내용을 보여주는 부분에는 희미하게 회색으로 세로방향 선이 그어져 있는데, 그냥 보면 잘 안 보여서 검은색 굵은 라인으로 그렸습니다. 이 선을 좌우로 움직이면서 폴더트리 부분을 크게 볼 수도 있고, 반대로 폴더의 내용을 더 크게 볼 수 도 있습니다. 위 예시는 폴더트리 부분을 크게 보고 폴더의 내용창 부분을 작게 줄인 것 입니다. 이처럼 UI에서는 서로 다른 역할을 하는 두 부분을 동시에 보여줘야할 일이 있습니다. 그리고 사용자의 편의를 위해서 그 두 부분의 영역의 넓이를 위와 같이 조절할 수 있는 기능이 있어야 합니다. PyQt GUI에서는 QFrame이라는 위젯을 이용해서 위 기능을 수행합니다. F..
PyQt GUI (6) : GUI창의 크기에 따라 위젯의 크기가 자동으로 커지게 하기 https://www.youtube.com/watch?v=3-ugvvigZ8A 지난 포스팅 에서 계산기 어플리케이션을 만들어 보았습니다. 위 이미지와 같이 우리의 계산기는 단순한데요, 경우에 따라서는 창의 크기를 더 크거나 작게 할 필요가 있습니다. 그러나 우리의 계산기는 크기를 변경할 때, 문제가 2개가 있는데 (1) 계산기의 크기를 줄이려고 해도 작아지지 않는다 (2) 계산기의 크기를 크게 하면 수식/정답 입력 LineEdit과 사칙연산 버튼 사이에 공백이 생긴다 입니다. 실제로 계산기 창의 크기를 크게 하면, 위 이미지와 같이 Solution 과 사칙연산 버튼 사이에 공간이 생긴다는 것을 볼 수 있습니다. 전체 창의 크기는 커졌지만(특히 세로방향으로), Equation/Solution LineEdi..
PyQt GUI (5) 어플리케이션 만들기 (1) : 100줄만에 계산기 만들기 https://www.youtube.com/watch?v=tnzLtWSAdg0 이번 포스팅에서는 지난 포스팅까지 소개한 내용을 바탕으로 간단한 계산기를 만들어 보도록 하겠습니다. 제목과 같이 약 100줄 정도의 코드만에 계산기를 만드는 것인데요, 이전 포스팅까지에서 공부한 내용이 얼마 없긴 하지만, 이 정도만 가지고도 계산기 정도는 만들어 낼 수 있습니다. 전체 코드는 아래와 같습니다. import sys from PyQt5.QtWidgets import * class Main(QDialog): def __init__(self): super().__init__() self.init_ui() def init_ui(self): main_layout = QVBoxLayout() ### 각 위젯을 배치할 레이아..
PyQt GUI (4) : 위젯 이벤트 연결 (버튼 클릭 시 반응 하게 하기) - clicked.conncet() https://www.youtube.com/watch?v=jnWiIMWVcdA 이전까지의 포스팅은 위젯을 생성하고 이 위젯을 원하는 위치에 배치하여 UI를 띄우는 것이 주된 내용이었습니다. 실제 UI에서는 사용자가 위젯을 사용하기에 따라서 프로그램이 반응을 해야 합니다. 예를들어서, 버튼을 클릭했을 때 프로세스가 실행이 된다든가, 콤보박스에서 원하는 아이템을 선택했을 때, 프로그램에서는 어떤 아이템을 선택했는지를 인지한다든가 입니다. 이번 포스팅에서는 각 위젯에 이벤트를 어떻게 처리 하는지, 즉 사용자의 위젯 사용에 따라서 프로그램이 어떻게 반응해야 하는지를 설계해 보도록 하겠습니다. 우선 전체 코드는 아래와 같습니다. import sys from PyQt5.QtWidgets import * class ..
PyQt GUI (3) : QFormLayout을 이용한 위젯 배치 https://www.youtube.com/watch?v=Tjq8TICkx3E 지난 포스팅 에서 QVBoxLayout, QHBoxLayout, QGridLayout을 이용하여 위젯을 배치하는 것을 알아봤습니다. 이번 포스팅에서는 조금 특수한 형태의 레이아웃이라 할 수 있는 QFormLayout을 이용하여 위젯을 배치해 보도록 하겠습니다. 인터넷의 회원 가입창에서 주로 볼 수 있는 자기 소개(혹은 개인 정보)를 입력하는 UI의 기본 코드는 아래와 같습니다. import sys from PyQt5.QtWidgets import * class Main(QDialog): def __init__(self): super().__init__() self.init_ui() def init_ui(self): main_l..

728x90