상위 목록: 하위 목록: 작성 날짜: 읽는 데 2 분 소요

Scrollbar(스크롤 바)

Scrollbar를 이용하여 위젯에 스크롤을 적용하기 위한 스크롤바를 생성할 수 있습니다.



Scrollbar 사용

import tkinter

window=tkinter.Tk()
window.title("YUN DAE HEE")
window.geometry("640x400+100+100")
window.resizable(False, False)

frame=tkinter.Frame(window)

scrollbar=tkinter.Scrollbar(frame)
scrollbar.pack(side="right", fill="y")

listbox=tkinter.Listbox(frame, yscrollcommand = scrollbar.set)
for line in range(1,1001):
   listbox.insert(line, str(line) + "/1000")
listbox.pack(side="left")

scrollbar["command"]=listbox.yview

frame.pack()

window.mainloop()


frame=tkinter.Frame(window)

scrollbar=tkinter.Scrollbar(frame)
scrollbar.pack(side="right", fill="y")

listbox=tkinter.Listbox(frame, yscrollcommand = scrollbar.set)
for line in range(1,1001):
   listbox.insert(line, str(line) + "/1000")
listbox.pack(side="left")

scrollbar["command"]=listbox.yview

frame.pack()

tkinter.Scrollbar(윈도우 창, 매개변수1, 매개변수2, 매개변수3, ...)을 사용하여 해당 윈도우 창에 표시할 스크롤바의 속성을 설정할 수 있습니다.

매개변수를 사용하여 스크롤바의 속성을 설정합니다.

스크롤바를 생성한 후, 스크롤을 적용할 위젯의 yscrollcommand 매개변수에 스크롤바.set을 연결합니다.

이 후, 스크롤바의 command 매개변수를 적용할 위젯.yview와 연결합니다.

스크롤바와 위젯은 서로를 양방향으로 연결해야 정상적으로 동작합니다.

  • 위젯.yscrollcommand = 스크롤바.set : 위젯의 내용이 스크롤되면 스크롤바의 위치를 갱신합니다.

  • 스크롤바.command = 위젯.yview : 스크롤바를 움직이면 위젯의 내용을 스크롤합니다.

  • Tip : 스크롤바와 연결된 위젯은 각각의 객체이므로 프레임으로 연결하여 사용하는 것을 권장합니다.

  • Tip : 가로 스크롤바는 orient="horizontal"로 생성하며, 위젯의 xscrollcommand와 스크롤바의 command=위젯.xview를 연결합니다.

  • Tip : Listbox, Text, Canvas 등 xscrollcommand, yscrollcommand 매개변수가 있는 위젯에 스크롤바를 연결할 수 있습니다.

  • Tip : tkinter.ttk.Scrollbar는 운영 체제의 테마가 적용된 스크롤바를 생성하며, 연결 방법은 동일합니다.


Scrollbar Method

이름 의미 설명
set(first, last) 슬라이더 위치 설정 전체 내용 중 현재 보이는 영역의 시작 비율(first)과 끝 비율(last)로 슬라이더의 위치와 크기를 설정, 위젯의 yscrollcommand에 연결하여 사용
get() (first, last) 반환 현재 슬라이더의 시작 비율과 끝 비율을 반환
  • Tip : first와 last는 0.0 ~ 1.0 사이의 비율이며, 예를 들어 (0.0, 0.2)는 전체 내용의 앞부분 20%가 표시되고 있음을 의미합니다.



Scrollbar Parameter

스크롤바 형태 설정

이름 의미 기본값 속성
width 스크롤바의 너비 17 상수
relief 스크롤바의 테두리 모양 sunken flat, groove, raised, ridge, solid, sunken
borderwidth=bd 스크롤바의 테두리 두께 0 상수
background=bg           스크롤바의 배경 색상         SystemButtonFace                   color                  
elementborderwidth           스크롤 요소의 테두리 두께 -1     상수
orient           스크롤의 표시 방향 vertical   vertical, horizontal


스크롤바 형식 설정

이름 의미 기본값 속성
cursor 스크롤바의 마우스 커서 모양 - 커서 속성


스크롤바 상태 설정

이름 의미 기본값 속성
activebackground active 상태일 때 스크롤바의 배경 색상 SystemButtonFace color
activerelief  active 상태일 때 스크롤바의 테두리 모양 raised flat, groove, raised, ridge, solid, sunken


스크롤바 하이라이트 설정

이름 의미 기본값 속성
highlightcolor 스크롤바가 선택되었을 때 색상 SystemWindowFrame color
highlightbackground 스크롤바가 선택되지 않았을 때 색상 SystemButtonFace color
highlightthickness 스크롤바가 선택되었을 때 두께 (두께 설정) 0 상수


스크롤바 동작 설정

이름 의미 기본값 속성
takefocus Tab 키를 이용하여 위젯 이동 허용 여부 - Boolean
command 스크롤바를 움직일 때 실행하는 메서드(함수), 주로 위젯.yview 또는 위젯.xview 연결 - 메서드, 함수
jump True일 경우, 슬라이더를 드래그하는 중에는 command를 호출하지 않고 마우스를 뗄 때 한 번만 호출 False Boolean
repeatdelay 버튼이 눌러진 상태에서 command 실행까지의 대기 시간 300 상수(ms)
repeatinterval 버튼이 눌러진 상태에서 command 실행의 반복 시간 100 상수(ms)


참고

  • cursor 매개변수

    • arrow, based_arrow_down, based_arrow_up, boat, bogosity, bottom_left_corner, bottom_right_corner, bottom_side, bottom_tee, box_spiral, center_ptr, circle, clock, coffee_mug, cross, cross_reverse, crosshair, diamond_cross, dot, dotbox, double_arrow, draft_large, draft_small, draped_box, exchange, fleur, gobbler, gumby, hand1, hand2, heart, icon, iron_cross, left_ptr, left_side, left_tee, leftbutton, ll_angle, lr_angle, man, middlebutton, mouse, pencil, pirate, plus, question_arrow, right_ptr, right_side, right_tee, rightbutton, rtl_logo, sailboat, sb_down_arrow, sb_h_double_arrow, sb_left_arrow, sb_right_arrow, sb_up_arrow, sb_v_double_arrow, shuttle, sizing, spider, spraycan, star, target, tcross, top_left_arrow, top_left_corner, top_right_corner, top_side, top_tee, trek, ul_angle, umbrella, ur_angle, watch, wait, xterm, X_cursor

  • highlightbackground를 설정하였을 경우, 스크롤바가 선택되지 않았을 때에도 두께가 표시됨

  • repeatdelay=100 일 경우, 누르고 있기 시작한 0.1초 후에 command가 실행됨

  • repeatdelay=1000, repeatinterval=100 일 경우, 1초 후에 command가 실행되며 0.1초마다 버튼을 뗄 때까지 command가 계속 실행됨

댓글 남기기