Download presentation
Presentation is loading. Please wait.
1
두근두근 파이썬 수업 10장 tkinter로 GUI 만들기
2
이번 장에서 만들 프로그램 (1) 온도 변환 프로그램을 GUI 버전으로 다시 제작해보자
(2) 마우스를 사용하여 화면에 그림을 그리는 프로그램을 작성해보자.
3
tkinter란? tkinter는 파이썬에서 그래픽 사용자 인터페이스(GUI: graphical user interface)를 개발할 때 필요한 모듈
4
tkinter의 유래 tkinter는 예전부터 유닉스 계열에서 사용되던 Tcl/Tk 위에 객체 지향 계층을 입힌 것이다. Tk는 John Ousterhout에 의하여 Tcl 스크립팅 언어를 위한 GUI 확장으로 개발
5
Tkinter의 위젯들
7
단순 위젯과 컨테이너 위젯 단순 위젯: Button, Canavs, Checkbutton, Entry, Label, Message 등이 여기에 속한다. 컨테이너 컴포넌트: 다른 컴포넌트를 안에 포함할 수 있 는 컴포넌트로서 Frame, Toplevel, LabelFrame, PanedWindow 등이 여기에 속한다.
8
버튼이 있는 윈도우를 생성해보자 하나의 버튼이 있는 윈도우를 생성해보자 from tkinter import *
window = Tk() button = Button(window, text="클릭하세요!") button.pack() window.mainloop()
9
엔트리와 레이블 위젯도 사용해보자. from tkinter import * window = Tk()
l1 = Label(window, text="화씨") l2 = Label(window, text="섭씨") l1.pack() l2.pack() e1 = Entry(window) e2 = Entry(window) e1.pack() e2.pack() b1 = Button(window, text="화씨->섭씨") b2 = Button(window, text="섭씨->화씨") b1.pack() b2.pack() window.mainloop( )
10
배치 관리자 압축(pack) 배치 관리자 격자(grid) 배치 관리자 절대(place) 배치 관리자
11
격자 배치 관리자 from tkinter import * window = Tk()
l1 = Label(window , text="화씨") l2 = Label(window, text="섭씨") l1.grid(row=0, column=0) l2.grid(row=1, column=0) e1 = Entry(window) e2 = Entry(window) e1.grid(row=0, column=1) e2.grid(row=1, column=1) b1 = Button(window, text="화씨->섭씨") b2 = Button(window, text="섭씨->화씨") b1.grid(row=2, column=0) b2.grid(row=2, column=1) window.mainloop()
12
버튼 이벤트 처리 from tkinter import * def process(): print("안녕하세요?")
window = Tk() button = Button(window, text="클릭하세요!", command=process) button.pack() window.mainloop()
13
버튼 이벤트 처리
14
버튼 이벤트 처리 from tkinter import * def process(): e2.insert(0, "100")
window = Tk() l1 = Label(window , text="화씨") l2 = Label(window, text="섭씨") l1.grid(row=0, column=0) l2.grid(row=1, column=0) e1 = Entry(window) e2 = Entry(window) e1.grid(row=0, column=1) e2.grid(row=1, column=1) b1 = Button(window, text="화씨->섭씨", command=process) b2 = Button(window, text="섭씨->화씨") b1.grid(row=2, column=0) b2.grid(row=2, column=1) window.mainloop()
15
버튼 이벤트 처리 from tkinter import * def process():
temperature = float(e1.get()) mytemp = (temperature-32)*5/9 e2.insert(0, str(mytemp)) window = Tk() l1 = Label(window , text="화씨") l2 = Label(window, text="섭씨") l1.grid(row=0, column=0) l2.grid(row=1, column=0) e1 = Entry(window) e2 = Entry(window) e1.grid(row=0, column=1) e2.grid(row=1, column=1) b1 = Button(window, text="화씨->섭씨", command=process) b2 = Button(window, text="섭씨->화씨") b1.grid(row=2, column=0) b2.grid(row=2, column=1) window.mainloop()
16
버튼 이벤트 처리 from tkinter import * def process():
temperature = float(e1.get()) mytemp = (temperature-32)*5/9 e2.insert(0, str(mytemp)) window = Tk() l1 = Label(window , text="화씨", font='helvetica 16 italic') l2 = Label(window, text="섭씨", font='helvetica 16 italic') l1.grid(row=0, column=0) l2.grid(row=1, column=0) e1 = Entry(window, bg="yellow", fg="white") e2 = Entry(window, bg="yellow", fg="white") e1.grid(row=0, column=1) e2.grid(row=1, column=1) b1 = Button(window, text="화씨->섭씨", command=process) b2 = Button(window, text="섭씨->화씨") b1.grid(row=2, column=0) b2.grid(row=2, column=1) window.mainloop()
17
절대 위치 배치 관리자 from tkinter import * window = Tk()
w = Label(window, text="박스 #1", bg="red", fg="white") w.place(x=0, y=0) w = Label(window, text="박스 #2", bg="green", fg="black") w.place(x=20, y=20) w = Label(window, text="박스 #3", bg="blue", fg="white") w.place(x=40, y=40) window.mainloop()
18
이미지 표시 프로그램 from tkinter import * def change_img():
path = inputBox.get() img = PhotoImage(file = path) imageLabel.configure(image = img) imageLabel.image = img window = Tk() photo = PhotoImage(file="wl.gif") imageLabel = Label(window, image=photo) imageLabel.pack() inputBox = Entry(window) inputBox.pack() button = Button(window, text='Submit', command=change_img) button.pack() window.mainloop()
19
MyPaint 프로그램 #1 다음과 같이 마우스를 움직여서 화면에 그림을 그리는 윈 도우의 그림판과 비슷한 프로그램을 작성해보자.
20
캔버스 위젯 tkinter에서 그림을 그리려면 캔버스(canvas)라는 위젯이 필요하다. Canvas 위젯을 사용하면 많은 그래픽 기능을 사용할 수 있다. window = Tk() ... canvas = Canvas(window, width=300, height=200) canvas.create_oval(x0, y0, x1, y1, option, ...)
21
MyPaint 프로그램 #2 from tkinter import * def paint(event):
x1, y1 = ( event.x-1 ), ( event.y+1 ) x2, y2 = ( event.x-1 ), ( event.y+1 ) canvas.create_oval( x1, y1, x2, y2, fill = "black") window = Tk() canvas = Canvas(window) canvas.pack() canvas.bind("<B1-Motion>", paint) window.mainloop()
22
MyPaint 프로그램 #3 앞의 MyPaint 프로그램에서 색상을 변경할 수 있도록 하 여보자. 캔버스 위젯 아래에 버튼 “빨강색”을 추가하고 이 버튼을 누르면 색상이 빨강색으로 변경되게 하자.
23
from tkinter import * mycolor = "blue" def paint(event): x1, y1 = ( event.x-1 ), ( event.y+1 ) x2, y2 = ( event.x-1 ), ( event.y+1 ) canvas.create_oval( x1, y1, x2, y2, fill = mycolor) def change_color(): global mycolor mycolor="red" window = Tk() canvas = Canvas(window) canvas.pack() canvas.bind("<B1-Motion>", paint) button = Button(window, text="빨강색", command=change_color) button.pack() window.mainloop()
24
계산기 프로그램 #1 우리는 다음과 같은 계산기를 작성해보자. 약간 어려운 내용도 있어서 입문자인 경우에는 건너뛰어도 된다.
25
사용자 인터페이스 작성 계산기는 격자 배치 관리자를 사용 하면 될 것이다. 그리 고 버튼과 엔트리 위젯만 있으면 된다.
26
계산기 프로그램 #2 from tkinter import * window = Tk()
window.title("My Calculator") display = Entry(window, width=33, bg="yellow") display.grid(row=0, column=0, columnspan=5)
27
계산기 프로그램 #3 button_list = [ '7', '8', '9', '/', 'C',
'4', '5', '6', '*', ' ', '1', '2', '3', '-', ' ', '0', '.', '=', '+', ' ' ] row_index = 1 col_index = 0 for button_text in button_list: Button(window, text=button_text, width=5).grid(row=row_index, column=col_index) col_index += 1 if col_index > 4: row_index += 1
28
계산기 프로그램 #4 from tkinter import * window = Tk()
window.title("My Calculator") display = Entry(window, width=33, bg="yellow") display.grid(row=0, column=0, columnspan=5) button_list = [ '7', '8', '9', '/', 'C', '4', '5', '6', '*', ' ', '1', '2', '3', '-', ' ', '0', '.', '=', '+', ' ' ] row_index = 1 col_index = 0 for button_text in button_list: Button(window, text=button_text, width=5).grid(row=row_index, column=col_index) col_index += 1 if col_index > 4: row_index += 1
29
이번 장에서 배운 것 리스트는 항목들을 모아둔 곳이다. 리스트의 항목은 어떤 것이든 가능하다.
공백 리스트를 만들고 append()를 호출하여서 코드로 항 목을 추가할 수 있다. 딕션너리는 키와 값으로 이루어진다. 딕션너리에 키를 제시하면 값을 반환한다.
30
Q & A
Similar presentations