Professional Documents
Culture Documents
(3rd) CT Python CH11 (2) Tkinter
(3rd) CT Python CH11 (2) Tkinter
P2 반복문으로 배치하기
P3 메뉴 만들기 연습
P4 메모장
P5 회원가입과 로그인
P6 BMI 계산기 2
P7 계산기
Tkinter 라이브러리란 ?
111
그 림 출 처 : https://howto.lintel.in/building-hello-world-using-python-tkin-
ter/
Python 으로 GUI 를 만드는 법 Tkinter CH11 tkinter 라이브러리
Tkinter 라이브러리란 ?
메뉴
레이블
라디오버튼 프레임
체크박스
버튼
엔트리
리스트박스
112
그 림 출 처 : https://howto.lintel.in/building-hello-world-using-python-tkin-
ter/
Tkinter 구성요소 파악하기 CH11 tkinter 라이브러리
Tkinter 구성요소 이름 알기
명칭 설명 비고
Button 이벤트를 발생시키는 버튼을 만든다 . ☆☆☆
Canvas 선을 그리거나 도형을 그릴 수 있는 캔버스를 만든다 . ☆
Checkbutton 몇 개의 옵션을 선택할 수 있는 버튼을 만든다 . ☆
Entry 텍스트를 입력할 수 있는 한줄짜리 칸을 만든다 . ☆☆☆
Frame Root 아래 다시 여러 위젯을 묶는 컨테이너를 만든다 . ☆
Label 사용자에게 보여질 한줄짜리 텍스트를 넣는다 . ☆☆☆
Listbox 리스트 중 하나를 선택한다 . ☆
Menubutton Root 에 Menu 를 만든다 . ☆☆
Menu 메뉴버튼 아래 각각의 메뉴를 구성한다 . ☆☆
Message 사용자에게 여러줄의 텍스트를 보여준다 . ☆
Radiobutton 여러 옵션 중 하나를 선택한다 . ☆
Scale 슬라이더를 사용한 위젯을 제공한다 .
Scrollbar 여러 리스트를 스크롤바가 있는 박스로 보여준다 .
Text 여러 줄의 텍스트를 사용자에게 보여준다 . ☆☆
Toplevel 독립된 윈도우 창을 하나 더 띄운다 .
Spinbox 화살표로 숫자의 크기를 올리거나 내리는 창을 만든다 .
PanedWindow 정렬된 여러개의 프레임 판을 만듭니다 .
LabelFrame 이름이 있는 프레임을 만듭니다 . ☆
112
tkMessageBox 사용자에게 메시지박스에 메시지를 실어 출력합니다 . ☆
entry = Entry(root)
entry.pack()
button = Button(root, text=" 확인 ")
button.pack()
root.mainloop() # 사용자와 대화를 위해 대기
명칭 설명 사용법
bg background, 배경색 bg="pink"
bd border line, 테두리 굵기 bd=3
font 글씨체 font="arial"
fg 글씨의 색 fg="red"
text 위젯에 들어갈 내용 text="blah"
height 위젯의 세로 크기 height=100
width 위젯의 가로 크기 width=100
highlightcolor 위젯이 선택되었을 때 나타날 색 highlightcolor="beige"
cursor 위젯에 마우스를 올릴 때 나타나는 커서 모양 cursor="pirate"
명칭 설명 사용법
names = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
i = 0
fora a,x
for in zip(range(4),range(0,16,4)):
in range(4):
forb b,y
for in zip(range(4),range(0,4)):
in range(4):
label= =Label(root,
label Label(root,text=names[i],
text=names[x+y], width=10,
width=10, bg="yellow", fg="red")
bg="yellow",
fg="red") label.grid(row=a, column=b)
i print(a,b,x,y)
= i + 1
label.grid(row=a, column=b)
root.mainloop()
116
root.mainloop()
메뉴만들기 CH11 tkinter 라이브러리
메뉴 만들기 Menu
…
1. 메뉴바 ( 변수 ) 에 Menu( 윈도우창 ) 를 담아둔다 .
menubar=Menu(root)
2. 상 위 메 뉴 1 을 ( 위 의 “ File”) 를 메 뉴 바 에 서
f1=Menu(menubar, tearoff=0)
생성한다 .
f1.add_command(label=" 새 파 일 ",
3. 상위메뉴 1 에 하위 메뉴들을 등록한다 .
command=msgbox)
f1.add_command(label=" 열기 ", command=msgbox)
f1.add_command(label=" 저장 ", command=msgbox)
f1.add_separator()
f1.add_command(label="Exit", command=quit)
116
…
이벤트 명 설명 핸들러 설명
<Key> 키보드 키 입력
[ 새 파일 ] : 전체 텍스트를 삭제합니다 .
[ 열기 ] : memojang.txt 의 내용을 불러들여 현재 텍스트에 덮어씌웁니다 .
만약 memojang.txt 파일이 없을 경우 에러메시지를 출력하라 .
[ 저장 ] ; memojang.txt 에 텍스트를 저장합니다 . 기존 파일이 있을 경우 덮어씌웁니다 .
[ 종료 ] : 메모장을 종료합니다 .
1P4
f = open('memojang.txt', 'w') menu=file)
f.write(txt.get(1.0, END)) root.config(menu=menubar)
메모장 만들기
f.close() root.mainloop() CH11 tkinter 라이브러리
회원가입과 로그인
tkinter 와 pickle 을 이용하여 회원가입을 할 수 있고 , 로그인을 할 수 있는 함수를 각각 작성하여라 .
>>> sign()
def ok():
if ent2.get() == ent3.get():
idpw = {'asdf': 'asdf'} 가입완료
{ent1.get():ent2.get()}
>>> login()
with open('user_list.txt', 'ab') as f:
pickle.dump(idpw, f)
root.quit()
root.destroy()
print(idpw, " 가입완료 ")
f.close()
else:
1P5
messagebox.showerror(" 확인 ", " 비밀번호가 다릅니다 .")
def cancel():
회원가입과 로그인 CH11 tkinter 라이브러리
root.quit()
회원가입과 로그인
else:
messagebox.showerror(" 확인 ", " 비밀번호가 다릅니다 .")
tkinter 와 pickle 을 이용하여 회원가입을 할 수 있고 , 로그인을 할 수 있는 함수를 각각 작성하여라 .
def cancel():
root.quit()
root.destroy()
>>> sign()
1P5
ent2.grid(row=1, column=1, columnspan=2)
ent3.grid(row=2, column=1, columnspan=2)
회원가입과 로그인
btn1.grid(row=3, column=1) CH11 tkinter 라이브러리
회원가입과 로그인
ent3.grid(row=2, column=1, columnspan=2)
btn1.grid(row=3, column=1)
tkinter 와 pickle 을 이용하여 회원가입을 할 수 있고 , 로그인을 할 수 있는 함수를 각각 작성하여라 .
btn2.grid(row=3, column=2)
root.mainloop()
>>> sign()
# 로그인
def login():
window = Tk()
window.title(" 로그인 ")
1P5
break
idpw_dic.update(idpw)
회원가입과 로그인 CH11 tkinter 라이브러리
if ent1.get() in idpw_dic and idpw_dic[ent1.get()] == ent2.get():
회원가입과 로그인idpw_dic.update(idpw)
if ent1.get() in idpw_dic and idpw_dic[ent1.get()] == ent2.get():
tkinter 와 pickle messagebox.showinfo("
을 이용하여 회원가입을 할 수로그인 있고 , 로그인을
성공 ",할ent1.get()+"
수 있는 함수를 각각 작성하여라 . ")
님 안녕하세요
window.quit()
window.destroy()
>>> sign()
else:
messagebox.showerror(" 에러 ", " 아이디와 비밀번호를 확인하세요 .")
f.close()
def cancel():
window.quit()
window.destroy()
{'asdf': 'asdf'} 가입완료
>>> login()
lb1 = Label(window, text=" 아이디 ")
lb2 = Label(window, text=" 패스워드 ")
ent1 = Entry(window)
ent2 = Entry(window, show="*")
btn1 = Button(window, text=" 로그인 ", command=ok)
btn2 = Button(window, text=" 취소 ", command=cancel)
1P5
lb1.grid(row=0, column=0)
lb2.grid(row=1, column=0)
회원가입과 로그인
ent1.grid(row=0, column=1, columnspan=2) CH11 tkinter 라이브러리
회원가입과 로그인 column=0)
lb2.grid(row=1,
ent1.grid(row=0,
tkinter column=1,
와 pickle 을 이용하여 회원가입을 columnspan=2)
할 수 있고 , 로그인을 할 수 있는 함수를 각각 작성하여라 .
ent2.grid(row=1, column=1, columnspan=2)
btn1.grid(row=2, column=1)
>>>column=2)
btn2.grid(row=2, sign()
window.mainloop()
판단 저체중 정상 과체중 비만
def ok():
m =BMI 지수
int(t.get()) < 18.5
/ 100 18.5~22.9#t.get()23.0~24.9
을 정수형으로 > 25
bmi = 판단
round(int(k.get())
저체중/ (m*m), 2)정상 #BMI 계산과체중 후 소수 둘째자리
비만
if bmi > 29.9:
conclusion.config(bg="pink", fg="red", font="bold")
elif bmi >= 26:
conclusion.config(bg="yellow", fg="blue", font="bold")
elif bmi >= 18.5:
conclusion.config(bg="beige", fg="black", font="bold")
else:
conclusion.config(bg="gray", fg="black")
conclusion.delete(0,END)
1P6
conclusion.insert(0, " 당신의 BMI 지수는 %s"%bmi)
BMI 계산기 2 CH11 tkinter 라이브러리
tl = Label(root, text=" 키 (cm)")
로 BMI 계산기 프로그램
GUIconclusion.insert(0, 만들기
" 당신의 BMI 지수는 %s"%bmi)
이전에 만들었던 BMI 계산기를 GUI 인터페이스로 구현하라 .
tl = Label(root, text=" 키 (cm)")
kl = Label(root, text=" 몸무게 ")
t = Entry(root)
BMI 지수
k = Entry(root) < 18.5 18.5~22.9 23.0~24.9 > 25
btn = Button(root,
판단 text=" 결과확인 ", command=ok)
저체중 정상 과체중 비만
tl.grid(row=0, column=0)
kl.grid(row=1, column=0)
t.grid(row=0, column=1)
k.grid(row=1, column=1)
btn.grid(row=2, column=0, columnspan=2, ipadx=80)
def numinput(event):
ent.insert(END, event)
def delentry():
ent.delete(0,END)
def calc():
con = eval(ent.get())
ent.delete(0,END)
ent.insert(0, con)
# 7 8 9 + 4 5 6 - 1 2 3 X C 0 = / 순서대로 배치
ent = Entry(root)
ent.grid(row=0, column=0, columnspan=4)
1P6
button8 = Button(root,
ipadx=10)계산기
text="8", command=lambda: numinput(8)).grid(row=1,column=1,
CH11 tkinter 라이브러리
button7 = Button(root, text="7", command=lambda: numinput(7)).grid(row=1,column=0,
GUI 계산기 만들기
ipadx=10)
button8
람다식과 = Button(root,
반복문을 이용하여 text="8", command=lambda:
계산기를 만들어보자 . 다른 방법을 numinput(8)).grid(row=1,column=1,
이용하여도 좋다 .
ipadx=10)
button9 = Button(root, text="9", command=lambda: numinput(9)).grid(row=1,column=2,
ipadx=10)
buttonplus = Button(root, text="+", command=lambda: numinput("+")).grid(row=1,column=3,
ipadx=10)
button4 = Button(root, text="4", command=lambda: numinput(4)).grid(row=2,column=0,
ipadx=10)
…( 반복 중략 )
buttonmultiply = Button(root, text="X", command=lambda:
numinput("*")).grid(row=3,column=3, ipadx=10)
buttonC = Button(root, text="C", command=delentry).grid(row=4,column=0, ipadx=10)
button0 = Button(root, text="0", command=lambda: numinput(0)).grid(row=4,column=1,
ipadx=10)
buttoneval = Button(root, text="=", command=calc).grid(row=4,column=2, ipadx=10)
buttondivision = Button(root, text="/", command=lambda:
numinput("/")).grid(row=4,column=3, ipadx=10)
1P6
ent.delete(0,END)
계산기
root.mainloop() CH11 tkinter 라이브러리
11. Tkinter 라이브러리
P2 반복문으로 배치하기
P3 메뉴 만들기 연습
P4 메모장
P5 회원가입과 로그인
수고하셨습니다 . P6 BMI 계산기 2
다음시간 – Chapter12 객체와 클래스 P7 계산기