파이썬은 풍부한 라이브러리 생태계가 장점인데요,
기본 설치되는 라이브러리도 유용한 것이 상당히 많답니다.
저도 하나하나 공부해 가고 있는데요.
오늘 사용해볼 라이브러리는TKinter가 되겠습니다.
이 라이브로리를 사용하면 파이썬만 인스톨하고도 간단한 툴을 만들어 볼 수 가 있습니다.
TKinter의 장점은 사용방법이 아주 직관적이라는 건데요.
완전 초보라고 하더라도 구글링 몇번으로 왠만큼 이용할 수 가 있고 크게 편리한걸 따지지 않는 다면 사실 이 라이브러리로 필수 적인건 거의 다 만들어 쓸 수 있습니다.(검색해 보시면 부정적인 내용이 많아서 ,, ㅠㅠ 좋은 아이에요)
실제로 현재 진행 중인 프로젝트를 TKinter 사용해서 UI 만들었고요.
꽤 괜찮은 평가를 받고 있답니다. 후속 프로젝트가 들어오더라고 TKinter 로 계속 작업할 예정이에요. 고객사 설치해줄때도 따로 설치과정이 들어가지 않는 TKinter가 최고 !. !
그럼 기본적인 사용방법을 알아보겠습니다.
TKinter 기본 사용법
1. 창 생성하기
from tkinter import *
window = Tk()
window.title("Gomming's Automation Tool")
window.mainloop()
TKinter 라이브러리는 from tkinter import * 를 통해 불러 올 수 있어요.
창을 만들때는 창이름을 정해야 해요. 여러개의 창을 만들 수 있기 때문에 용도에 맞는 이름을 지어주는 것이 좋아요.
여기서는 window 가 창의 이름이 되고요.
window = Tk() 통해 지정해 주었습니다.
window title() 통해 창의 타이틀을 입력해 줄 수 있어요.
위 코드를 실행하면 이렇게 빈 창이 실행 됩니다.
#기본사용법 #창만들기
2. 라벨 생성하기
#Label #라벨생성
lb_hi = Label(window, text="Hello, My name is Gomming")
Label 명령어를 이용해서 선택 된 창안에 라벨을 생성할 수 있습니다.
라벨이 들어갈 창 이름은 window 가 되겠습니다.
text를 통해 라벨에 들어갈 문구를 직접 입력할 수 있어요.
라벨은 이렇게 직접 입력하거나 외부에서 이미지 파일을 불러와서도 적용해 줄 수 있어요.
라벨의 위치를 지정해주는 방법은 여러가지가 있는데 저는 개인적으로 place 기능으로 지정해주는게 제일 좋았던거 같아요. 직접 위치를 지정해 줄 수 있어서 가장 확실한 방법이죠
lb_hi.place(x=10,y=10)
이렇게 입력하여 코드를 실행해보면 이렇게 나타납니다 !. !
저렇게 쓰면 그냥 텍스트를 나타내는 것이고 이후 바인딩이라는 기능을 입혀주면
굉장히 다양한 작업을 할 수 있게 됩니다.
다음으로 창의 크기를 정의하는 방법입니다.
3. 창크기 조절
#창크기조절#창위치지정#창위치정의
창의 위치는 geometry라는 명령어를 통해 크기와 위치를 지정해 줄 수 있습니다.
window.geometry('400x200') window.mainloop()
이렇 게 입력해주면 가로크기 400 세로크기 200의 창이 됩니다. 실행해보면 아래와 같이 나타납니다.
다음으로 창의 위치 지정 방법입니다.
은근히 검색 자주하게 되는 기능인데요
window.geometry('400x200-500+500') window.mainloop()
이렇게 입력하면 x축 y축 순서로 위치를 지정해 줄 수 있어요
실행해보면 이렇게 창이 나타나는 위치가 변경 됩니다.
4. 라벨에 색상 적용하기
#배경색상 #글자색상 #background #foreground
lb_hi = Label(window, text="Hi Gomming", bg='gray19', fg='gray60')
lb_hi.place(x=10,y=10)
위와 같이 Label 안에 bg, fg 를 이용해서 배경 색상과 글자색을 적용해 줄 수 있습니다.
실행하면 이렇게 색상이 정상 적용되어 나타납니다.
개인적으로 제가 좋아하는 색상을 적용해 봤는데요
5. 컬러맵 확인하기
#컬러맵 #컬러차트 #색상표코드
아래 코드를 실행하면 전체 색상을 한눈에 확인하실 수 있어요
from tkinter import *
MAX_ROWS = 36
FONT_SIZE = 10 # (pixels)
COLORS = ['snow', 'ghost white', 'white smoke', 'gainsboro', 'floral white', 'old lace',
'linen', 'antique white', 'papaya whip', 'blanched almond', 'bisque', 'peach puff',
'navajo white', 'lemon chiffon', 'mint cream', 'azure', 'alice blue', 'lavender',
'lavender blush', 'misty rose', 'dark slate gray', 'dim gray', 'slate gray',
'light slate gray', 'gray', 'light grey', 'midnight blue', 'navy', 'cornflower blue', 'dark slate blue',
'slate blue', 'medium slate blue', 'light slate blue', 'medium blue', 'royal blue', 'blue',
'dodger blue', 'deep sky blue', 'sky blue', 'light sky blue', 'steel blue', 'light steel blue',
'light blue', 'powder blue', 'pale turquoise', 'dark turquoise', 'medium turquoise', 'turquoise',
'cyan', 'light cyan', 'cadet blue', 'medium aquamarine', 'aquamarine', 'dark green', 'dark olive green',
'dark sea green', 'sea green', 'medium sea green', 'light sea green', 'pale green', 'spring green',
'lawn green', 'medium spring green', 'green yellow', 'lime green', 'yellow green',
'forest green', 'olive drab', 'dark khaki', 'khaki', 'pale goldenrod', 'light goldenrod yellow',
'light yellow', 'yellow', 'gold', 'light goldenrod', 'goldenrod', 'dark goldenrod', 'rosy brown',
'indian red', 'saddle brown', 'sandy brown',
'dark salmon', 'salmon', 'light salmon', 'orange', 'dark orange',
'coral', 'light coral', 'tomato', 'orange red', 'red', 'hot pink', 'deep pink', 'pink', 'light pink',
'pale violet red', 'maroon', 'medium violet red', 'violet red',
'medium orchid', 'dark orchid', 'dark violet', 'blue violet', 'purple', 'medium purple',
'thistle', 'snow2', 'snow3',
'snow4', 'seashell2', 'seashell3', 'seashell4', 'AntiqueWhite1', 'AntiqueWhite2',
'AntiqueWhite3', 'AntiqueWhite4', 'bisque2', 'bisque3', 'bisque4', 'PeachPuff2',
'PeachPuff3', 'PeachPuff4', 'NavajoWhite2', 'NavajoWhite3', 'NavajoWhite4',
'LemonChiffon2', 'LemonChiffon3', 'LemonChiffon4', 'cornsilk2', 'cornsilk3',
'cornsilk4', 'ivory2', 'ivory3', 'ivory4', 'honeydew2', 'honeydew3', 'honeydew4',
'LavenderBlush2', 'LavenderBlush3', 'LavenderBlush4', 'MistyRose2', 'MistyRose3',
'MistyRose4', 'azure2', 'azure3', 'azure4', 'SlateBlue1', 'SlateBlue2', 'SlateBlue3',
'SlateBlue4', 'RoyalBlue1', 'RoyalBlue2', 'RoyalBlue3', 'RoyalBlue4', 'blue2', 'blue4',
'DodgerBlue2', 'DodgerBlue3', 'DodgerBlue4', 'SteelBlue1', 'SteelBlue2',
'SteelBlue3', 'SteelBlue4', 'DeepSkyBlue2', 'DeepSkyBlue3', 'DeepSkyBlue4',
'SkyBlue1', 'SkyBlue2', 'SkyBlue3', 'SkyBlue4', 'LightSkyBlue1', 'LightSkyBlue2',
'LightSkyBlue3', 'LightSkyBlue4', 'SlateGray1', 'SlateGray2', 'SlateGray3',
'SlateGray4', 'LightSteelBlue1', 'LightSteelBlue2', 'LightSteelBlue3',
'LightSteelBlue4', 'LightBlue1', 'LightBlue2', 'LightBlue3', 'LightBlue4',
'LightCyan2', 'LightCyan3', 'LightCyan4', 'PaleTurquoise1', 'PaleTurquoise2',
'PaleTurquoise3', 'PaleTurquoise4', 'CadetBlue1', 'CadetBlue2', 'CadetBlue3',
'CadetBlue4', 'turquoise1', 'turquoise2', 'turquoise3', 'turquoise4', 'cyan2', 'cyan3',
'cyan4', 'DarkSlateGray1', 'DarkSlateGray2', 'DarkSlateGray3', 'DarkSlateGray4',
'aquamarine2', 'aquamarine4', 'DarkSeaGreen1', 'DarkSeaGreen2', 'DarkSeaGreen3',
'DarkSeaGreen4', 'SeaGreen1', 'SeaGreen2', 'SeaGreen3', 'PaleGreen1', 'PaleGreen2',
'PaleGreen3', 'PaleGreen4', 'SpringGreen2', 'SpringGreen3', 'SpringGreen4',
'green2', 'green3', 'green4', 'chartreuse2', 'chartreuse3', 'chartreuse4',
'OliveDrab1', 'OliveDrab2', 'OliveDrab4', 'DarkOliveGreen1', 'DarkOliveGreen2',
'DarkOliveGreen3', 'DarkOliveGreen4', 'khaki1', 'khaki2', 'khaki3', 'khaki4',
'LightGoldenrod1', 'LightGoldenrod2', 'LightGoldenrod3', 'LightGoldenrod4',
'LightYellow2', 'LightYellow3', 'LightYellow4', 'yellow2', 'yellow3', 'yellow4',
'gold2', 'gold3', 'gold4', 'goldenrod1', 'goldenrod2', 'goldenrod3', 'goldenrod4',
'DarkGoldenrod1', 'DarkGoldenrod2', 'DarkGoldenrod3', 'DarkGoldenrod4',
'RosyBrown1', 'RosyBrown2', 'RosyBrown3', 'RosyBrown4', 'IndianRed1', 'IndianRed2',
'IndianRed3', 'IndianRed4', 'sienna1', 'sienna2', 'sienna3', 'sienna4', 'burlywood1',
'burlywood2', 'burlywood3', 'burlywood4', 'wheat1', 'wheat2', 'wheat3', 'wheat4', 'tan1',
'tan2', 'tan4', 'chocolate1', 'chocolate2', 'chocolate3', 'firebrick1', 'firebrick2',
'firebrick3', 'firebrick4', 'brown1', 'brown2', 'brown3', 'brown4', 'salmon1', 'salmon2',
'salmon3', 'salmon4', 'LightSalmon2', 'LightSalmon3', 'LightSalmon4', 'orange2',
'orange3', 'orange4', 'DarkOrange1', 'DarkOrange2', 'DarkOrange3', 'DarkOrange4',
'coral1', 'coral2', 'coral3', 'coral4', 'tomato2', 'tomato3', 'tomato4', 'OrangeRed2',
'OrangeRed3', 'OrangeRed4', 'red2', 'red3', 'red4', 'DeepPink2', 'DeepPink3', 'DeepPink4',
'HotPink1', 'HotPink2', 'HotPink3', 'HotPink4', 'pink1', 'pink2', 'pink3', 'pink4',
'LightPink1', 'LightPink2',
실행화면입니다. 이렇게 적용되는 색상을 확인할 수 있어요
6.라벨 크기 정의
#라벨크기 #width #height
lb_hi = Label(window, text="Hi", bg='gray19', fg='gray60',width=10, height=3)
lb_hi.place(x=10,y=10)
width, height 를 써서 지정해 줄 수 있어요.
위 코드를 실행하면 아래와 같이 라벨의 크기가 변경됩니다.
7. 입력창 만들기, 엔트리 생성
#입력창 #엔트리 #Entry
다음으로 값을 입력해 줄 수 있는 엔트리 생성방법입니다.
import tkinter as tk
entry = tk.Entry(fg="gray19", bg="snow", width=20)
entry.place(x=10,y=80)
위와 같이 tk.Entry 명령어로 생성할 수 있어요
위와 같이 입력하려면 라이브러리 불러올 때 import tkinter as tk 와 같이 불러오시면 tk로 줄여서 입력할 수 있어요
코드 실행 결과 입니다.
이렇게 엔트리가 생성 된 걸 볼 수 있어요.
이런 엔트리에는 값을 직접 입력하거나 초기값을 지정하거나 결과 값을 띄워주도록 할 수 있답니다.
8. 엔트리에 값 입력하기
값을 입력하는 명령어는 insert 입니다.
entry = tk.Entry(fg="gray19", bg="snow", width=20)
blog='blog.naver.com/xenostep'
entry.insert(0,blog)
entry.place(x=10,y=80)
entry.insert() 명령어로 값을 넣어 줄 수 있어요
blog라는 변수 값을 넣어 준다면 위와 같이 작성할 수 있고 결과는 아래와 같습니다.
9. 엔트리에 입력 된 값 가져오기
엔트리의 값은 get 명령어로 불러올 수 있어요.
entry = tk.Entry(fg="gray19", bg="snow", width=20)
blog='blog.naver.com/xenostep'
entry.insert(0,blog)
entry.place(x=10,y=80)
entry1 = tk.Entry(fg="gray19", bg="snow", width=20)
entry1.insert(0, entry.get().split("/")[1])
entry1.place(x=10,y=100)
이렇게 entry1이라는 걸 추가하고 entry의 값을 불러와 /로 나눈 뒤 뒤에 성분을 불러오도록 합니다.
#split
실행해보면 아래와 값이 / 이후 문자를 불러와 두 번째 엔트리에 입력해줍니다.
엔트리의 문자를 지우는 방법은 delete()기능이 있는데요. 이 기능은 좀 더 뒤에서 다뤄보도록 할게요.
10. 바인딩기능 맛보기 #바인딩 #바인드 #bind #버튼클릭 #창종료 #창끄기
바인딩은 위젯에 이벤트를 부여할 수 있는 방법인데요
예를 들면 라벨을 클릭 시 어떤 기능이 동작하게 하거나 라벨의 위치, 텍스트 등을
바꿔 줄 수 있고요. 마우스 커서가 올라가거나 나왔을 때 등 마우스 모션, 키 입력에 따라 동작하도록 할 수 있어요.
아주 중요한 기능이죠 ...
그럼 라벨을 클릭하면 창이 종료되도록 해보겠습니다.
def closing(event):
window.destroy()
lb_hi = Label(window, text="Hi", bg='gray19', fg='gray60',width=10, height=3)
lb_hi.bind('<Button-1>',closing)
lb_hi.place(x=10,y=10)
바인드 기능 중 <Button-1>은 클릭 시 이벤트가 발생되도록 하는 방법입니다.
위 코드에서는 클릭 시 closing 이라는 함수가 동작하도록 하였습니다.
closing 이라는 함수는 window.destroy() 라는 명령어로
window 창이 종료되도록 하였습니다.
위 코드를 실행하고 "Hi" 라 쓰여진 라벨을 클릭하면 창이 종료되는 것을 확인할 수 있을 겁니다.
마지막으로 설명 드린 전체 코드 드립니다.
from tkinter import *
import tkinter as tk
window = Tk()
window.title("Gomming's Automation Tool")
def closing(event):
window.destroy()
lb_hi = Label(window, text="Hi", bg='gray19', fg='gray60',width=10, height=3)
lb_hi.bind('<Button-1>',closing)
lb_hi.place(x=10,y=10)
entry = tk.Entry(fg="gray19", bg="snow", width=20)
blog='blog.naver.com/xenostep'
entry.insert(0,blog)
entry.place(x=10,y=80)
entry1 = tk.Entry(fg="gray19", bg="snow", width=20)
entry1.insert(0, entry.get().split("/")[1])
entry1.place(x=10,y=100)
window.geometry('400x200-500+500')
window.mainloop()
이렇게 10개 정도 씩 주요 기능들 올려 드리면서 저도 간단하게 UI 만들어서
집에서 사용하려고 하는데요
예를 들면 비트코인 시세 불러와서 계산하는 기능이라던가
네이버 스토어 이용자 관리 프로그램 같은 것을 만들어 보려고 합니다.
관심 잇님들은 함께 진행해보면서 아이디어를 적용해보시면
더욱 즐겁게 코딩 연습해보실 수 있을거 같네요 !. !
질문이나 문의 사항 있으시면 언제나 댓글 쪽지로 남겨주세요 !.!
혹시 의뢰하고 싶은게 있으셔도 미흡하지만 매우 소정의 보수로 진행해드립니다. !. !
(매우 작은 보수로 =거의 공짜로, 퀄리티는 보장 못함 )
대표사진 삭제
- 사진 편집
-
-
작게문서 너비옆트임
-
- 삭제
사진 설명을 입력하세요.
'파이썬 GUI 만들기 (TKinter)' 카테고리의 다른 글
파이썬] TKinter GUI 포스트 ep.7 - 가상화페 시세확인 기능 개발 완료 [증감율 표시 기능 추가 (▲999%)] (0) | 2020.10.01 |
---|---|
파이썬] TKinter GUI만들기 ep.6 - 위젯 주기적으로 업데이트하기, Threading (0) | 2020.10.01 |
파이썬] 기본라이브러리 TKinter로 GUI 만들기 3탄 - 무료 아이콘 이미지 넣기, 창 추가하기, 창종료, 단축키기능 넣기 (0) | 2020.09.26 |
파이썬] 기본라이브러리로 GUI 만들기 2탄 - TKinter 기본기능(재시작, 텍스트불러오기, 삭제) (1) | 2020.09.26 |