반응형

이제 파이썬에 있는 GUI 사용법에 대해 알아보려 한다.


파이썬에서는 Tkinter이라는 모듈을 이용하여 기본적인 GUI 구현이 가능하다.


우선 Tkinter 모듈을 불러오기 위해


from Tkinter import *로 지정하면 된다.


바로 예시를 들어보자.



1. 라벨


1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 라벨 사용
 
from Tkinter import *
 
window = Tk() # 루트 윈도우 생성(GUI 객체 생성)
 
label = Label(window, text = 'Hello World!'# 라벨 위젯
label.pack() # 위젯 위치를 적당한 곳에 위치시킨다.(auto)
 
window.mainloop() # Event loop를 시작시켜 GUI를 활성화 시킨다.
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



라벨은 다음과 같이 사용할 수 있다.


Tk()를 이용하여 루트 윈도우 객체를 생성한다.


그리고 Label(window, text = 'Hello world!')를 통해 라벨을 올릴 곳을 window로 설정하고, text는 사용자 입력을 통해 정한다.


그리고 label이 어디에 위치해야할지 정해야하니 우선 자동정렬인 label.pack()를 이용한다.


마지막으로 window.mainloop()를 통해 GUI 화면을 보여주기시작한다.


라벨은 위와 같이 간단하게 이용이 가능하다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 4. padding을 통한 공간 여백 생성
 
from Tkinter import *
 
window = Tk()
 
label2 = Label(window, text = 'label2')
label3 = Label(window, text = 'label3')
 
label2.pack(side = LEFT, padx = 10# padx는 좌우 여백을 의미하고
label3.pack(side = RIGHT, padx = 20# pady를 하면 상하 여백이 생긴다.
 
window.mainloop()
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



위의 코드는 pack 다음 side와 padx,y를 통해 위치를 조절 할 수 있게 해주는 것을 나타낸다.


side는 LEFT, RIGHT, TOP, BOTTOM을 통해 위치를 지정할 수 있고 padx, pady는 x,y축 여백을 의미한다.



두번째로 버튼에 대해 알아보고자 한다.





2. 버튼


버튼도 라벨과 비슷한 방식의 명령어를 받아내지만 버튼은 이제 command라는 인자를 통해 클릭 시 이벤트를 처리해줄 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 2. 버튼 사용
 
from Tkinter import *
 
window = Tk()
 
btn1 = Button(window, text='버튼1'# 버튼을 올릴 장소, 버튼에 들어갈 내용
btn2 = Button(window, text='버튼2')
 
btn1.pack() # auto 위치 지정
btn2.pack()
 
window.mainloop()
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


Button(window, text='버튼1')을통해 window 루트 객체에 올리되 버튼에 들어가는 텍스트는 버튼1로 지정할 수 있다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 3. auto 위치 지정이 아닌 다른 위치 지정방법
 
from Tkinter import *
 
window = Tk()
 
btn3 = Button(window, text= '버튼3')
label = Label(window, text= 'Hello World')
 
btn3.pack(side = LEFT)
label.pack(side = RIGHT)
 
window.mainloop()
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


이 코드는 pack부분에 side = LEFT, RIGHT, TOP, BOTTOM 4가지 중 하나를 이용하면 

각 버튼, 라벨의 위치를 설정해 줄 수 있게된다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 5. 버튼 텍스트 변경 방법
 
from Tkinter import *
 
window = Tk()
 
btn4 = Button(window, text = '여기는 버튼4')
btn5 = Button(window, text = '여기는 버튼5')
 
btn4.pack()
btn5.pack()
 
btn4['text'= '바뀐4'
btn5['text'= '바뀐5'
 
window.mainloop()
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



위의 코드는 버튼의 텍스트를 변화시키는 방법을 보여준다.


btn4['text'] = '내용'을 통해 원래 버튼의 text를 '내용'으로 변경해주는 과정이다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 6. 프레임을 이용한 구분 방법 및 버튼에 색상 넣기
 
from Tkinter import *
 
window = Tk()
 
topFrame = Frame(window)
topFrame.pack(side = TOP)
 
bottomFrame = Frame(window)
bottomFrame.pack(side=BOTTOM)
 
redbtn = Button(topFrame, text='redbtn', fg = 'red'# fg는 글자 색
yellowbtn = Button(bottomFrame, text='yellowbtn', bg='yellow'# bg는 배경색
 
redbtn.pack()
yellowbtn.pack()

 
window.mainloop()
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



위의 코드는 프레임을 구분 할 수 있는 방법 및 버튼에 배경색, 글자에 색을 넣는 방법을 설명하고 있다.


Frame 메서드를 통해 window라는 GUI 객체에서 공간을 나눌 수 잇게 되고


pack(side = TOP)을 통해 이제 topFrame는 window객체에서 위쪽의 공간을 맡을 수 있게된다.


그리고 Button에서 fg는 글자 색을 의미(전경) bg는 배경색을 의미하게 된다.


나머지는 위와 같으니 설명을 생략하도록 한다.



마지막으로 command를 이용하는 법을 알아보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from Tkinter import *
 
window = Tk()
 
def b1event():
    if(b1['text'== 'hello'):
        b1['text'= 'world'
        b1['fg'= 'red'
        b1['bg'= 'yellow'
    else:
        b1['text'= 'hello'
        b1['fg'= 'yellow'
        b1['bg'= 'red'
        
b1 = Button(window, text='hello',command = b1event, fg = 'yellow', bg = 'red')
b1.pack()
 
window.mainloop()
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus



위의 코드는 command를 넣어둔 상태이다.


command는 클릭시 일어나는 행동을 의미하고 함수로 정의하여야 한다.


따라서 위의 코드에서는 b1event()라고 정의하였고


만약 text가 hello이면 text를 world로 바꾸고 전경을 빨강, 배경을 노랑으로 바꾸고

text가 world라면 text를 hello로 바꾸고 전경을 노랑, 배경을 빨강으로 바꾸는 과정을 시행해주는 것을 보여준다.


이를 이용하여 다양한 버튼 이벤트를 제작 할 수 있다.









반응형