menubutton — 팝업 메뉴를 여는 메뉴 버튼 위젯
menubutton — 팝업 메뉴를 여는 메뉴 버튼 위젯
드롭다운처럼 버튼을 누르면 아래로 메뉴가 펼쳐지게 하려면 어떻게 해야 할까요? Tk의 menubutton 명령은 텍스트 문자열, 비트맵, 이미지를 표시하면서 menu 위젯과 연결되는 팝업 메뉴 표시용 위젯을 만듭니다.
본문
개요
menubutton pathName ?options?
menubutton 명령은 pathName 인자로 주어진 새 창을 만들고 menubutton 위젯으로 만듭니다. 색, 글꼴, 텍스트, 초기 relief 같은 menubutton의 측면을 구성하는 옵션을 명령줄이나 옵션 데이터베이스로 지정할 수 있어요. menubutton 명령은 pathName 인자를 돌려줍니다. 호출 시점에 pathName이라는 창이 존재해서는 안 되지만, pathName의 부모는 존재해야 해요.
menubutton은 텍스트 문자열, 비트맵, 또는 이미지를 표시하면서 menu 위젯과 연결된 위젯입니다. 텍스트 표시 시 모두 한 가지 글꼴이어야 하지만, 새줄 문자가 있거나 -wraplength 옵션 때문에 줄바꿈이 일어나면 여러 줄을 차지할 수 있어요. -underline 옵션으로 문자 하나에 선택적으로 밑줄을 그을 수 있죠. 일반적인 용법으로 menubutton 위에 마우스 버튼 1을 누르면 연결된 메뉴가 menubutton 바로 아래에 포스트됩니다. 마우스 버튼을 떼기 전에 메뉴 위로 옮기면, 버튼을 떼는 순간 그 아래의 메뉴 항목이 호출됩니다. 버튼을 떼면 메뉴는 언포스트(unpost)돼요.
menubutton은 tk_optionMenu를 구성하는 데 사용됩니다. 이것은 macOS에서 사용자가 리스트에서 항목 하나를 고르게 하는 선호 메커니즘이에요.
menubutton은 전통적으로 스캐닝을 허용하는 menu bar라는 그룹으로 묶이기도 했어요. 한 menubutton 위에서 마우스 버튼을 누르고(그 위젯의 메뉴가 포스트됨) 같은 메뉴 바의 다른 menubutton 위로 버튼을 떼지 않고 옮기면, 첫 menubutton의 메뉴는 언포스트되고 새 menubutton의 메뉴가 대신 포스트되는 식이죠. 이 용법은 menu를 메뉴 바로 직접 설정하는 방식으로 대체되어 더 이상 권장되지 않아요. 그 방법은 toplevel의 -menu 옵션을 참조하세요.
menubutton과 menu 사이에는 여러 상호작용이 있습니다. 풀다운 메뉴, 옵션 메뉴 같은 다양한 메뉴 구성에 대한 정보는 menu 매뉴얼 항목을 참조하세요.
표준 옵션
-activebackground, -activeforeground, -anchor, -background 또는 -bg, -bitmap, -borderwidth 또는 -bd, -compound, -cursor, -disabledforeground, -font, -foreground 또는 -fg, -highlightbackground, -highlightcolor, -highlightthickness, -image, -justify, -padx, -pady, -relief, -takefocus, -text, -textvariable, -underline, -wraplength 옵션이 표준 옵션으로 제공됩니다.
위젯 전용 옵션
-direction (데이터베이스 이름 direction, 클래스 Direction) — 메뉴를 어디로 팝업할지 지정합니다. above는 menubutton 위로, below는 아래로, left는 왼쪽으로, right는 오른쪽으로 메뉴를 띄우려고 시도해요. flush는 menubutton 바로 위에 메뉴를 띄웁니다. above나 below의 경우 메뉴가 화면 밖으로 나가면 방향이 뒤집힙니다.
-height (데이터베이스 이름 height, 클래스 Height) — menubutton의 원하는 높이를 지정합니다. 이미지나 비트맵이 표시 중이면 값은 화면 단위(Tk_GetPixels 형태)이고, 텍스트라면 텍스트 줄 수입니다. 지정하지 않으면 표시 중인 내용의 크기로 계산돼요.
-indicatoron (데이터베이스 이름 indicatorOn, 클래스 IndicatorOn) — 값은 불리언이어야 해요. 참이면 menubutton 오른쪽에 작은 표시 사각형이 표시되고, 기본 메뉴 바인딩이 이것을 옵션 menubutton으로 취급합니다. 거짓이면 표시가 나타나지 않아요.
-menu (데이터베이스 이름 menu, 클래스 MenuName) — 이 menubutton과 연결된 menu의 경로 이름을 지정합니다. menu는 menubutton의 자식이어야 해요.
-state (데이터베이스 이름 state, 클래스 State) — menubutton의 세 가지 상태 normal, active, disabled 중 하나를 지정합니다. normal 상태에서는 foreground와 background 옵션으로 표시되고, active 상태는 보통 포인터가 menubutton 위에 있을 때 쓰이며 -activeforeground와 -activebackground 옵션으로 표시돼요. disabled 상태는 menubutton이 반응하지 않아야 함을 뜻합니다. 기본 바인딩은 위젯 활성화를 거부하고 마우스 버튼 누름을 무시해요. 이 상태에서는 -disabledforeground와 -background 옵션이 표시 방식을 결정합니다.
-width (데이터베이스 이름 width, 클래스 Width) — menubutton의 원하는 너비를 지정합니다. 이미지나 비트맵이 표시 중이면 화면 단위이고, 텍스트라면 문자 수입니다.
위젯 명령
menubutton 명령은 이름이 pathName인 새 Tcl 명령을 만듭니다. 일반적인 형태는 다음과 같아요.
pathName option ?arg ...?
pathName cget option — option으로 주어진 설정 옵션의 현재 값을 돌려줍니다.
pathName configure ?option? ?value option value ...? — 위젯의 설정 옵션을 조회하거나 수정합니다. option을 지정하지 않으면 사용 가능한 모든 옵션을 설명하는 리스트를 돌려주고, option만 지정하면 그 옵션 하나를 설명하는 리스트를 돌려줍니다. option-value 쌍을 지정하면 해당 옵션을 수정하고 빈 문자열을 돌려줘요.
기본 바인딩
Tk는 menubutton에 다음 기본 동작을 주는 클래스 바인딩을 자동으로 만듭니다.
- menubutton은 마우스가 위를 지나가면 활성화되고, 마우스가 떠나면 비활성화됩니다.
- menubutton 위에서 마우스 버튼 1을 누르면 menubutton이 포스트돼요. relief가 raised로 바뀌고 연결된 메뉴가 menubutton 아래에 포스트됩니다. 버튼을 누른 채 마우스를 메뉴 안으로 끌고, 메뉴 항목 위에서 버튼을 떼면 menubutton은 언포스트되고 메뉴 항목이 호출돼요.
- menubutton 위에서 버튼 1을 누른 뒤 그 menubutton 위에서 떼면 menubutton은 계속 포스트된 상태를 유지합니다. 메뉴 위로 마우스를 옮기고 항목에서 버튼 1을 클릭해 호출할 수 있죠. 메뉴 항목이 호출되면 menubutton은 스스로 언포스트됩니다.
- menubutton 위에서 버튼 1을 누른 뒤 다른 menubutton 위로 끌면, 원래 menubutton은 언포스트되고 새 menubutton이 포스트됩니다.
- menubutton 위에서 버튼 1을 누른 뒤 어떤 menubutton이나 menu 밖에서 떼면, menubutton은 어떤 메뉴 항목도 호출하지 않고 언포스트됩니다.
- menubutton이 포스트되면 연결된 menu가 입력 포커스를 차지해서 메뉴와 서브메뉴의 키보드 탐색을 허용합니다. 세부 바인딩은
menu매뉴얼 항목을 참조해요. - menubutton에
-underline옵션이 지정되면 키보드 탐색으로 menubutton을 포스트할 수 있어요. menubutton의 toplevel 아래의 어떤 창에서든 Alt+x(x는 밑줄 문자 또는 그 대소문자 동등물)를 입력하면 menubutton이 포스트됩니다. - 어떤 창에서든 F10 키를 입력하면 그 toplevel 아래에서 disabled가 아닌 첫 menubutton이 포스트됩니다.
- menubutton이 입력 포커스를 가지면 space와 return 키가 menubutton을 포스트합니다.
menubutton의 상태가 disabled라면 위 동작 중 어느 것도 일어나지 않아요. menubutton은 완전히 반응하지 않습니다.
menubutton의 동작은 개별 위젯에 새 바인딩을 정의하거나 클래스 바인딩을 재정의해 바꿀 수 있어요.
더 알아보기
- menu — 메뉴 위젯
- ttk::menubutton — 테마 기반 메뉴 버튼 위젯