티스토리 뷰

Programing/Python

Python - 18. GUI

HNNN 2017. 4. 5. 02:18

▶1981년 제록스 가 처음 개발
▶1984년 Apple 의 매킨토시가 개인용으로 GUI 환경의 OS 를 개발, 상용화에 성공함.
▶Unix 시스템에서는 X-Window 라는 GUI 환경을 개발, 발전
▶Apple 의 Mac OS, MS 의 Windows 등을 통해서 발전


▶Tcl/Tk는 GUI 라이브러리

▶Tcl/Tk는 Linux, Mac OS, Unix , Windows 에서 사용이 가능하다.

▶Open Source 로서 많은 Widget 을 지원한다.
▶Tcl/Tk 를 python에서 사용하도록 만든 라이브러리
▶Python 에서 공식적으로 지원하는 GUI 라이브러리


1. Tkinter 기본 구문



▶pack()


1)

from tkinter import *
root = Tk()


lbl =Label(root,text="이름")
lbl.pack()


root.mainloop()



2)

from tkinter import *
root = Tk()


lbl =Label(root,text="이름")
lbl.pack()


txt =Entry(root)
txt.pack()


root.mainloop()


3)

from tkinter import *
root = Tk()


lbl =Label(root,text="이름")
lbl.pack()


txt =Entry(root)
txt.pack()


btn =Button(root, text="ok")
btn.pack()


root.mainloop()



4)

from tkinter import *
root = Tk()


lbl =Label(root,text="이름")
lbl.pack()


txt =Entry(root)
txt.pack()


btn =Button(root, text="ok")
btn.pack(fill=X)


root.mainloop()



5)


from tkinter import *
root = Tk()


lbl =Label(root,text="이름", bg='blue',fg='white')
lbl.pack(fill=X)


txt =Entry(root)
txt.pack()


btn =Button(root, text="ok")
btn.pack(fill=X,padx=10,pady=10)


root.mainloop()



grid(row=X, column=Y)


1)

from tkinter import *
root = Tk()


lbl =Label(root,text="이름")
lbl.grid(row=0,column=0)


txt =Entry(root)
txt.grid(row=0,column=1)


btnok =Button(root, text="ok")
btnok.grid(row=1,column=1)


btncancel = Button(root, text="Cancel")
btncancel.grid(row=1,column=2)


root.mainloop()




※ padx : 바깥쪽의 공간을 늘림

   ipadx : 안쪽의 공간을 늘림

2)


from tkinter import *
root = Tk()


lbl =Label(root,text="이름")
lbl.grid(row=0,column=0,padx=10)


txt =Entry(root)
txt.grid(row=0,column=1,columnspan=2,padx=10,pady=10)


btnok =Button(root, text="ok")
btnok.grid(row=1,column=1,padx=5,pady=5)


btncancel = Button(root, text="Cancel")

btncancel.grid(row=1,column=2)
root.mainloop()




3)

--> 좀더 이쁜 모양이 만들어짐


from tkinter import *


def okclick():
    print("Ok Click")

def cancelClick():
    print("Cancel Click")
   
root = Tk()


lbl =Label(root,text="이름")
lbl.grid(row=0,column=0,padx=10)


txt =Entry(root)
txt.grid(row=0,column=1,columnspan=2,padx=10,pady=10)


btnok =Button(root, text="ok")
btnok.grid(row=1,column=1,ipadx=20, padx=5,pady=5)


btncancel = Button(root, text="Cancel")
btncancel.grid(row=1,column=2,ipadx=10 ,padx=5,pady=5)

root.mainloop()




※ 출력되도록 하는 소스

from tkinter import *
from tkinter import messagebox


def okclick():
    print("Ok Click")
    name = txt.get()
    messagebox.showinfo("이름",name)

def cancelClick():
    root.destroy()
   
root = Tk()

lbl =Label(root,text="이름")
lbl.grid(row=0,column=0,padx=10)


txt =Entry(root)
txt.grid(row=0,column=1,columnspan=2,padx=10,pady=10)


btnok =Button(root, text="ok",command=okclick)
btnok.grid(row=1,column=1,ipadx=20, padx=5,pady=5)


btncancel = Button(root, text="Cancel",command=cancelClick)
btncancel.grid(row=1,column=2,ipadx=10 ,padx=5,pady=5)


root.mainloop()



2. Tkinter bind

→위젯.bind(event명, handler)


Event 명
   <Button-1> 마우스 왼쪽 버튼 클릭
   <Button-2> 마우스 중간 버튼 클릭
   <Button-3> 마우스 오른쪽 버튼 클릭
   <Double-Button-1> 왼쪽 버튼 더블클릭
   <Return> Enter 키 눌려짐
   <Key> 키가 눌려짐

 

key,sym 을 출력함

1)

from tkinter import *
from tkinter import messagebox


def okclick():
    print("Ok Click")
    name = txt.get()
    messagebox.showinfo("이름",name)

def keyPressed(event):
    print("Key:" , event.char," Sym:", event.keysym)

def cancelClick():
    root.destroy()
   
root = Tk()


lbl =Label(root,text="이름")
lbl.grid(row=0,column=0,padx=10)


txt = Entry(root)
txt.grid(row=0, column=1, padx = 5, pady = 5 , columnspan=2 )
txt.bind('<Key>', keyPressed)


btnok =Button(root, text="ok",command=okclick)
btnok.grid(row=1,column=1,ipadx=20, padx=5,pady=5)


btncancel = Button(root, text="Cancel",command=cancelClick)
btncancel.grid(row=1,column=2,ipadx=10 ,padx=5,pady=5)


root.mainloop()

2)

from tkinter import *
from tkinter import messagebox


def okclick():
    print("Ok Click")
    name = txt.get()
    messagebox.showinfo("이름",name)


def keyPressed(event):
    print("Key:" , event.char," Sym:", event.keysym)
    if event.keysym == 'Return':
        okclick()


def cancelClick():
    root.destroy()
   
root = Tk()


lbl =Label(root,text="이름")
lbl.grid(row=0,column=0,padx=10)


txt = Entry(root)
txt.grid(row=0, column=1, padx = 5, pady = 5 , columnspan=2 )
txt.bind('<Key>', keyPressed)


btnok =Button(root, text="ok",command=okclick)
btnok.grid(row=1,column=1,ipadx=20, padx=5,pady=5)


btncancel = Button(root, text="Cancel",command=cancelClick)
btncancel.grid(row=1,column=2,ipadx=10 ,padx=5,pady=5)


root.mainloop()

3. 그림그리는 작업


1)직선그리기


from tkinter import *


master = Tk()


canvas_width=80
canvas_height=40


w= Canvas(master, width = canvas_width,height=canvas_height)
w.pack()


y=int(canvas_height/2)
w.create_line(0,y,canvas_width,y,fill='blue')


master.mainloop()



2) 타원그리기


from tkinter import *


master =Tk()


canvas_width=200
canvas_height=200


w= Canvas(master, width = canvas_width,height=canvas_height)
w.pack()


y=int(canvas_height/2)

w.create_line(0,0,100,40,fill='blue')
w.create_oval(10,10,180,130)


master.mainloop()



3) 마우스로 그림그리기


from tkinter import *


canvas_width=200
canvas_height=200


def paint(event):
    python_green="#476042"
    x1,y1=(event.x-1),(event.y-1)
    x2,y2=(event.x+1),(event.y+1)
    w.create_oval(x1,y1,x2,y2,fill=python_green)


master =Tk()
master.title("Painting")


w= Canvas(master, width = canvas_width,height=canvas_height)
w.pack(expand=YES,fill=BOTH)
w.bind('<B1-Motion>',paint)


master.mainloop()




4. Tkinter Dialog


1) 기본적인 창


from tkinter import *
from tkinter.messagebox import *


def answer():
    showerror("Answer","Sorry")

def callback():
    if askyesno("Verify","Really Quit?"):
        showwarning("Yes","Not yet")
    else :
        showinfo("No","Quit")

   
master =Tk()
master.title("Painting")


Button(text="Quit",command=callback).pack(fill=X)
Button(text="Answer",command=answer).pack(fill=X)


master.mainloop()



Quit 선택



'예'선택


Answer 선택



2) 파일 선택이 다양한 Dialog



from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import askopenfilename


def answer():
    showerror("Answer","Sorry")

def callback():
    if askyesno("Verify","Really Quit?"):
        showwarning("Yes","Not yet")
    else :
        showinfo("No","Quit")
def fileOpen():
    name= askopenfilename()
    print (name)
   
master =Tk()
master.title("Painting")

Button(text="Quit",command=callback).pack(fill=X)
Button(text="Answer",command=answer).pack(fill=X)
Button(text="File Open", command=fileOpen).pack(fill=X)
master.mainloop()



File Open 선택


3) 칼라 선택 Dialog


from tkinter import *
from tkinter.colorchooser import askcolor


def callback():
   result = askcolor(color="#6A9662",
             title = "Bernd's Colour Chooser")
   print(result)
root = Tk()
Button(root,
       text='Choose Color',
       fg="darkgreen",
       command=callback).pack(side=LEFT, padx=10)
Button(text='Quit',
       command=root.quit,
       fg="red").pack(side=LEFT, padx=10)
mainloop()



5. 위젯 참고





참고


수업 ppt 내용


'Programing > Python' 카테고리의 다른 글

Python - 15. 내장함수  (0) 2017.04.04
Python - 14. 예외처리  (0) 2017.03.30
Python - 13. 파일처리  (0) 2017.03.30
Python - 12. Module.Package  (0) 2017.03.30
Python - 11. class 활용  (0) 2017.03.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
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
글 보관함