관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

SQL과 파이썬 연결 3 - GUI 응용 프로그램 1 : GUI 기본 프로그래밍 본문

알고리즘 및 자료 관리/SQL

SQL과 파이썬 연결 3 - GUI 응용 프로그램 1 : GUI 기본 프로그래밍

huenuri 2024. 12. 12. 08:12

이번에는 GUI 응용 프로그램을 만드는 방법에 대해서 공부해 볼 것이다. 난 GUI로 뭔가를 만드는 작업이 가장 재미있는 것 같다. 기대하는 마음으로 공부를 시작해 봐야지. 그리고 새벽 공부는 여기까지 진행될 것 같다.

오늘은 새벽 4시쯤 일어났다. 1시간 반은 어제 구입한 굿노트 다이어리와 노트를 정리하고 일정을 계획했으며, 큐티를 하는데 시간을 보냈다. 그러다보니 공부 시간이 2시간 반밖에 되지 않는다. 아침 8시에는 걷기 운동을 하러 나갈 예정이기 때문이다. 남은 1시간도 정말 열심히 공부해 볼 것이다.

 

사용자는 텍스트 형태로 프로그램을 사용하는 것을 선호하지 않는다. 뿐만 아니라 간편한 방법으로 데이터베이스를 사용하고 싶어한다. 이러한 환경을 제공하는 GUI 프로그램에 대해 알아보겠다.

 

시작하기 전에

GUI는 윈도우에 그래픽 환경으로 제공되는 화면을 통틀어서 말한다. 파이썬을 통해 윈도에 출력되는 GUI 응용 프로그램을 작성할 수 있다. 이를 도와주는 것이 tkinter라는 라이브러리이다. tkinter를 활용하면 흔히 사용하는 엑셀, 한글, 크롬 등의 응용 프로그램과 비슷한 형태의 프로그램을 만들 수 있다.

그리고 SQL을 전혀 모르는 사용자도 마우스 클릭만으도 데이터 입력, 조회가 가능하도록 할 수 있다.

 


 

 

 

 

GUI 기본 프로그래밍

파이썬은 윈도우윈도 화면을 제공하는 다양한 방법을 제공한다. 그중 가장 기본적이고 쉽게 이용할 수 있는 윈도 생성 라이브러리인 tkinter에 대해 살펴보겠다.

 

기본 윈도우의 구성

GUI의 가장 기본적인 윈도 화면의 구성을 살펴보겠다.

 

tkinter는 파이썬에서 GUI 관련 모듈을 제공해 주는 표준 윈도 라이브러리이다. 윈도 화면이 필요할 때는 꼭 써줘야 한다.  Tk()는 기본이 되는 윈도를 반환하는데, 이를 root라는 변수에 넣었다. TK()를 루트 윈도라고도 부르며, 이 행이 실행될 때 윈도가 출력된다.

root.mainloop() 함수를 실행한다 이는 앞으로 윈도에 키보드 누르기, 마우스 클릭 등의 다양한 작업이 일어날 때 임포트를 처리하기 위해 필요한 부분이다.

 

 

실행하면 이와 같은 윈도 창이 뜬다.


 

 

 

 

 

윈도에 제목을 지정하고 크기를 설정할 수 있다.

 

 

창이 좀더 커졌다.


 

 

 

 

 

라벨

라벨은 문자를 표현할 수 있는 위젯으로 label(부모윈도, 옵션...) 형식을 사용한다. 위젯은 윈도에 나오는 버튼, 텍스트, 라디오 버튼, 이미지 등을 통합해서 지칭하는 용어이다. 옵션에서 모양에 대한 다양한 설정을 할 수 있다. 그리고 모든 위젯들은 pack() 함수를 사용해어 화면에 나타난다.

 

 Label() 함수는 라벨을 만든다. 옵션에서 text는 글자 내용은, font는 글꼴과 크기를 지정한다. fg는 foreground의 약자로 글자색을, bg는 background의 약자로 배경색을 지정한다.

pack() 함수를 통해서 해당 라벨을 화면에 표시해 준다.

 

 

 

책에 있는 것보다 창 크기와 글씨 크기를 크게 해 주었다.


 

 

 

버튼

버튼은 마우스로 클릭하면 지정한 작업이 실행하도록 사용되는 위젯으로 Button(부모윈도, 옵션...) 형식을 사용한다. GUI에서 많이 사용되는 위젯이다.

라벨과 차이점이 있다면 command 옵션으로 사용자가 버튼을 눌렀을 때 지정한 작업을 처리해야 한다는 것이다. 나머지 옵션은 라벨과 거의 동일하다.

 

버튼 크기와 글씨 크기도 책과 다르게 좀 더 키워보았다. command 옵션에 clickButton() 함수를 호출했다. 버튼을 클릭하면 메시지 상자가 나타난다.

pack()에서 버튼을 화면 중앙에 표현하기 위해 expand=1 옵션을 추가했다.

 

 

 

 

버튼을 누르면 이러한 메시지가 뜬다.


 

 

 

 

위젯의 정렬

pack() 함수의 옵션 중에서 가로로 정렬하는 방법으로 side=LEFT 또는 RIGHT 방식이 있다. 

 

 

 

이 창도 원래는 콩알만 했는데 5배 이상으로 키웠다. side=LEFT 옵션은 왼쪽부터 채워가라는 의미이다. LEFT를 RIGHT로 바꾸면 오른쪽부터 나온다.


 

 

오른쪽 정렬

 


 

 

 

수직 정렬

side=TOP 또는 BOTTOM 방식을 사용하면 수직으로 정렬할 수 있다.

 

 


 

 

 

위젯 사이의 여백 추가

위젯 사이에 여백을 주려면 pack() 함수의 옵션 중 padx=픽셀값 또는 pady=픽셀값 방식을 사용한다. 이 코드는 이미 앞에서 적용해 보았다.

 

 

그냥 코드를 작성하는 건 앞의 코드와 별다를 바 없어 여백을 더 크게 늘려주었다.


 

 

 

 

프레임, 엔트리, 리스트 박스

프레임을 화면을 여러 구역으로 나눌 때 사용한다. 엔트리는 입력 상자를 표현하고, 리스트 박스는 목록을 표현한다. 

 

책에서는 창 크기가 너무 작아서 크게 했고 색깔도 여러 가지로 설정해 주었다. upFrame과 downFrame이라는 2개의 프레임을 생성하고 화면에 출력했다. 프레임은 구역을 나눈 것일 뿐 화면에는 표시되지 않는다.

입력을 위한 엔트리를 나타냈고 이번에는 root가 아닌 upFrame에 나오도록 했다. 그리고 리스트 박스를 나타냈고 데이터는 3건 입력했다.

 

 

 

 

상단에 글씨도 쓸 수 있다.


 

 

 

 

학습을 마치고

마지막 한 페이지가 남아있는데 이 내용은 코드가 정말 길어서 다음 포스트에 이어서 정리해 보기로 했다. GUI로 이것저것 만들어보는 작업이 정말 재미있었다. 그리고 책과 똑같이 하지 않고 내가 만들고 싶은 코드로 수정하는 재미도 쏠쏠했다.

다음에 이걸 사용해서 내가 만들고 싶은 프로젝트를 하나 만들어도 의미 있는 시간이 될 것 같다.