[Python_mini_projects_1] 계산기 만들기 #2. tkinter 위젯
tkinter widgets
tkinter의 위젯들은 부모 컨테이너와 연관하여 상대적인 위치에 놓이게 되는데, 앞서 설명한 Geometry Manager를 사용하여 각 위젯의 위치를 정하게 된다.
tkinter가 제공하는 주요 위젯들이다.
위젯 | 설명 |
---|---|
Button | 버튼 |
Label | 텍스트 혹은 이미지 표시 |
CheckButton | 체크 박스 |
Entry | 라인 텍스트 박스 |
ListBox | 리스트 박스 |
RadioButton | 옵션 버튼 |
Message | Label과 비슷하게 텍스트 표시. Label과 달리 자동 래핑 기능 |
Scale | 슬라이스 바 |
Scrollbar | 스크롤 바 |
Text | 멀티 라인 텍스트 박스 |
Menu | 메뉴 Pane |
Menubutton | 메뉴 버튼 |
Toplevel | 새 윈도우를 생성할 때 사용(추가로 새로운 윈도우 창을 만들 때 사용) |
Frame | 컨테이너 위젯. 다른 위젯들을 그룹화할 때 사용 |
Canvas | 그래프와 점들로 그림을 그릴 수 있다. |
이 중 몇 가지만 살펴보겠다.
Label
from tkinter import *
window=Tk()
window.title("Tae Hun")
window.geometry("640x400+100+100")
window.resizable(False, False)
label=Label(window, text="파이썬", width=10, height=5, fg="red", relief="solid")
label.pack()
window.mainloop()
- width, height : 너비와 높이 설정
- fg(foreground) : 문자열 색상 / bg(background) : 배경 색상
- relief : 테두리 모양(속성 : flat, groove,raised, ridge, solid, sunken)
Button
from tkinter import *
window = Tk()
window.geometry("200x150")
frame = Frame(window)
frame.pack()
button = Button(frame, text="Button1",
fg="red", bd=2, bg="light blue", relief="groove")
button.pack()
window.mainloop()
# 내가 계산기를 만들 때 썼던 코드
button1 = Button(window, text=button, width=22,
height=5, padx=6, relief="ridge", bg=color, command=cmd)
- bd(borderwidth) : 테두리 두께 (default = 2)
- padx : 테두리와 내용의 가로 여백 (default = 1)
- pady : 테두리와 내용의 세로 여백 (default = 1)
Entry
from tkinter import *
window = Tk()
window.title("Tae Hun")
window.geometry("150x100")
window.resizable(False, False)
entry = Entry(window, width=20, bg='white',
fg="black", justify="right")
entry.grid()
window.mainloop()
# 내가 계산기를 만들 때 썼던 코드
entry = Entry(window, width=20, bg='white', borderwidth=0, font=('arial', 20, 'bold'),
fg="black", insertbackground="black", justify="right")
entry.grid(row=0, column=0, columnspan=5, ipady=50)
- font=(a, b, c) : a = 글꼴 / b = 글자 크기 / c = 글자 두께
- insertbackground : 기입창의 키보드 커서 색상
- justify : 기입창의 문자열 정렬 방법 (속성 : center, left, right)
Menu
from tkinter import *
def save():
pass
def load():
pass
window = Tk()
window.geometry("200x150")
frame = Frame(window)
frame.pack()
mainmenu = Menu(frame)
mainmenu.add_command(label="Save", command=save)
mainmenu.add_command(label="Load", command=load)
mainmenu.add_command(label="Exit", command=window.destroy)
window.configure(menu=mainmenu)
window.mainloop()
- labe = 이름 : 상위 메뉴 이름
- window.destroy() : 위젯을 파괴하고 window.mainloop() 이후의 코드를 실행시킨다.
- window.quit() : 위젯이 유지된 채 window.mainloop() 이후의 코드를 실행시킨다.
- window.configure(menu = 메뉴 이름) : 윈도우 창에 메뉴를 등록시킨다.
- menu클래스객체.add_command(parameter) : 기본 메뉴 항목 생성
Frame
from tkinter import *
window = Tk()
window.geometry("200x150")
frame = Frame(window)
frame.pack()
leftframe = Frame(window)
leftframe.pack(side=LEFT)
rightframe = Frame(window)
rightframe.pack(side=RIGHT)
label = Label(frame, text="Hello world")
label.pack()
button1 = Button(leftframe, text="Button1")
button1.pack(padx=3, pady=3)
button2 = Button(rightframe, text="Button2")
button2.pack(padx=3, pady=3)
button3 = Button(leftframe, text="Button3")
button3.pack(padx=3, pady=3)
window.title("Frame")
window.mainloop()
- side = LEFT : 좌측 프레임에 widget을 생성시킨다. (RIGHT 은 오른쪽)