본문 바로가기
Python/Python tkinter

[Python tkinter] 9. Checkbutton 위젯 생성 및 목록 생성

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

 

 

 

이번 포스팅에서는 tkinter의 Checkbutton에 대해 알아보려 한다. Checkbutton은 항목 앞에 선택/해제가 가능한 네모 모양의 버튼이 존재하는 위젯이며, 해당 항목의 활성화/비활성화 여부를 설정해야하는 내용이 필요한 경우 주로 사용된다.

 

 

 

1. Checkbutton() 클래스

 

Checkbutton의 생성은 일반적인 상황이라면 아래의 포맷으로 진행한다.

 

Checkbutton 위젯 변수명 = tkinter.Checkbutton(master=위젯을 배치할 창 객체명, text="checkbutton 항목", onvalue="Checkbutton 선택 시 반환값 지정", offvalue="Checkbutton 해제 시 반환값 지정, variable=Checkbutton을 그룹화 할 tkinter.변수타입 객체 변수명 지정)

 

이전의 Radiobutton 포스팅과 마찬가지로 필자가 "일반적인 상황"에 굵은 글씨 처리를 했는데, Checkbutton 위젯 역시 master만 있어도 생성 자체는 가능하기 때문이다. 자세한 내용은 조금 뒤에 알아보려 한다. 

Checkbutton에서 사용하는 속성들은 아래와 같다.

 

 

<위젯 필수 속성 값>

필수 속성(인자) 설명 입력값 타입
master 위젯을 배치할 창 또는 위젯(ex: Frame) 지정  tkinter 창 객체 또는 위젯 객체
text Checkbutton 옆 항목명 지정 문자열(tring)
variable Checkbutton 그룹화 변수 tkinter.BooleanVar()
tkinter.IntVar()
tkinter.DoubleVar()
tkinter.StringVar() 등
tkinter 변수 타입객체
onvalue Checkbutton 선택 시, 반환할 값 지정 variable 타입을 참조하여 값 입력
offvalue Checkbutton 해제 시, 반환할 값 지정 variable 타입을 참조하여 값 입력


< 위젯 크기 및 배치 관련 >

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

 

< 위젯 디자인 관련 >

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



< 위젯 상태 관련 >

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

 

 

 

2. Checkbutton 위젯의 배치

 

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

필자는 우선 2개의 Checkbutton과, Checkbutton의 동작을 확인할 Button 위젯 두 개를 생성하고 배치하였다.

 

 

 

3. Checkbutton 추가 속성 설정: variable, onvalue, offvalue

 

현재 필자가 생성한 Checkbutton의 경우, 체크의 설정과 해제는 가능하지만 설정/해제에 따른 값은 반환이 되지 않는 상태다. 일반적인 tkinter의 위젯은 값을 받기 위해 get() 매서드를 사용하는데, Checkbutton에 대해 get() 매서드를 직접 사용하면, 매서드가 없다는 에러 문구가 출력된다. 필자가 button1 객체 클릭 시, Checkbutton.get() 값을 반환받도록 코드를 작성하고 실행하면 다음과 같이 나타난다.

 

 

즉, Checkbutton의 상태는 Checkbutton 객체로부터 직접 받는 것이 아니라는 말이다. Checkbutton은 앞서 보았던 Radiobutton과 마찬가지로, 값을 반환받기 위한 추가 속성을 지정해주어야 한다. 

 

가장 먼저 진행해야 할 사항은 Checkbutton의 variable 속성을 지정해주는 것이다. 이 variable은 tkinter에서 제공하는 변수 타입을 객체화한 변수명을 값으로 입력해주면 된다. variable이 지정되면, Checkbutton 위젯의 상태값을 get()으로 반환받을 수 있게 된다. 코드를 추가 적용한 모양새는 아래와 같다.

 

 

이전과 달리, 에러도 발생하지 않고 Checkbutton에 따른 상태값도 get() 메서드로 잘 호출되는 것을 확인할 수 있다. Checkbutton이 선택된 경우 1이, 해제된 경우 0 값이 반환된다. 

 

추가로, variable의 변수 타입은 예외적이지 않은 상황인 경우 tkinter.IntVar()로 지정한다. variable 변수의 get() 값이 0과 1로 반환되는 것이 기본값으로 지정되어 있기 때문이다. 

 

만약 반환값을 0과 1이 아닌 다른 값으로 받고 싶다면 어떻게 해야할까? 이 때 사용하는 속성이 onvalue와 offvalue다. onvalue는 Checkbutton이 선택된 경우, offvalue는 해제된 경우 반환할 값을 지정한다. 

 

필자는 선택/해제 시 반환할 값을 각각 "선택", "해제"로 지정하려고 한다. 따라서 variable 속성의 변수 타입 역시 IntVar()가 아닌 StringVar()로 수정해주어야 한다. 변경된 코드의 실행 결과는 아래와 같다.

 

 

 

4. Checkbutton 위젯 매서드: select(), deselect(), toggle()

 

간혹, Checkbutton 위젯이 등장할 때, 특정 Checkbutton이 선택 또는 해제된 상태로 화면에 출력해야하는 상황이 있을 수 있다. 직접 Checkbutton을 마우스로 클릭하지 않고 매서드를 사용하여 제어할 수도 있다. 이 때 사용하는 매서드는 select()와 deselect()가 있다. 이름에서도 알 수 있듯이, select()는 Checkbutton 위젯을 체크하도록 만들며, 반대로 deselect()는 Checkbutton 위젯을 해제하도록 만든다.

 

 

이 외에 toggle()이라는 매서드도 있는데, 이 매서드는 현재 Checkbutton의 상태와 정 반대의 상태로 전환되도록 만드는 기능을 한다. 가령 Checkbutton2가 체크상태인데, Checkbutton2.toggle() 매서드를 사용하면 Checkbutton2는 체크가 해제된 상태로 전환된다.

 

 


 

지금까지 tkinter의 Checkbutton에 대해 알아보았다. 기본 코드는 이전의 포스팅과 마찬가지로 아래에 업로드한다.

 

009_tkinter_Checkbutton.py
0.00MB

 

다음 포스팅에서는 메모장을 만들 때 사용하는, 여러 줄의 글자를 작성할 수 있는 Text 위젯에 대해 알아보려 한다. 

 

Fin.

반응형

댓글