본문 바로가기

개인공부/python

나 혼자 하는 프로젝트 2탄 - GUI 프로그래밍(6) 프레임(frame) 과 스크롤 바(scroll bar)

프레임은 프로그램 안의 영역을 그리고 나누는데 사용한다.

기본적인 사용법은 앞서 공부한 위젯들과 비슷하다.

relief= 는 테두리 선의 종류를 정의하고, bd= 테두리의 두께를 정의한다.

이때 이 프레임 안에 내용물들을 넣기 위해서는, 새로 만들 위젯의 위치를 프레임의 이름으로 잡아주어야 한다.

LabelFrame()을 이용해 만드려는 프레임에 이름표를 달아 줄 수 있다.

이제 .pack()에 전달값을 입력하여 해당 위젯들의 위치를 지정해 줄 수 있다.

side= 통해 위젯의 위치를 좌/우로 나누어 줄 수 있으며,

fill= 을 통해 채우기도 가능하다. 

expand= 를 True 로 해주고, 자동으로 화면을 가득 채우게 된다.

프레임을 사용하면, 화면에 보여지는 위젯들을 그룹으로 관리할 수 있게 해주어, 좀더 편리한 관리가 가능하다.

pack(side="")를 이용하면, 코딩 순서에 상관없이, 위 코드처럼 해당 위젯들의 위젯을 지정해 줄 수 있다.

 

스크롤 바(scroll bar)는 리스트박스에 사용 가능하며, 항목이 많아 한 화면에 다 보여줄 수 없을 때 사용 가능하다.

스크롤 바를 작성할때는, 대상이 되는 위젯을 하나의 프레임에 묶어 두는게 관리가 편리하다.

예문을 위해 먼저 리스트박스를 만들어 프레임에 넣어 주었다.

이때 생성된 리스트박스의 항목들은 1일~ 31일 이지만, 화면에 보여지는 항목은 1일부터 10일까지 이다.

개발자 입장에서는 아래로 내리면 더 많은 항목이 존재한다는걸 알 수 있지만, 사용자 입장에서는 그렇지 못하다.

(물론, 마우스 스크롤이나 키보드를 통해 아래로 내려서 내용을 볼 수 있다.)

이제 여기에 스크롤바를 삽입하여, 사용자가 아래에 내용이 더 있다는걸 알려주자.

두개의 위젯이 하나의 위젯처럼 움직이게 하기 위해서는 셋팅해 주어야 할 부분이 좀 많다.

.pack()을 통해 각 위젯들의 프레임내 위치를 먼저 잡아주고(통상적으로 스크롤바가 오른쪽에 위치한다.) 스크롤바의 경우 fill="y" , y축으로 가득 채워줌 설정을 해준다.

listbox는 yscrollcommand= 를 통해 scrollbar.set (스크롤바의 위치)에 따라 움직이도록 설정해 주고

다시 scrollbar.config()를 통해 command=listbox.yview 리스트박스의 y축에 따라 스크롤바가 위치 하도록 해준다.

하나씩 끄고 프로그램을 실행시켜 보면 그 차이를 명확히 알 수 있는데

1. Listbox의 yscrollcomman 가 없는 경우:

  스크롤바를 아래로 내려 리스트박스 내용도 움직이지만, 움직인 스크롤바는 다시 원위치로 돌아온다.

2. scrollbar.config()가 없는 경우:

  스크롤바를 직접 조작할 수 없지만, 리스트박스를 아래로 내리면 스크롤바가 움직인다.

즉 yscrollcomman=를 통해 스크롤바로 리스트박스의 y축 이동을 가능하게 해주며, .config(command=)를 통해 해당 스크롤바를 조작했을 때의 움직임을 할당해 줄 수 있다.