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()

label

  • 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()

button

# 내가 계산기를 만들 때 썼던 코드
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 = 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)
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()

menu

  • 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()

frame

  • side = LEFT : 좌측 프레임에 widget을 생성시킨다. (RIGHT 은 오른쪽)