본문 바로가기
Python/Python tkinter

[Python tkinter] 6. Listbox 위젯 생성 및 목록 설정

by Rosmary 2022. 2. 6.
728x90
반응형

 

 

 

 

 

이번 포스팅에서는 tkinter의 Listbox에 대해 알아보려 한다. Listbox는 간단하게 말하면, 여러 리스트 항목 중 하나를 선택할 수 있도록 만든 위젯이다. 이 위젯의 형태를 가장 많이 볼 수 있는 곳이 Excel인데, Excel에서 '셀 서식'을 누르면 나오는 좌측의 목록이 바로 Listbox 위젯이라고 생각하면 된다.

 

사실상 요즘에는 Combobox라고 불리는 위젯이 있기 때문에 많이 사용되는 위젯은 아니지만, 목록 자체의 양이 많지 않은 경우 종종 사용되기도 한다. 이번 포스팅에서는 Listbox 위젯의 생성과 사용에 대해 알아보려 한다. 

 

 

1. Listbox() 클래스

 

Listbox 위젯 생성을 위한 클래스 호출은 아래와 같이 진행하면 된다.

Listbox 객체 변수명 = tkinter.Listbox(master=위젯을 배치할 창 객체명)

 

아마도 필자가 인자 몇 개를 빠뜨렸다는 생각을 할 수도 있을 것이다. 하지만 Listbox는 생성 시, master를 제외한 다른 속성은 필요로 하지 않기 때문에 위의 형태로 코드를 작성하더라도 위젯 생성에는 아무런 문제가 없다.

 

 

Listbox 객체 호출 시 추가로 지정할 수 있는 인자의 목록은 아래와 같다. 굵은 글씨는 기본값이다.

< 위젯 필수 속성 값>

필수 속성(인자) 설명 입력값 타입
master 위젯을 배치할 창 또는 위젯(ex: Frame) 지정  tkinter 창 객체 또는 위젯 객체

 

< 위젯 크기 및 배치 관련 >

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

 

< 위젯 디자인 관련 >

선택 속성(인자) 설명 입력값 타입
selectbackground Listbox 내 선택 항목의 배경 색 지정 색상값 문자열 입력(ex: "red")
selectforeground Listbox 내 선택 항목의 글자 색 지정 색상값 문자열 입력(ex: "red")
selectborderwidth Listbox 내 선택 항목의 테두리 두께 지정 정수형(Int)
highlightbackground Listbox 위젯 비활성화 시,
Listbox의 배경(테두리) 색 지정
색상값 문자열 입력(ex: "red")
highlightcolor Listbox 위젯 활성화 시,
Listbox의 배경(테두리) 색 지정
색상값 문자열 입력(ex: "red")
highlightthickness Listbox 위젯에 highlight 관련 속성 적용 시,
Listbox 테두리 두께 지정
정수형(Int)
disabledforeground Listbox가 disabled 모드일 경우,
Listbox 항목의 글자 색 지정
색상값 문자열 입력(ex: "red")

 

< 위젯 상태 관련 >

선택 속성(인자) 설명 입력값 타입
state Listbox 위젯의 상태 설정 "normal", "active", "disabled"
selectmode Listbox 위젯 내 항목을 선택하는 방식 설정 "single", "multiple", "extended"
* "single" 대신 "browser" 사용 가능
*"extended"는 다수 목록 선택 시,
  연속된 목록들만 선택할 수 있음

 

 

2. Listbox 위젯의 배치

 

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

필자는 위젯의 pack() 매서드로 배치를 진행하였고, 결과는 아래와 같다. 

 

"어?? 그런데 Listbox 안에 넣을 목록은 미리 지정하지 않았는데, 이거 어떻게 채우나요??"

 

 

 

3. Listbox 위젯 목록 설정: insert()

 

특이하게도 이 Listbox는 뒤에서 볼 다른 위젯들과 달리 위젯을 먼저 생성한 뒤, 목록을 채워넣는 기이한 방식을 가지고 있다(왜 얘만 이렇게 다른건지는 알 수 없다..)

 

Listbox 위젯은 목록과 관련된 매서드를 여러 개 가지고 있다. 그 중 Listbox에 목록을 생성하는 매서드는 insert()가 존재한다. 이 매서드는 인자로 

 

- Listbox 목록 위치(0부터 기입 시작)

- Listbox 표시 내용

 

을 가진다. 가령 필자가 비어있는 리스트 박스를 서두의 엑셀 셀 서식 모양처럼 만든다고 가정한다면, Listbox 생성 코드 바로 밑에 아래와 같이 코드를 작성하면 된다.

 

 

 

4. Listbox 위젯 목록 갯수 확인: size()

 

Listbox는 insert() 외에도 목록과 관련된 여러 매서드 함수를 제공한다. 그 중 size()라는 매서드는 insert() 매서드로 Listbox 위젯 내에 포함된 목록의 갯수를 반환하는 기능을 가진다.

 

5. Listbox 위젯 선택값 확인: curselection()

 

그렇다면, 우리가 프로그램 상의 Listbox에서 선택한 항목 값을 어떻게 반환받을 수 있을까? Listbox 위젯의 curselection() 매서드를 사용하면, 위젯 상에서 선택한 항목의 순번 위치가 tuple 형태로 반환된다. 만약 필자가 0번 째에 위치한 "일반" 항목을 선택한 뒤, curselection() 매서드를 수행하면 결과로 (0) 이 반환된다. 테스트를 위해 버튼을 하나 만들고, 이 버튼을 클릭할 경우, 선택한 항목 값을 반환받도록 코드를 작성했다.

 

 


 

이번 포스팅에서는 Listbox 위젯의 생성, 배치, 사용 방법에 대해 알아보았다. 사실 목록과 관련한 Listbox 위젯 매서드로 delete와 activate, see 등 여러가지가 더 있지만, 사실상 거의 사용할 일이 없는 매서드일 뿐더러, Listbox보다 추후 포스팅 할 Combobox가 훨씬 더 광범위하게 사용되기도 해서 별도로 포스팅을 진행하지 않는다. 

 

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

006_tkinter_Label.py
0.00MB

 

 

다음 포스팅에서는 입력값을 받을 때 사용하는 Entry 위젯에 대해 포스팅하려 한다.

 

 

Fin.

반응형

댓글