윈도우 프로그램 기본 위젯

강의노트 Radio button

강의노트 • 조회수 640 • 댓글 0 • 작성 1년 전 • 수정 1개월 전  
  • 윈도우 프로그램

라디오 버튼

라디오 버튼은 여러 개의 옵션 중 하나만 선택할 수 있는 버튼이다.

체크 버튼은 다중 선택이 가능하지만 라디오 버튼은 하나만 선택 가능하다.

기본 구조

ttk.Radiobutton(parent, text="라벨", value=값, variable=공유변수)

여기서, text는 화면에 표시될 라벨, value는 이 버튼이 선택되었을 때 변수에 저장되는 값이고, variable은 그룹내 모든 라디오버튼이 공유하는 변수로 IntVar, StringVar가 가긍하다.

공유변수가 같은 라디오 버튼들은 하나의 그룹으로 이 그룹에서는 하나의 라디오번튼만 선택할 수 있다. 공유변수가 다르면 다른 그룹을 이룬다.

사용 예제

기본 라디오 버튼

라디오 버튼의 공유 변수는 문자열 변수로 이름은 choice로 정한다. 공유 변수에는 선택된 과일 이름을 저장한다.

라디오 버튼들은 왼쪽으로 정렬하고 레이블에 선택한 과일을 출력한다.

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Radiobutton 예제")
root.geometry("250x150")

# 선택된 값을 저장할 변수
choice = tk.StringVar()

# Radiobutton 3개 생성 (공유 변수는 동일)
r1 = ttk.Radiobutton(root, text="사과", value="사과", variable=choice)
r2 = ttk.Radiobutton(root, text="바나나", value="바나나", variable=choice)
r3 = ttk.Radiobutton(root, text="포도", value="포도", variable=choice)

r1.pack(anchor="w")
r2.pack(anchor="w")
r3.pack(anchor="w")

def show_choice():
    lbl.configure(text=f"선택한 과일은 {choice.get()}입니다.")

btn = tk.Button(root, text="선택 확인", command=show_choice)
btn.pack(pady=10)
lbl = tk.Label(root, text="과일 선택")
btn.pack(pady=10)

root.mainloop()

두 개의 그룹을 가지는 라디오버튼 (이런 경우 프레임으로 그룹을 나누는 것이 보기좋다.)

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Radiobutton 예제")
root.geometry("200x200")

# 선택된 값을 저장할 변수
choice1 = tk.StringVar()

# Radiobutton 3개 생성 (공유 변수는 동일)
r1 = ttk.Radiobutton(root, text="사과", value="사과", variable=choice1)
r2 = ttk.Radiobutton(root, text="바나나", value="바나나", variable=choice1)
r3 = ttk.Radiobutton(root, text="포도", value="포도", variable=choice1)
# 선택된 값을 저장할 변수
choice2 = tk.IntVar()

# Radiobutton 3개 생성 (공유 변수는 동일)
r4 = ttk.Radiobutton(root, text="1", value=1, variable=choice2)
r5 = ttk.Radiobutton(root, text="2", value=2, variable=choice2)
r6 = ttk.Radiobutton(root, text="3", value=3, variable=choice2)

r1.pack(anchor="w")
r2.pack(anchor="w")
r3.pack(anchor="w")
r4.pack(anchor="w")
r5.pack(anchor="w")
r6.pack(anchor="w")
def show_choice():
    lbl.configure(text= f"{choice1.get()}를 {choice2.get()}개 선택했습니다.")

btn = tk.Button(root, text="선택 확인", command=show_choice)
btn.pack(pady=5)
lbl = ttk.Label(root,text='과일과 갯수 선택')
lbl.pack(pady=5)
root.mainloop()

라디오 버튼의 변경되면 이벤트로 응답하게 만든다.

trace_add(옵션, lambda *args: 함수( )) 메서드는 tkinter의 지정한 변수 값이 변할 때 자동으로 특정 함수를 호출하게 하는 기능이다.

옵션으로는 변수를 읽을 때 감지하는 "read", 변수를 쓸 때 감지하는 "write"와 변수가 해제될 때 감지하는 "unset"이 있다.

lambda *args: 함수( )를 쓰는 이유는 trace_add는 내부적으로 변경 이벤트 정보를 추가 인자로 넘기기 때문에 단순히 함수( )를 넣으면 에러가 발생한다. lambda *args: 함수( )는 추가 인자는 무시하고 함수( )만 실행하게 한다.

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.title("Radiobutton 예제")
root.geometry("200x100")

# 선택된 값을 저장할 변수
choice = tk.StringVar()

# Radiobutton 3개 생성 (공유 변수는 동일)
r1 = ttk.Radiobutton(root, text="사과", value="사과", variable=choice)
r2 = ttk.Radiobutton(root, text="바나나", value="바나나", variable=choice)
r3 = ttk.Radiobutton(root, text="포도", value="포도", variable=choice)

r1.pack(anchor="w")
r2.pack(anchor="w")
r3.pack(anchor="w")

def show_choice():
    lbl.configure(text= f"선택한 과일은 {choice.get()}입니다.")
lbl = ttk.Label(root,text='과일 선택')
lbl.pack(pady=5)
choice.trace_add("write", lambda *args:show_choice())

연습문제

  1. 음료(커피, 차, 주스)를 선택하고 버튼 클릭시 "선택한 음료 : 000"출력하는 프로그램을 작성하시오.

  2. 언어(한국어, 영어, 포르투갈어)를 선택하고 선택시 한국어는 "안녕하세요", 영어는 "Hello", 포르투갈어는 "Ola"를 출력하는 프로그램을 작성하시오.

  3. 색상(빨강, 파랑, 초록, 노랑)을 선택하고 선택시 윈도우 배경색을 변경하는 프로그램을 작성하시오.

참고

root.configure(bg=color_map.get(selected, "white"))

root의 배경 색을 color_map의 selected위치의 색상으로 바꿔준다.

이전 글
다음 글
댓글
댓글로 소통하세요.