본문 바로가기
파이썬

파이썬 기본패키지 tkinter 모듈 사용법

by ㈜㎹Ω∞ 2022. 7. 15.
728x90

Tkinter는 버튼 등의 그래픽 기능을 제공해주는 그래픽 유저 인터페이스 모듈입니다. 즉 GUI를 만들 수 있는 모듈입니다. Tkinter의 Tk는 GUI를 사용할 수 있는 레이어를 뜻하고, 뒤의 inter은 interface의 약자입니다.

 

Tkinter

Tkinter사용법은 import키워드를 사용해서 tkinter모듈을 가져오고 tkinter.Tk()를 사용해서 객체를 생성합니다. 만든 객체를 이용해서 여러 가지 GUI를 추가하고, 마지막으로 mainloop() 키워드를 써서 윈도우를 실행합니다. (as키워드를 사용해서 tkinter이름을 tk 또는 다른 이름으로 바꿔서 작성할 수 있습니다.)

 

import tkinter as tk	### 이름이 길어서 tk라고 정의합니다.

### window객체에 tkinter의Tk함수를 사용한다고 정의합니다.
window = tk.Tk()

###사이에 위젯을 추가합니다.

window.mainloop()

 

title, geometry, resizabal

 

  • title("제목") : 윈도우 창의 제목을 정합니다.
  • geometry("가로x세로+x좌표+y좌표") : 창의 크기를 정하고, 왼쪽 위를 기준으로 창이 나오는 좌표값을 정합니다.(좌표 미입력시 랜덤으로 좌표가 정해집니다.)
  • resizabal(False,False) : 창크기변경 불가(X,Y 순서입니다.)

 

참고) geometry("가로x세로+x좌표+y좌표") 사용할 때 "가로x세로" 부분에 *별표를 넣으면 TclError bad geometry specifier 에러가 뜰 수도 있는데 그럴 때는 영어x를 표시하면 에러가 해결됩니다.

 

### title, geometry, resizabal 사용

import tkinter as tk

window = tk.Tk()
window.title("티스토리")
window.geometry("500x500+500+150")
window.resizable(False,False)

window.mainloop()

 

Lable, Button, Entry

Lable, Button, Entry의 사용으로 각종 위젯이 추가됩니다. 일단 객체를 설정해주고 어디에 뭐라고 쓸지 설정을 해줍니다. 마지막으로 설정한 위젯이름.pack()라고 입력해줘야 합니다. ***pack()은 필수 작성입니다.*** 

 

### Lable, Button, Entry 사용

import tkinter as tk

window = tk.Tk()
window.title("티스토리")
window.geometry("500x500+500+150")
window.resizable(False,False)
label=tk.Label(window,text="테스트")
label.pack()
button=tk.Button(window,text="버튼")
button.pack()
entry=tk.Entry(window,)
entry.pack()

window.mainloop()

 

위에 코드를 실행해보면 티스토리 창이 생기고, 크기는 정사각형500, 크기 조절은 불가능하며, 테스트라는 글자가 있고, 그 밑에 버튼, 그 밑에 입력 칸이 있습니다. 위치는 x500,y150d에 해당하는 좌표에 나타납니다. 어느 한 곳이라도 pack() 키워드가 빠졌다면 그 코드는 창에 나타나지 않습니다. 그러니 pack()은 필수입니다!

 

여러옵션값 설정

 

  • padx=숫자, pady=숫자 : 여백을 정할 수 있습니다.
  • width=숫자, height=숫자 : 넓이와 높이를 정할 수 있습니다.
  • fg="색", bg="색" : fg는 글자색, bg는 배경색을 정할 수 있습니다.

 

### padx,pady / width, height / fg, bg 사용

import tkinter as tk

window = tk.Tk()
window.title("티스토리")
window.geometry("500x500+500+150")
window.resizable(False,False)
label=tk.Label(window,text="테스트",width=10,height=5)
label.pack()
button=tk.Button(window,text="버튼",padx=30,pady=15,fg="white",bg="black")
button.pack()
entry=tk.Entry(window,)
entry.pack()

window.mainloop()

 

위에 코드를 실행해보면 아까 실행한 코드에서 옵션 값만 추가했기 때문에 테스트 글자 부분이 조금 넓어졌고, 버튼은 조금 더 커졌으며, 검은 배경에 글자색은 하얀색으로 변경됐습니다.

 

사진넣기

 

### 이미지설정

import tkinter as tk

window = tk.Tk()
img=tk.PhotoImage(file="스크린샷.png")
button=tk.Button(window,image=img)
button.pack()


window.mainloop()

 

 

img=tk.PhotoImage(file="사진이름") 작성한 후 button 부분에 image=img라고 작성하면 사진 설정이 다됐습니다. 또한 사용할 이미지는 파이썬파일 폴더 안에 같이 있어야 합니다.

 

command, config

 

  • command=함수이름 : 버튼을 클릭했을 때 실행하는 옵션
  • config : 위젯의 속성 값을 변경

 

### command, config 사용

import tkinter as tk

def click():	###	함수설정1
    print("클릭했습니다.")

def click2():	### 함수설정2
    button.config(text="성공입니다.")

window = tk.Tk()
window.title("티스토리")
window.geometry("500x500+500+150")
window.resizable(False,False)
label=tk.Label(window,text="테스트",width=10,height=5)
label.pack()
button=tk.Button(window,text="버튼",width=10,height=3,command=click)	### 함수설정하기
button.pack()
entry=tk.Entry(window)
entry.pack()

window.mainloop()

 

click(), click2() 이렇게 함수를 2개 만들었습니다. command=click으로 작성하게 되면 버튼을 누를 때마다 클릭했습니다.라는 글이 나오게 되고, command=click2로 작성하게 되면 버튼을 누르게 되면 성공입니다.라는 글자로 바뀌게 됩니다. 만약 click2()의 설정을 button.config(fg="white")으로 변경하면 버튼을 누르면 글자색이 흰색으로 바뀝니다.

 

 

Text

Entry는 한 줄로만 입력할 수 있다면 Text는 여러 줄 입력이 가능합니다. width, height로 넓이와 높이를 즉 크기를 정합니다.

 

  • 텍스트객체.insert(tk.END, "글자") : 텍스트 위젯에 표시할 글자를 나타냅니다.
  • 엔트리객체.insert(0,"글자") : 엔트리 위젯에 표시할 글자를 나타냅니다.
  • 텍스트개체.get("1.0",tk.END) : 텍스트 위젯에 있는 첫 문장부터 끝까지의 글을 가져옵니다.
  • 엔트리개체.get() : 엔트리 위젯에 있는 문장을 가져옵니다.(엔트리는 한 문장만 작성하기 때문에 몇 줄인지 고를 필요가 없습니다.)
  • 텍스트개체.delete("1.0",tk.END) : 텍스트 위젯에 있는 글을 지웁니다.
  • 엔트리개체.delete(0,tk.END) : 엔트리 위젯에 있는 글을 지웁니다.

 

### Text 사용

import tkinter as tk

window = tk.Tk()
window.title("티스토리")
window.geometry("500x500+500+150")
window.resizable(False,False)
label=tk.Label(window,text="테스트",width=10,height=5)
label.pack()
button=tk.Button(window,text="버튼",width=10,height=3)
button.pack()
text=tk.Text(window,width=100,height=3)
text.insert(tk.END, "텍스트를 입력하세요.")
text.pack()

window.mainloop()

 

get(), delete() 사용

 

  • click() 함수는 테스트 글자를 text에 글자를 입력 후 버튼을 누르면 그 글자로 바꾼다는 함수입니다.
  • click2() 함수는 테스트 글자를 text에 글자를 입력 후 버튼을 누르면 그 글자로 바꾼다는 함수입니다.

 

### get, delete 사용

import tkinter as tk

def click():	### 텍스트에 쓴글자로 라벨변경
    label.config(text=text.get("1.0",tk.END))
    
def click2():	### 엔트리에 쓴글자로 라벨변경
    label.config(text=entry.get())
    
window = tk.Tk()
window.title("티스토리")
window.geometry("500x500+500+150")
window.resizable(False,False)
label=tk.Label(window,text="테스트",height=3)
label.pack()
button=tk.Button(window,text="버튼",width=10,height=3,command=click)	### 함수설정하기
button.pack()
entry=tk.Entry(window)
entry.pack()
text=tk.Text(window,width=100,height=3)
text.insert(tk.END, "텍스트를 입력하세요.")
text.pack()

window.mainloop()

 

메시지 창 사용

메시지창도 사용할 수 있습니다. 사용하기 위해서는 import tkinter.messagebox 해주면 되는데 이름이 너무 길어서 as를 사용해서 import tkinter.messagebox as box라고 하겠습니다. 그리고 showinfo("제목","메시지")를 입력해서 메시지 창 설정이 가능합니다.

 

### tkinter.messagebox, showinfo 사용

import tkinter as tk
import tkinter.messagebox as box

def click():	### 버튼을 누르면 메시지창이뜹니다.
    box.showinfo("알림","클릭했습니다.")

window = tk.Tk()
window.title("티스토리")
window.geometry("500x500+500+150")
window.resizable(False,False)
label=tk.Label(window,text="테스트",height=3)
label.pack()
button=tk.Button(window,text="버튼",width=10,height=3,command=click)	### 함수설정하기
button.pack()
entry=tk.Entry(window)
entry.pack()

window.mainloop()

 

tkinter.messagebox모듈의 showinfo() 함수를 사용해서 버튼을 누르면 메시지 창에 클릭했습니다.라는 글이 나옵니다.

 

Frame

프레임(Frame) 사용으로 레이아웃을 설정할 수 있고, 프레임에 여러 위젯을 넣을 수도 있습니다. 그리고 pack()에 옵션을 사용할 수도 있습니다.

 

  • 객체.Frame(window, relief="solid", bd=값, 옵션) : 사용합니다.
  • relief="solid", bd=값 : 테두리를 설정합니다.
  • side : 어느 방향에 놓을지 정합니다. (left : 왼쪽, right : 오른쪽, top : 위쪽, bottom : 아래쪽)
  • fill : 어느 방향으로 채울지 정합니다. (x : 오른쪽 왼쪽, y : 위아래, both : 모든 방향) x, y, both 중 하나를 입력합니다.
  • expand=True : 요구되지 않은 공간 사용하기 (사용 안 해도 실행은 됩니다. 보여지는데 조금 차이가 있어요.)

 

### Frame 사용

import tkinter as tk

window = tk.Tk()
window.title("티스토리")
window.geometry("500x500+500+150")
window.resizable(False,False)
label=tk.Label(window,text="테스트",height=3)
label.pack()
button=tk.Button(window,text="버튼",width=10,height=3)
button.pack()
entry=tk.Entry(window)
entry.pack()
### 프레임1생성
frame1=tk.Frame(window,relief="solid",bd=3,padx=15,pady=15)
frame1.pack(side="top",fill="x",expand=True)
button1=tk.Button(frame1,text="frame1")
button1.pack()
button2=tk.Button(frame1,text="frame1")
button2.pack()
### 프레임2생성
frame2=tk.Frame(window,relief="solid",bd=3,padx=15,pady=15)
frame2.pack(side="bottom",fill="x",expand=True)
button3=tk.Button(frame2,text="frame2")
button3.pack()
button4=tk.Button(frame2,text="frame2")
button4.pack()

window.mainloop()

 

위 코드 작성 후 실행하면 엔트리칸조금 띄우고 프레임1이생성됩니다. 그 안에 버튼 2개가 생성됩니다. 그 밑에 칸 조금 띄우고 프레임2가 생성되고 그 안에 또 버튼2개가 생성됩니다. 참고로 expand=True는 작성 안 해도 실행은 되지만 그렇게 되면 앤트리 바로 밑에 프레임이 생기고 프레임2는 맨 밑에 붙습니다.

 

grid

grid를 사용해서 위젯 배치하기

 

  • 위젯.grid(row=행값, column=열값) : 위젯을 배치할 수 있습니다.
  • 0부터 시작합니다.
  • columnspan, rowspan : 몇 칸을 차지할지 설정할 수 있습니다.
  • columnspan = 가로방향, rowspan = 세로방향
  • sticky=tk.N+tk.E+tk.W+tk.S : +로 방향을 추가하고 크기를 늘릴 수 있습니다.
  • N=north(북쪽), E=east(동쪽), W=west(서쪽), S=south(남쪽)입니다.
  • sticky="news" : 모든 방향으로 늘어납니다.

 

### grid 사용

import tkinter as tk

window = tk.Tk()
window.title("게임")
window.geometry("300x300+500+150")
window.resizable(False,False)

button1=tk.Button(window,text="1")
button1.grid(row=0, column=0)
button2=tk.Button(window,text="2")
button2.grid(row=1, column=1)
button3=tk.Button(window,text="3")
button3.grid(row=0, column=1)
button4=tk.Button(window,text="4")
button4.grid(row=1, column=0)

window.mainloop()
728x90

댓글