본문 바로가기
GUI 튜토리얼/tkinter 한꼬집씩만 따라해보기

29. 스핀박스 위젯 추가하기

by 일코 2022. 11. 28.

이전 포스팅

2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 28. 메인윈도우에 아이콘 추가하기

 

28. 메인윈도우에 아이콘 추가하기

이전 포스팅 2022.11.27 - [기타/tkinter 한꼬집씩만 따라해보기] - 27. 다양한 메시지박스 생성하기 27. 다양한 메시지박스 생성하기 이전 포스팅 2022.11.20 - [기타/tkinter 한꼬집씩만 따라해보기] - 26. GUI

martinii.fun


 

이번 포스팅에서는 : 스핀박스 위젯 추가하기

오랜만에 위젯을 하나 더 소개해드리고자 합니다.

바로 "스핀박스"라는 위젯으로, 콤보박스와 어떤 면에서는 유사한 부분이 있어서

주어진 숫자 중에 하나를 선택하는 공통점이 있지만,

스핀박스는 창이 확대되지 않고 버튼을 통해서 값이 오르내린다는 특징이 있습니다.

콤보박스 위젯

 

이번에 소개해드릴 스핀박스 위젯

 

짧은 코드를 보여드리겠습니다.

import tkinter as tk

win = tk.Tk()
tk.Spinbox(win, from_=0, to=10).grid(row=0, column=0)

win.mainloop()

 

메인윈도우에 스핀박스 위젯 하나만 추가하였습니다.

from_과 to 인자를 통해 선택범위를 0부터 10까지의 정수 중 하나로 제한하게 하였습니다.

실행해보면

스핀박스 컨트롤에도 여러 가지 옵션을 지정할 수 있습니다.

엔트리의 너비를 지정하려면 width 옵션을 추가하고,

tk.Spinbox(win, from_=0, to=10, width=5).grid(row=0, column=0)
#                                 ↑

바깥 여백을 지정하려면 borderwidth(==border)를 추가합니다.

tk.Spinbox(win, from_=0, to=10, borderwidth=10).grid(row=0, column=0)
#                                    ↑

borderwidth만 추가했는데, 움푹 들어간 것 같은 효과가 추가되었습니다.

relief 인자의 값 때문입니다.

미리 소개드리지는 않았지만 버튼이나 엔트리 등 기존 소개드린 다른 대부분의 위젯에도
relief에 파라미터를 줄 수 있습니다.

 

스핀박스 relief 인자의 기본값이 tk.SUNKEN 이라서 그렇습니다.

SUNKEN 외에도 RAISED, GROOVE, RIDGE, FLAT 등의 다섯 개 옵션이 있습니다.

하나씩 비교해서 보여드리겠습니다.

1. relief=tk.SUNKEN  (움푹 들어감)

tk.Spinbox(win, from_=0, to=10, border=10, relief=tk.SUNKEN).grid(row=0, column=0)

tk.SUNKEN

2. relief=tk.RAISED (불쑥 올라옴)

tk.Spinbox(win, from_=0, to=10, border=10, relief=tk.RAISED).grid(row=0, column=0)

tk.RAISED

3. relief=tk.GROOVE (V자로 패임)

tk.Spinbox(win, from_=0, to=10, border=10, relief=tk.GROOVE).grid(row=0, column=0)

tk.GROOVE

4. relief=tk.RIDGE (GROOVE와 반대로 올라갔다 들어감)

tk.Spinbox(win, from_=0, to=10, border=10, relief=tk.RIDGE).grid(row=0, column=0)

tk.RIDGE

5. relief=tk.FLAT (평평함)

tk.Spinbox(win, from_=0, to=10, border=10, relief=tk.FLAT).grid(row=0, column=0)

tk.FLAT

 

스핀박스 옵션 몇 가지만 더 설명드리겠습니다.

1. 범위(from_, to) 대신 values로 튜플을 지정할 수 있음

from_과 to 대신에 values 인자로 튜플을 지정해서 불연속적인 값을 지정할 수도 있습니다.

tk.Spinbox(win, values=(1, 3, 5, 7, 9)).grid(row=0, column=0)  # from_ & to 인자 대신에 values 하나만 사용

 

2. 스핀박스.get()으로 값을 가져올 수 있음

아래 예제처럼 spinbox를 통해 직접 값을 가져올 수도 있고,

textvariable 변수를 통해 combobox처럼 값을 저장하는 변수를 지정할 수도 있습니다.

import tkinter as tk


def 스핀박스함수():
    label["text"] = spinbox.get()


win = tk.Tk()

spinbox = tk.Spinbox(win, from_=0, to=10, command=스핀박스함수)
spinbox.grid(row=0, column=0)

label = tk.Label(win)
label.grid(row=1, column=0)

win.mainloop()

 

3. 스핀박스에 문자열을 지정할 수도 있습니다.

values에 튜플을 지정할 때 튜플 안에 문자열을 넣을 수도 있습니다.

import tkinter as tk


def 스핀박스함수():
    label["text"] = spinbox.get()


win = tk.Tk()

spinbox = tk.Spinbox(win, values=("Jan", "Feb", "Mar", "Apr", "May"), command=스핀박스함수)
spinbox.grid(row=0, column=0)

label = tk.Label(win)
label.grid(row=1, column=0)

win.mainloop()

 

4. 최대값 도달후 위쪽 화살표를 누를 때 최소값으로 돌아가게 할 수 있습니다.

wrap=True 파라미터를 통해

최대값에서 올릴 때 최소값으로, 반대로 최소값에서 내릴 때에는 최대값으로 선택되게 설정할 수 있습니다.

spinbox = tk.Spinbox(win, wrap=True, from_=0, to=10, command=스핀박스함수)
#                           ↑

 

스핀박스 위젯은 체크버튼, 라디오버튼, 엔트리, 콤보박스와 더불어

입력 폼에서 굉장히 자주 쓰이는 위젯으로, 알아두시면 언젠가는 쓸모있게 활용하실 수 있을 것입니다.

 


다음 포스팅

2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 30. 위젯에 툴팁 붙이기

 

30. 위젯에 툴팁 붙이기

이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 29. 스핀박스 위젯 추가하기 29. 스핀박스 위젯 추가하기 이전 포스팅 2022.11.28 - [기타/tkinter 한꼬집씩만 따라해보기] - 28. 메인윈도우

martinii.fun

 

댓글