
Day18 - GUI์ Tkinter์ ๋ํ ์ค๋ช
์ฐธ๊ณ
pack() : ์คํฌ๋ฆฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ฐฐ์นํ๋ ๋ฉ์๋
# ๋ฐ๋ก ์ค์นํ ํ์ ์์
import tkinter
# ์ ์๋์ฐ ๊ฐ์ฒด ์์ฑ(ํฐํ ๋ชจ๋์ ์คํฌ๋ฆฐ๊ณผ ๊ฐ์)
window = tkinter.Tk()
window.title("My First GUI Program")
window.minsize(width=500, height=300) # ์๋์ฐ ๊ธฐ๋ณธ ์ฌ์ด์ฆ ์ค์
# ๋ ์ด๋ธ(label) ๋ง๋ค๊ธฐ = ์ปดํฌ๋ํธ ์์ฑ
my_label = tkinter.Label(text="I Am a Label", font=('Arial', 24, 'bold'))
# ์์ฑํ ์ปดํฌ๋ํธ๋ฅผ ํ๋ฉด์ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ ๋ช
์(๋ ์ด์์)
my_label.pack()
# ์๋์ฐ๋ฅผ ์คํฌ๋ฆฐ์ ์ ์ง(ํญ์ ํ๋ก๊ทธ๋จ ๋งจ ๋ง์ง๋ง์ ์์น)
window.mainloop()
๊ธฐ๋ณธ๊ฐ(defalt values)์ ๊ฐ์ง ์ธ์ โ ํน์ ๊ฐ์ ์์๊ฐ์ผ๋ก ์ค์
# ํจ์ ์ ์ธ (์ธ์ b, c์ ๊ธฐ๋ณธ๊ฐ ์ค์ )
def my_function(a, b=2, c=3):
#Do this with a
#Then do this with b
#Finally do this with c
# ํจ์ ํธ์ถ (๊ธฐ๋ณธ๊ฐ์ด ์ค์ ๋์ง ์์ ์ธ์ a์ ๋ค์ด๊ฐ ๊ฐ๋ง ์
๋ ฅํ๋ฉด ๋๋จธ์ง๋ ์๋ ์ ์ฉ)
my_function(3)
# ์์น ์ธ์ ์ฌ์ฉํ์ฌ ํธ์ถ (์์๋๋ก a์ 2, b์ 4๊ฐ ๋ค์ด๊ฐ๊ณ c๋ ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ)
my_function(2, 4)
# ์
๋ ฅ๊ฐ ์์ ํ์ฌ ํธ์ถ (์์ ํ๊ณ ์ถ์ ๊ฐ ์
๋ ฅ)
my_function(b=5)
* + args
# ์ซ์ 2๊ฐ๋ฅผ ๋ํ๋ ํจ์
def add_2(n1, n2):
return n1 + n2
# ์
๋ ฅ๊ฐ์ผ๋ก ์ ๋ฌ๋๋ ๋ชจ๋ ์ซ์๋ค์ ๋ํ๋ ํจ์
def add_all(*args):
sum = 0
for n in args:
sum += n
return sum
print(add_all(1, 2, 3, 4, 5))
print(add_all(55, 31, 78, 39, 325, 229, 16, 80))
** + kwargs
def calculate(n, **kwargs):
# for๋ฌธ์ผ๋ก ๋์
๋๋ฆฌ ์ํ
for key, value in kwargs.items():
print(f"{key}, {value}")
# ํค ์ด๋ฆ์ ํ์ฉํ์ฌ ๊ฐ์ ์ ๊ทผ
n += kwargs["add"]
n *= kwargs["mul"]
print(n)
calculate(2, add=3, mul=5)
class Car:
def __init__(self, **kwargs):
self.make = kwargs["make"] # ๋๊ดํธ๋ก ๊ฐ ๊ตฌํ๊ธฐ (๋์
๋๋ฆฌ์ ํค๊ฐ ์์ผ๋ฉด ์๋ฌ ๋ฐ์)
self.model = kwargs.get("model") # get()ํจ์๋ก ๊ฐ ๊ตฌํ๊ธฐ (๋์
๋๋ฆฌ์ ํค๊ฐ ์์ผ๋ฉด None ๋ฐํ)
my_car = Car(make='nissan')
print(my_car.make)
print(my_car.model)
from tkinter import *
window = Tk()
window.title("My First GUI Program")
window.minsize(width=500, height=300)
my_label = Label(text="I Am a Label", font=('Arial', 24, 'bold'))
my_label.pack()
# my_label์ ์ค์ ํ ๊ธฐ๋ณธ๊ฐ ๋ณ๊ฒฝ
my_label['text'] = "New Text" # ๋ฐฉ๋ฒ 1
my_label.config(text='New Text 2') # ๋ฐฉ๋ฒ 2
window.mainloop()
๋ ์ด๋ธ, ๋ฒํผ, ์ํธ๋ฆฌ ๋ฑ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ก ์์ ฏ ์ค์ ๋ณ๊ฒฝํ๊ธฐ (Tk Commands)
from tkinter import *
window = Tk()
window.title("My First GUI Program")
window.minsize(width=500, height=300)
# ๋ ์ด๋ธ ์ปดํฌ๋ํธ (ํ๋ฉด์ ๋ณด์ฌ์ง๋ ํ
์คํธ)
my_label = Label(text="I Am a Label", font=('Arial', 24, 'bold'))
my_label.pack()
# ๋ฒํผ ์ปดํฌ๋ํธ (ํด๋ฆญ ๊ฐ๋ฅ)
def button_click(): # ๋ฒํผ ํด๋ฆญ์ ๋ฐ์ํ๋ ์ด๋ฒคํธ
new_text = input.get() # get() ํจ์๋ก ์ํธ๋ฆฌ์ ์
๋ ฅํ ๊ฒ์ ๋ฌธ์์ด๋ก ๋ณํ
my_label.config(text=new_text)
button = Button(text="click me", command=button_click)
button.pack()
# ์ํธ๋ฆฌ ์ปดํฌ๋ํธ (ํ
์คํธ ์
๋ ฅ ๊ฐ๋ฅ)
input = Entry(width=10)
input.pack()
window.mainloop()
์ํธ๋ฆฌ์ ๋ฌธ์์ด ์
๋ ฅ
๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ ์ด๋ธ์ ๋ฌธ์์ด์ ์ํธ๋ฆฌ์ ์
๋ ฅํ ๋ฌธ์์ด๋ก ๋ณ๊ฒฝ
from tkinter import *
#Creating a new window and configurations
window = Tk()
window.title("Widget Examples")
window.minsize(width=500, height=500)
#Labels
label = Label(text="This is old text")
label.config(text="This is new text")
label.pack()
#Buttons
def action():
print("Do something")
#calls action() when pressed
button = Button(text="Click Me", command=action)
button.pack()
#Entries
entry = Entry(width=30)
#Add some text to begin with(์์ ํ
์คํธ ๋ฃ๊ธฐ)
entry.insert(END, string="Some text to begin with.")
#Gets text in entry
print(entry.get())
entry.pack()
#Text
text = Text(height=5, width=30)
#Puts cursor in textbox.
text.focus()
#Adds some text to begin with.
text.insert(END, "Example of multi-line text entry.")
#Get's current value in textbox at line 1, character 0
print(text.get("1.0", END))
text.pack()
#Spinbox
def spinbox_used():
#gets the current value in spinbox.
print(spinbox.get())
spinbox = Spinbox(from_=0, to=10, width=5, command=spinbox_used)
spinbox.pack()
#Scale
#Called with current scale value.
def scale_used(value):
print(value)
scale = Scale(from_=0, to=100, command=scale_used)
scale.pack()
#Checkbutton
def checkbutton_used():
#Prints 1 if On button checked, otherwise 0.
print(checked_state.get())
#variable to hold on to checked state, 0 is off, 1 is on.
checked_state = IntVar()
checkbutton = Checkbutton(text="Is On?", variable=checked_state, command=checkbutton_used)
checked_state.get()
checkbutton.pack()
#Radiobutton
def radio_used():
print(radio_state.get())
#Variable to hold on to which radio button value is checked.
radio_state = IntVar()
radiobutton1 = Radiobutton(text="Option1", value=1, variable=radio_state, command=radio_used)
radiobutton2 = Radiobutton(text="Option2", value=2, variable=radio_state, command=radio_used)
radiobutton1.pack()
radiobutton2.pack()
#Listbox
def listbox_used(event):
# Gets current selection from listbox
print(listbox.get(listbox.curselection()))
listbox = Listbox(height=4)
fruits = ["Apple", "Pear", "Orange", "Banana"]
for item in fruits:
listbox.insert(fruits.index(item), item)
listbox.bind("<<ListboxSelect>>", listbox_used)
listbox.pack()
window.mainloop()
GUI ํ๋ก๊ทธ๋จ์ ์์ ฏ์ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ๊ด๋ฆฌ์๋ก, ์์ ฏ์ ๋ง๋ ํ ๊ผญ ๋ช ์ํด์ผ ํ๋ฉด์ ๋ํ๋จ
โ๏ธPack๊ณผ Grid๋ ๊ฐ์ ํ๋ก๊ทธ๋จ์์ ์์ด ์ธ ์ ์์ผ๋ฏ๋ก ๋ ์ค ํ๋๋ง ์ ํ
from tkinter import *
window = Tk()
# ๋ ์ด๋ธ
my_label = Label(text="Label")
my_label.grid(column=0, row=0)
# ๋ฒํผ1
button = Button(text="Button1")
button.grid(column=1, row=1)
# ๋ฒํผ2
new_button = Button(text="Button2")
new_button.grid(column=2, row=0)
# ์ํธ๋ฆฌ
input = Entry(width=10)
input.grid(column=3, row=2)
window.mainloop()
grid ๋ ์ด์์ ๊ด๋ฆฌ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ฏ๋ค์ ์ํ๋ ์์น์ ๋ฐฐ์น
padding : ์์ ฏ ์ฃผ์์ ์ฌ๋ฐฑ์ ์ฌ์ ๊ณต๊ฐ์ผ๋ก ์ถ๊ฐ
from tkinter import *
window = Tk()
# ์๋์ฐ ๊ฐ์ฅ์๋ฆฌ์ ํจ๋ฉ ์ถ๊ฐ
window.config(padx=100, pady=50)
my_label = Label(text="Label")
my_label.grid(column=0, row=0)
# ๋ ์ด๋ธ์ ํจ๋ฉ ์ถ๊ฐ
my_label.config(padx=50, pady=50)
button = Button(text="Button1")
button.grid(column=1, row=1)
# ๋ฒํผ1์ ํจ๋ฉ ์ถ๊ฐ
button.config(padx=30, pady=20)
new_button = Button(text="Button2")
new_button.grid(column=2, row=0)
# ๋ฒํผ2์ ํจ๋ฉ ์ถ๊ฐ
new_button.config(padx=10, pady=5)
input = Entry(width=10)
input.grid(column=3, row=2)
window.mainloop()
๊ฑฐ๋ฆฌ๋ฅผ mile๋ก ์ ๋ ฅํ๋ฉด km๋ก ๋ณํํด์ ๋ณด์ฌ์ฃผ๋ ํ๋ก๊ทธ๋จ
๐ ์ ์ ์ฌํญ
- ๋ณํ ๊ณต์ :
- grid ๋ ์ด์์
- 0ํ 1์ด : mile๊ฐ์ ์ ๋ ฅํ๋ ์ํธ๋ฆฌ
- 0ํ 2์ด : Miles ๋ ์ด๋ธ
- 1ํ 0์ด : is equal to ๋ ์ด๋ธ
- 1ํ 1์ด : ๋ณํ๋ km๊ฐ์ด ๋ณด์ฌ์ง๋ ๋ ์ด๋ธ(0์ผ๋ก ์์)
- 1ํ 2์ด : Km ๋ ์ด๋ธ
- 2ํ 1์ด : ๊ณ์ฐ ๋ฒํผ
โจ๏ธ main.py
from tkinter import *
def miles_to_km():
miles = float(miles_input.get())
km = round(miles * 1.609, 2)
km_result_label.config(text=f"{km}")
window = Tk()
window.title("Miles to Km Converter")
window.config(padx=20, pady=20)
miles_input = Entry(width=9)
miles_input.insert(END, string="0")
miles_input.grid(column=1, row=0)
miles_label = Label(text='Miles')
miles_label.grid(column=2, row=0)
is_equal_label = Label(text='is equal to')
is_equal_label.grid(column=0, row=1)
km_result_label = Label(text=0)
km_result_label.grid(column=1, row=1)
km_label = Label(text='Km')
km_label.grid(column=2, row=1)
calculate_button = Button(text='Calculate', command=miles_to_km)
calculate_button.grid(column=1, row=2)
window.mainloop()