파이썬 (pythoon)

[python study] tkinter 파이썬 gui - cookbook

working for you 2021. 6. 25. 02:52
반응형

너무 기초 없이 띄엄띄엄 하다보니 흥미가 떨어지고 있다.

다시 처음부터 책을 보며 공부한 흔적을 남겨보자.

책출처 - 파이썬GUI 프로그래밍  쿡북

 


01. 첫 gui 만들기

1
2
3
4
5
import tkinter as tk
 
win = tk.Tk()
win.title('안녕 이제 시작이야 gui')
win.mainloop()
cs

 

 


02. gui 사이즈 조정하기

1
2
3
4
5
6
7
8
import tkinter as tk
 
win = tk.Tk()
win.title('안녕 이제 시작이야 gui')
# win.resizable(True, False) # win.resizable(False, True)
win.resizable(FalseFalse# 마우스 확장 잠김
win.geometry('500x200'# 사이즈 세팅
win.mainloop()
cs

gui 기본 사이즈 세팅 : win.geometry('500x200')

마우스 크기 변경 불가 : win.resizable(False, False)

원본gui사이즈(마우스 확장 잠김)

가로만 변경 가능 : win.resizable(True, False)

마우스 가로 확장

세로만 변경 가능 : win.resizable(False, True)

마우스 세로 확장

 


03. 라벨(label)

1
2
3
4
5
6
7
8
9
import tkinter as tk
from tkinter import ttk #ttk 모듈 import
 
win = tk.Tk()
ttk.Label(win, text='난 라벨이라고해').grid(column=0, row=0# grid는 gui에 위치지정 0,0
win.mainloop()
cs

grid는 gui에 위치를 정해준다.


04. 버튼(button) - 버튼값, 라벨값, 배경색 변경 이벤트

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import tkinter as tk
from tkinter import ttk #ttk 모듈 import
 
win = tk.Tk()
win.title('안녕 이제 시작이야 gui')
 
################ 함수(콜백) ################
def click_me():
    bu.configure(text='클릭해줘서 고마워',state='disabled' # 버튼 내용 변경/ state=버튼비활성화
    memo.configure(text='ok'# 버튼 내용 변경
 
################ 라벨 ################
memo = ttk.Label(win, text='title'# 라벨내용
memo.grid(column=0, row=0# 라벨위치
 
################ 버튼 ################
bu = ttk.Button(win, text='나를 클릭해라', command=click_me) #command= click_me 함수 불러오기
bu.grid(column=1, row=0# 버튼위치 (column = 열 / row = 행)
 
 
 
win.mainloop()
cs

 

버튼 클릭전

command ='click_me' # 버튼 이벤트 실행

configure(text='텍스트변경값') #이벤트 실행시 정보변경

버튼클릭 후

memo.configure(text='ok',foreground='red') # foreground 옵션값은 글씨색상변경

foreground='red'

 

state ='disabled' # 클릭 후 버튼 비활성화

  bu.configure(state='disabled')


05. 텍스트박스(Entry)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import tkinter as tk
from tkinter import ttk #ttk 모듈 import
 
win = tk.Tk()
win.title('안녕 이제 시작이야 gui')
 
################ 함수(콜백) ################
def click_me():
    bu.configure(text='클릭해줘서 고마워'# 버튼 내용 변경
    memo.configure(text='ok'+name.get(), foreground='red'# get()으로 값을 적용
 
################ 라벨 ################
memo = ttk.Label(win, text='title'# 라벨내용
memo.grid(column=0, row=0# 라벨위치
 
################ 텍스트박스 ################
name = tk.StringVar() # 문자 name 변수선언
text_in = ttk.Entry(win, width='12', textvariable=name)
text_in.grid(column=0,row=1)
 
################ 버튼 ################
bu = ttk.Button(win, text='나를 클릭해라', command=click_me) #command= click_me 함수 불러오기
bu.grid(column=1, row=1# 버튼위치 (column = 열 / row = 행)
 
win.mainloop()
cs

한줄짜리 텍스트 박스 == Entry

 

StringVar() : tkinter을 사용하려면 name를 StringVar() 타입으로 선언해야한다.

이유는 tkinter가 파이썬이 아니기 때문,, 파이썬에 사용은 가능하지만 같은 언어가 아님.

 

get() : 텍스트박스에 입력 값을 호출 ex) 변수.get()

 

focus() : gui실행시 위젯을 지정해 활성화해 준다.
text_in.focus()


06. 콤보박스(Combobox)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import tkinter as tk
from tkinter import ttk #ttk 모듈 import
 
win = tk.Tk()
win.title('안녕 이제 시작이야 gui')
 
################ 함수(콜백) ################
def click_me():
    bu.configure(text='클릭해줘서 고마워'# 버튼 내용 변경
    bu.configure(state='disabled'# 버튼 내용 변경
    memo.configure(text='ok'+'-'+name.get()+'-'+com_bo.get(), foreground='red')
 
################ 라벨 ################
memo = ttk.Label(win, text='title'# 라벨내용
memo.grid(column=0, row=0# 라벨위치
 
################ 텍스트박스 ################
name = tk.StringVar() # 문자 name 변수선언
text_in = ttk.Entry(win, width='12', textvariable=name)
text_in.grid(column=0,row=1)
 
################ 콤보박스 ################
com = tk.StringVar() # com StringVar() 타입 변수선언
com_bo = ttk.Combobox(win, width=12, textvariable=com)
com_bo['values'= (100,200,300,400,500,600,700)
com_bo.grid(column=1,row=1)
com_bo.current(0# 콤버박스 첫번째값 지정
 
################ 버튼 ################
bu = ttk.Button(win, text='나를 클릭해라', command=click_me) #command= click_me 함수 불러오기
bu.grid(column=2, row=1# 버튼위치 (column = 열 / row = 행)
 
win.mainloop()
cs

 

com_bo['values'= (100,200,300,400,500,600,700) : 콤보박스 값을 튜플로 적용

current(0)  : 0 = 100 / 1 = 200 / 2 = 300 실행시 첫 기본값 지정 

    memo.configure(text='ok'+'-'+name.get()+'-'+com_bo.get(), foreground='red')


07. 체크버튼(Checkbutton)


08. 라디오버튼(Radiobutton)


09. 스크롤텍스트 박스(ScrolledText)

tk.WORD = 단어별로 줄바꿈을 표시

[스크롤 텍스트 박스에 직접 글을써며 엔터 쳤을때 화면]

스크롤 텍스트 박스에 직접 글을써며 엔터 쳤을때

[스크롤 텍스트 박스-> 텍스트박스 input내용을 버튼 클릭시 표시하기]

scroll.insert(tk.INSTER, '내용')

insert(tk.INSTER, '안녕하세요'+name.get())

self.txbox.insert(INSERT, '안녕하세요')

self.txbox.delete(1.0,'end') #내용지우기

 


소스전체보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import tkinter as tk
from tkinter import ttk #ttk 모듈 import
from tkinter import scrolledtext
 
 
win = tk.Tk()
win.title('안녕 이제 시작이야 gui')
 
################ 함수(콜백) ################
def click_me():
    bu.configure(text='클릭해줘서 고마워'# 버튼 내용 변경
    bu.configure(state='disabled'# 버튼 내용 변경
    memo.configure(text='ok'+'-'+name.get()+'-'+com_bo.get(), foreground='red')
    scroll.insert(tk.INSERT, '안녕하세요' + name.get())
 
################ 라벨 ################
memo = ttk.Label(win, text='title'# 라벨내용
memo.grid(column=0, row=0# 라벨위치
 
################ 텍스트박스 ################
name = tk.StringVar() # 문자 name 변수선언
text_in = ttk.Entry(win, width='12', textvariable=name)
text_in.grid(column=0,row=1)
 
################ 콤보박스 ################
com = tk.StringVar() # com StringVar() 타입 변수선언
com_bo = ttk.Combobox(win, width=12, textvariable=com)
com_bo['values'= (100,200,300,400,500,600,700)
com_bo.grid(column=1,row=1)
com_bo.current(0# 콤버박스 첫번째값 지정
 
################ 버튼 ################
bu = ttk.Button(win, text='나를 클릭해라', command=click_me) #command= click_me 함수 불러오기
bu.grid(column=2, row=1# 버튼위치 (column = 열 / row = 행)
 
################ 텍스트스크롤박스 ################
sc_w = 50
sc_h = 5
scroll = scrolledtext.ScrolledText(win, width=sc_w, height=sc_h, wrap=tk.WORD)
scroll.grid(column=0, columnspan=3)
 
 
win.mainloop()
cs

 

반응형