본문 바로가기
Python/Python tkinter

[Python tkinter] 8. RadioButton 위젯 생성 및 목록 생성

by Rosmary 2022. 3. 4.
728x90
반응형

 

 

 

이번 포스팅에서 살펴볼 tkinter 위젯은 Radiobutton이다. Radiobutton은 특정 그룹의 리스트 중 하나를 선택할 수 있도록 하는 위젯이다. 아래와 같이 생긴 녀석이며, 보통 인터넷으로 사지선다 시험을 보는 경우 많이 접할 수 있다.

 

 

이전에 살펴보았던 Listbox와 마찬가지로, 이 Radiobutton 역시 현재는 Combobox를 많이 사용하는 트랜드로 인해 보기가 어려워진 위젯이다. 물론 Combobox로만 나타내기에 목록의 수가 매우 적다면(예를 들어, 남/녀만 존재하는 성별), Radiobutton 위젯이 조금 더 효율적이긴 하다.

 

원래 옛날 윈도우 프로그램의 설정에서 많이 사용되던 위젯이기 때문에, 윈도우 창을 만드는 tkinter에서도 당연히 위젯 생성을 지원한다.

 

 

1. Radiobutton() 클래스

 

radiobutton 생성을 위한 클래스의 호출은 일반적인 상황에서 아래의 포맷으로 진행한다.

 

radiobutton 위젯 변수명 = tkinter.Radiobutton(master=위젯을 배치할 창 객체명, text="Radiobutton 항목", value=라디오버튼 선택 시 반환값 지정, variable=여러 라디오버튼을 그룹화 할 tkinter.변수타입 객체 변수명 지정)

 

필자가 일반적인 상황에 굵은 글씨 처리를 한 것은 다른 것이 아니라, 사실 Radiobutton 위젯이 master만 있어도 생성은 가능하기 때문이다. 

 

하지만 이 때까지 봐왔던 위젯과 달리, radiobutton은 value와 variable이라는 인자가 매우 중요한 역할을 한다. 여러 개의 Radiobutton을 하나로 묶는 역할을 하는데, 내용이 조금 복잡하니 뒤에서 위젯을 생성하는 과정을 통해 다시 설명하려 한다.

 

Radiobutton 클래스 호출 시, 추가로 사용할 수 있는 인자는 아래와 같다. 

 

<위젯 필수 속성 값>

필수 속성(인자) 설명 입력값 타입
master 위젯을 배치할 창 또는 위젯(ex: Frame) 지정  tkinter 창 객체 또는 위젯 객체
text Radiobutton 옆 항목명 지정 문자열(tring)
value Radiobutton 선택 시 반환값 지정 정수형(Int),
실수형(Float),
문자열(string) 등
variable Radiobutton 그룹화 변수 tkinter.BooleanVar()
tkinter.IntVar()
tkinter.DoubleVar()
tkinter.StringVar() 등
tkinter 변수 타입객체

 

< 위젯 크기 및 배치 관련 >

선택 속성(인자) 설명 입력값 타입
width Radiobutton 위젯의 너비 설정 정수형(Int), 단 가로 너비 픽셀 값 입력
height Radiobutton 위젯의 높이 설정 정수형(Int), 단, 표시될 목록 개수를 입력
padx Radiobutton 위젯의 가로축 여백 설정 정수형(Int), 단 가로 너비 픽셀 값 입력
pady Radiobutton 위젯의 세로축 여백 설정 정수형(Int), 단 세로 너비 픽셀 값 입력


< 위젯 디자인 관련 >

선택 속성(인자) 설명 입력값 타입
fg (또는 foreground) Radiobutton 위젯의 글자색 설정 색상값 문자열 입력(ex: "red")
bg (또는 background) Radiobutton 위젯의 배경색 설정 색상값 문자열 입력(ex: "red")
relief Radiobutton 위젯 테두리 설정 "flat", "sunken", "raised",
"ridge", "solid", "groove"
overrelief  Radiobutton 위젯 마우스 오버 시 테두리 설정 "flat", "sunken", "raised",
"ridge", "solid", "groove" 
image Radiobutton 위젯 항목 이미지 지정 tkinter.PhotoImage 객체
selectimage Radiobutton 위젯 선택 시 항목 이미지 지정 tkinter.PhotoImage 객체
anchor Radiobutton 위젯 내 문자 정렬 위치 설정 "center", "n", "e", "w", "s"
justify Radiobutton 위젯문구가 2줄 이상인 경우 정렬 위치 설정 "center", "left", "right"
compound text, image 인자가 동시에 지정되어 있는 경우,
이미지의 위치 지정
"bottom", "top", "center", "left", "right"


< 위젯 상태 관련 >

선택 속성(인자) 설명 입력값 타입
state Radiobutton 활성화여부 선택 "normal", "disabled", "active"
selectcolor Radiobutton 선택 시, text 색상 지정 색상값 문자열 입력(ex: "red")
disabledforeground Radiobutton state가 disabled일 때, 배경 색 지정 색상값 문자열 입력(ex: "red")
indicatoron Radiobutton 모양을 원형이 아닌
카세트 테잎 형식으로 변경
Boolean

* Indicatoron False 지정 시, Radiobutton의 모양은 아래처럼 나타난다. 마치 Entry와 비슷한 모양이라 잘 사용하지는 않는다.

 

2. Radiobutton 위젯의 배치

 

Radiobutton 위젯의 배치는 pack(), place(), grid()를 사용하면 된다. 자세한 내용은 이 포스팅을 참고하자.

필자는 임의로 5개의 Radiobutton 위젯을 master와 text 인자만 넣어 생성한 뒤, pack() 매서드로 배치를 진행했다. 

 

 

 

3. Radiobutton 위젯의 생성

 

위에서 생성한 5개의 Radiobutton에 뭔가 이상한 점이 보이지 않는가? 가만히 보면 5개의 항목 중 하나만 선택이 되어야하는데 모든 Radiobutton이 선택된 것으로 나온다. 왜냐하면 필자는 Radiobutton을 개별적으로 생성만 했을 뿐, 이들을 하나의 그룹으로 묶는 과정을 진행하지 않았기 때문이다. 필자가 text1~5 Radiobutton을 하나의 그룹으로 묶기 위해 Radiobutton 생성 시 value와 variable 인자에 대한 값도 지정해주어야 한다. 

 

먼저 value부터 보자. value는 선택된 Radiobutton이 반환해야하는 값을 지정한다. 만약 필자가 text1~5를 하나의 그룹으로 묶고, value를 순서대로 1~5로 지정해 주었다고 가정해보자.

 

이 경우, 임의의 Radiobutton이 선택되는 경우, 해당 Radiobutton에 지정된 value 값을 반환하도록 할 수 있다. 

 

다음으로 variable 인자를 보자. 이 variable 인자는 매우 독특한 성질을 가지고 있는데, tkinter 내에 정의된 변수 타입 객체를 지정하도록 되어 있다. 

 

앞서 필자가 모든 Radiobutton의 value 값을 정수형(int)으로 지정해주었다. 그럼, variable은 tkinter.IntVar() 객체의 변수명으로 지정해주어야 한다. 코드는 아래와 같다.

 

만약 Radiobutton이 가지는 value값이 문자열(string)인 경우, variable의 변수는 tkinter.StringVar()로 지정되어야 하며, 실수형(double or float)인 경우, tkinter.DoubleVar()를 지정해주어야 한다.

 

이 상태에서 다시 파일을 실행해보자.

 

 

아까와 달리, Radiobutton 위젯 체크는 모두 해제되어 있으며, 하나를 선택하면 나머지 위젯의 체크는 자동으로 해제되는 것을 확인할 수 있다. 

 

 

 

4. Radiobutton 매서드

 

그럼, 선택한 Radiobutton의 value 값은 어떻게 받으면 될까? 새로 Radiobutton 위젯 묶음을 하나 더 만들어보자. 그리고 "선택" 버튼을 만들어, 클릭 시 해당 Radiobutton의 값을 돌려받을 수 있도록 만들어보자. Button 위젯과 관련된 내용은 이곳을 참고하자.

 

 

필자가 앞서 fruit이라는 변수로, 새로 생성한 Radiobutton 위젯 3개를 하나의 그룹으로 묶었다. Radiobutton의 variable로 지정된 변수는 get()이라는 매서드를 가지는데, 이 get은 선택된 Radiobutton의 value 값을 반환하는 역할을 한다. 필자가 버튼 클릭 시, 선택된 Radiobutton의 value값을 반환하도록 Button 함수를 정의했는데, Apple, Banana, Cherry Radiobutton을 하나씩 선택하고 버튼을 클릭한 결과는 아래와 같이 나타난다.

 

 

 

5. 기본값으로 특정 Radiobutton이 선택되도록 지정: select()

 

현재 필자가 만든 두 그룹의 Radiobutton 위젯들은 초기 실행 시, 전부 선택되거나, 선택되지 않는 상태로 화면에 나타난다.

만약, 특정 Radiobutton만 기본값으로 선택되도록 지정하고 싶다면 어떻게 해야할까? 이 때 사용할 수 있는 매서드로 select()가 있다.

 

앞에서 보았던 get() 매서드와 비교했을 때, 주의해야 할 사항이 하나 있는데, get() 매서드는 Radiobutton의 variable에 사용되는 매서드인 반면, select()는 Radiobutton 위젯 객체 자체의 매서드라는 점이다. 만약 필자가 Apple Radiobutton을 초기에 활성화시키고 싶다면, apple.select()로 코드를 작성해야하지, fruit.select(0)으로 작성하는 것이 아니라는 말이다.

 

 

역으로 특정 Radiobutton의 선택을 기본값으로 해제하도록 할 수도 있는데, 이 때 사용하는 매서드는 deselect()이다. 정말 특수한 상황이 아니라면 잘 사용하는 매서드는 아닌 듯 하다.

 

 

 


 

오늘 작성한 포스팅에 대한 코드도 지난 번과 동일하게 첨부파일로 공유한다. 

008_tkinter_RadioButton.py
0.00MB

 

다음 포스팅에서는 오늘 포스팅했던 Radiobutton과 사용방법이 유사한 Checkbutton에 대해 알아보려 한다.

 

 

Fin.

반응형

댓글