Ruby-Tk 가이드

소개

Ruby 용 표준 그래픽 사용자 인터페이스 (GUI)는 Tk입니다. Tk는 John Ousterhout가 개발 한 Tcl 스크립팅 언어 용 GUI로 시작했습니다.

Tk는 유일한 크로스 플랫폼 GUI라는 독특한 특징을 가지고 있습니다. Tk는 Windows, Mac 및 Linux에서 실행되며 각 운영 체제에서 기본 모양과 느낌을 제공합니다.

Tk 기반 애플리케이션의 기본 구성 요소를 위젯이라고합니다. Tk에서 "창"과 "위젯"은 종종 같은 의미로 사용되기 때문에 구성 요소를 창이라고도합니다.

Tk 애플리케이션은 위젯 계층 구조를 따르며, 여기에서 위젯의 수는 제한없이 다른 위젯 내에 배치 될 수 있으며 해당 위젯은 다른 위젯 내에 무한대로 배치됩니다. Tk 프로그램의 기본 위젯은 루트 위젯이라고하며 TkRoot 클래스의 새 인스턴스를 만들어 만들 수 있습니다.

  • 대부분의 Tk 기반 애플리케이션은 동일한주기를 따릅니다. 위젯을 만들고 인터페이스에 배치 한 다음 마지막으로 각 위젯과 관련된 이벤트를 메서드에 바인딩합니다.

  • 세 가지 지오메트리 관리자가 있습니다. 인터페이스에서 각 위젯의 크기와 위치를 제어하는 ​​역할을하는 장소, 그리드 .

설치

Ruby Tk 바인딩은 Ruby와 함께 배포되지만 Tk는 별도의 설치입니다. Windows 사용자는 ActiveState의 ActiveTcl 에서 클릭 한 번으로 Tk 설치를 다운로드 할 수 있습니다 .

Mac 및 Linux 사용자는 OS와 함께 이미 설치되었을 가능성이 높기 때문에 설치할 필요가 없지만 그렇지 않은 경우 미리 빌드 된 패키지를 다운로드하거나 Tcl Developer Xchange 에서 소스를 얻을 수 있습니다 .

간단한 Tk 신청

Ruby / Tk 프로그램의 일반적인 구조는 메인 또는 root 창 (TkRoot의 인스턴스)에 위젯을 추가하여 사용자 인터페이스를 구축 한 다음 다음을 호출하여 기본 이벤트 루프를 시작합니다. Tk.mainloop.

전통적인 Hello, World! Ruby / Tk의 예는 다음과 같습니다.

require 'tk'

root = TkRoot.new { title "Hello, World!" }
TkLabel.new(root) do
   text 'Hello, World!'
   pack { padx 15 ; pady 15; side 'left' }
end
Tk.mainloop

여기서 tk 확장 모듈을로드 한 후 TkRoot.new를 사용하여 루트 수준 프레임을 만듭니다 . 그런 다음 TkLabel 위젯을 루트 프레임의 자식으로 만들고 레이블에 대한 여러 옵션을 설정합니다. 마지막으로 루트 프레임을 압축하고 기본 GUI 이벤트 루프로 들어갑니다.

이 스크립트를 실행하면 다음 결과가 생성됩니다.

Ruby / Tk 위젯 클래스

Ruby / Tk를 사용하여 원하는 GUI를 만드는 데 사용할 수있는 다양한 Ruby / Tk 클래스 목록이 있습니다.

  • TkFrame 프레임 위젯을 만들고 조작합니다.

  • TkButton 버튼 위젯을 만들고 조작합니다.

  • TkLabel 레이블 위젯을 만들고 조작합니다.

  • TkEntry 항목 위젯을 만들고 조작합니다.

  • TkCheckButton 체크 버튼 위젯을 만들고 조작합니다.

  • TkRadioButton 라디오 버튼 위젯을 만들고 조작합니다.

  • TkListbox 목록 상자 위젯을 만들고 조작합니다.

  • TkComboBox 목록 상자 위젯을 만들고 조작합니다.

  • TkMenu 메뉴 위젯을 만들고 조작합니다.

  • TkMenubutton 메뉴 버튼 위젯을 만들고 조작합니다.

  • Tk.messageBox 메시지 대화 상자를 만들고 조작합니다.

  • TkScrollbar 스크롤바 위젯을 만들고 조작합니다.

  • TkCanvas 캔버스 위젯을 만들고 조작합니다.

  • TkScale 스케일 위젯을 만들고 조작합니다.

  • TkText 텍스트 위젯을 만들고 조작합니다.

  • TkToplevel 최상위 위젯을 만들고 조작합니다.

  • TkSpinbox Spinbox 위젯을 만들고 조작합니다.

  • TkProgressBar 진행률 표시 줄 위젯을 만들고 조작합니다.

  • 대화 상자 대화 상자 위젯을 만들고 조작합니다.

  • Tk :: Tile :: Notebook 노트북을 은유하여 제한된 공간에 여러 창을 표시합니다.

  • Tk :: Tile :: Paned 세로 또는 가로로 쌓인 여러 개의 하위 창을 표시합니다.

  • Tk :: Tile :: Separator 가로 또는 세로 구분 줄을 표시합니다.

  • Ruby / Tk 글꼴, 색상 및 이미지 Ruby / Tk 글꼴, 색상 및 이미지 이해

표준 구성 옵션

모든 위젯에는 일반적으로 표시 방법이나 작동 방식을 제어하는 ​​다양한 구성 옵션이 있습니다. 사용 가능한 옵션은 물론 위젯 클래스에 따라 다릅니다.

다음은 모든 Ruby / Tk 위젯에 적용 할 수있는 모든 표준 구성 옵션의 목록입니다.

Sr. 아니. 옵션 및 설명
1

activebackground => 문자열

활성 요소를 그릴 때 사용할 배경색을 지정합니다. 마우스 커서가 요소 위에있는 경우 요소가 활성화되고 마우스 버튼을 누르면 일부 동작이 발생합니다. "red", "blue", "pink", "yellow"등과 같은 색상 이름을 사용할 수 있습니다.

2

activeborderwidth => 정수

활성 요소 주위에 그려진 3 차원 테두리의 너비를 나타내는 음이 아닌 값을 지정합니다.

activeforeground => 문자열

활성 요소를 그릴 때 사용할 전경색을 지정합니다.

4

anchor => 문자열

위젯의 정보 (예 : 텍스트 또는 비트 맵)가 위젯에 표시되는 방법을 지정합니다. 값 중 하나 여야합니다.n, ne, e, se, s, sw, w, nw, 또는 center. 예를 들면nw 왼쪽 위 모서리가 위젯의 왼쪽 위 모서리에 있도록 정보를 표시하는 것을 의미합니다.

5

background or bg => 문자열

위젯을 표시 할 때 사용할 일반 배경색을 지정합니다.

6

bitmap => 비트 맵

위젯에 표시 할 비트 맵을 지정합니다. 비트 맵이 표시되는 정확한 방법은 앵커 또는 양쪽 맞춤과 같은 다른 옵션의 영향을받을 수 있습니다.

7

borderwidth or bd => 정수

위젯 외부 주위에 그릴 3 차원 테두리의 너비를 나타내는 음이 아닌 값을 지정합니다.

8

compound => 문자열

위젯이 텍스트와 비트 맵 / 이미지를 동시에 표시할지 여부를 지정하고, 그렇다면 비트 맵 / 이미지를 텍스트를 기준으로 배치해야하는 위치를 지정합니다. 값 중 하나 여야합니다.none, bottom, top, left, right, 또는 center.

9

cursor => 문자열

위젯에 사용할 마우스 커서를 지정합니다. 가능한 값은 "watch", "arrow"등입니다.

10

disabledforeground => 문자열

비활성화 된 요소를 그릴 때 사용할 전경색을 지정합니다.

11

exportselection => 부울

위젯의 선택이 X 선택이어야하는지 여부를 지정합니다. 값은 다음 중 하나를 가질 수 있습니다.true, false, 0, 1, yes, 또는 no. 선택 항목을 내 보낸 경우 위젯에서 선택하면 현재 X 선택이 선택 취소되고 위젯 외부를 선택하면 위젯 선택이 취소되며 위젯은 선택 항목이있을 때 선택 검색 요청에 응답합니다.

12

font => 문자열

위젯 내부에 텍스트를 그릴 때 사용할 글꼴을 지정합니다.

13

foreground or fg => 문자열

위젯을 표시 할 때 사용할 일반 전경색을 지정합니다.

14

highlightbackground => 문자열

위젯에 입력 포커스가 없을 때 순회 강조 영역에 표시 할 색상을 지정합니다.

15

highlightcolor => 문자열

입력 포커스가있을 때 위젯 주위에 그려지는 순회 강조 사각형에 사용할 색상을 지정합니다.

16

highlightthickness => 정수

입력 포커스가있을 때 위젯 외부 주위에 그릴 강조 사각형의 너비를 나타내는 음이 아닌 값을 지정합니다.

17

image => 이미지

이미지 작성으로 작성되어야하는 위젯에 표시 할 이미지를 지정합니다. 일반적으로 이미지 옵션이 지정되면 위젯에 표시 할 비트 맵 또는 텍스트 값을 지정하는 다른 옵션보다 우선합니다. 비트 맵 또는 텍스트 표시를 다시 활성화하기 위해 이미지 옵션을 빈 문자열로 재설정 할 수 있습니다.

18

jump => 문자열

스크롤바 및 스케일과 같이 값을 조정하기 위해 드래그 할 수있는 슬라이더가있는 위젯의 경우이 옵션은 값 변경에 대한 알림이 작성되는시기를 결정합니다. 옵션 값은 부울이어야합니다. 값이 false이면 슬라이더를 끌 때 계속 업데이트됩니다. 값이 true이면 드래그를 끝내기 위해 마우스 버튼을 놓을 때까지 업데이트가 지연됩니다. 이 시점에서 단일 알림이 만들어집니다.

19

justify => 문자열

위젯에 여러 줄의 텍스트가 표시되는 경우이 옵션은 줄이 서로 정렬되는 방식을 결정합니다. 다음 중 하나 여야합니다.left, center, 또는 right. Left 선의 왼쪽 가장자리가 모두 정렬되어 있음을 의미합니다. center 선의 중심이 정렬되었음을 의미합니다. right 선의 오른쪽 가장자리가 정렬됨을 의미합니다.

20

offset => 문자열

타일의 오프셋을 지정합니다 ( tile선택권). 두 가지 다른 형식을 가질 수 있습니다.offset x,y 또는 offset side, 측면이 될 수있는 곳 n, ne, e, se, s, sw, w, nw, 또는 center.

21

orient => 문자열

스크롤바와 같이 가로 또는 세로 방향으로 레이아웃 할 수있는 위젯의 경우이 옵션은 사용할 방향을 지정합니다. 다음 중 하나 여야합니다.horizontal 또는 vertical 또는 이들 중 하나의 약어입니다.

22

padx => 정수

X 방향으로 위젯에 대해 요청할 추가 공간을 나타내는 음이 아닌 값을 지정합니다.

23

pady => 정수

Y 방향으로 위젯에 대해 요청할 추가 공간을 나타내는 음이 아닌 값을 지정합니다.

24

relief => 정수

위젯에 원하는 3D 효과를 지정합니다. 허용되는 값은 다음과 같습니다.raised, sunken, flat, ridge, 및 groove.

25

repeatdelay => 정수

자동 반복을 시작하기 전에 버튼 또는 키를 누르고 있어야하는 시간 (밀리 초)을 지정합니다. 예를 들어 스크롤바의 위쪽 및 아래쪽 화살표에 사용됩니다.

26

repeatinterval => 정수

와 함께 사용 repeatdelay: 자동 반복이 시작되면이 옵션은 자동 반복 간격 (밀리 초)을 결정합니다.

27

selectbackground => 문자열

선택한 항목을 표시 할 때 사용할 배경색을 지정합니다.

28

selectborderwidth => 정수

선택한 항목 주위에 그릴 3 차원 테두리의 너비를 나타내는 음이 아닌 값을 지정합니다.

29

selectforeground => 문자열

선택한 항목을 표시 할 때 사용할 전경색을 지정합니다.

30

setgrid => 부울

이 위젯이 최상위 창에 대한 크기 조정 그리드를 제어하는지 여부를 결정하는 부울 값을 지정합니다. 이 옵션은 일반적으로 텍스트 위젯에서 사용되며, 위젯의 정보는 자연적인 크기 (문자 크기)를 가지며 창의 크기가 이러한 단위의 정수인 것이 합리적입니다.

31

takefocus => 정수

키보드 탐색 (예 : Tab 및 Shift-Tab)을 통해 창에서 창으로 포커스를 이동할 때 사용되는 정보를 제공합니다. 창에 포커스를 설정하기 전에 순회 스크립트는 먼저 창을 볼 수 있는지 (그 창과 모든 상위 항목이 매핑되었는지 확인합니다.) 그렇지 않은 경우 창을 건너 뜁니다. 값 0은 키보드 탐색 중에이 창을 완전히 건너 뛰어야 함을 의미합니다. 1은이 창이 항상 입력 포커스를 받아야 함을 의미합니다.

32

text => 문자열

위젯 내부에 표시 할 문자열을 지정합니다. 문자열이 표시되는 방식은 특정 위젯에 따라 다르며 다음과 같은 다른 옵션에 의해 결정될 수 있습니다.anchor 또는 justify.

33

textvariable => 변수

변수의 이름을 지정합니다. 변수의 값은 위젯 내부에 표시되는 텍스트 문자열입니다. 변수 값이 변경되면 위젯이 자동으로 업데이트되어 새 값을 반영합니다. 문자열이 위젯에 표시되는 방식은 특정 위젯에 따라 다르며 다음과 같은 다른 옵션에 의해 결정될 수 있습니다.anchor 또는 justify.

34

tile => 이미지

위젯을 표시하는 데 사용되는 이미지를 지정합니다. 이미지가 빈 문자열이면 일반 배경색이 표시됩니다.

35

troughcolor => 문자열

스크롤바 및 스케일과 같은 위젯에서 직사각형 골 영역에 사용할 색상을 지정합니다.

36

troughtile => 이미지

스크롤바 및 스케일과 같은 위젯의 직사각형 골 영역에 표시하는 데 사용되는 이미지를 지정합니다.

37

underline => 정수

위젯에서 밑줄을 긋는 문자의 정수 인덱스를 지정합니다. 이 옵션은 기본 바인딩에서 메뉴 단추 및 메뉴 항목에 대한 키보드 순회를 구현하는 데 사용됩니다. 0은 위젯에 표시되는 텍스트의 첫 번째 문자에 해당하고 1은 다음 문자에 해당하는 식입니다.

38

wraplength => 정수

자동 줄 바꿈을 수행 할 수있는 위젯의 경우이 옵션은 최대 줄 길이를 지정합니다.

39

xscrollcommand => 기능

수평 스크롤바와 통신하는 데 사용되는 콜백을 지정합니다.

40

yscrollcommand => 기능

수직 스크롤바와 통신하는 데 사용되는 콜백을 지정합니다.

Ruby / Tk 기하학 관리

Geometry Management는 요구 사항에 따라 다른 위젯의 위치를 ​​지정합니다. Tk의 지오메트리 관리는 마스터 및 슬레이브 위젯의 개념에 의존합니다.

마스터는 위젯, 일반적으로 최상위 창 또는 프레임이며 슬레이브라고하는 다른 위젯을 포함합니다. 지오메트리 관리자는 마스터 위젯을 제어하고 그 안에 표시 될 내용을 결정하는 것으로 생각할 수 있습니다.

지오메트리 관리자는 각 슬레이브 위젯의 원래 크기 또는 이상적으로 표시 할 크기를 묻습니다. 그런 다음 해당 정보를 가져 와서 지오메트리 관리자에게 특정 슬레이브 위젯을 관리하도록 요청할 때 프로그램에서 제공하는 매개 변수와 결합합니다.

인터페이스에있는 각 위젯의 크기와 위치를 제어하는 세 가지 지오메트리 관리자 위치, 그리드 이 있습니다.

  • 그리드 에서 위젯을 정렬하는 기하학 관리자.

  • 캐비티의 가장자리를 포장하는 지오메트리 관리자를 압축합니다.

  • 배치 고정 또는 고무 시트 형상 배치를 관리한다.

Ruby / Tk 이벤트 처리

Ruby / Tk는 운영 체제에서 이벤트를 수신 하는 이벤트 루프를 지원 합니다. 버튼 누르기, 키 입력, 마우스 이동, 창 크기 조정 등과 같은 것입니다.

Ruby / Tk는이 이벤트 루프를 관리합니다. 이벤트가 적용되는 위젯 (사용자가이 버튼을 클릭 했습니까? 키를 눌렀다면 어떤 텍스트 상자에 포커스가 있습니까?)을 파악하고 그에 따라 전달합니다. 개별 위젯은 이벤트에 응답하는 방법을 알고 있습니다. 예를 들어 마우스가 버튼 위로 이동하면 버튼의 색상이 변경되고 마우스가 떠날 때 되돌아 갈 수 있습니다.

상위 수준에서 Ruby / Tk는 프로그램에서 콜백을 호출하여 위젯에 중요한 일이 발생했음을 나타냅니다. 두 경우 모두 애플리케이션이 이벤트 또는 콜백에 응답하는 방법을 지정하는 코드 블록 또는 Ruby Proc 객체를 제공 할 수 있습니다 .

bind 메서드를 사용하여 기본 윈도우 시스템 이벤트를 처리하는 Ruby 프로 시저와 연결하는 방법을 살펴 보겠습니다. 가장 간단한 형태의 바인드는 이벤트 이름을 나타내는 문자열과 Tk가 이벤트를 처리하는 데 사용하는 코드 블록을 입력으로 사용합니다.

예를 들어, 일부 위젯에서 첫 번째 마우스 버튼에 대한 ButtonRelease 이벤트 를 포착하려면 다음과 같이 작성합니다.

someWidget.bind('ButtonRelease-1') {
   ....code block to handle this event...
}

이벤트 이름에는 추가 수정 자 및 세부 정보가 포함될 수 있습니다. 수정자는 수정 자 키 중 하나를 눌렀 음을 나타내는 Shift , Control 또는 Alt 와 같은 문자열 입니다.

예를 들어 사용자가 Ctrl 키를 누른 상태에서 마우스 오른쪽 버튼을 클릭 할 때 생성되는 이벤트를 포착 합니다.

someWidget.bind('Control-ButtonPress-3', proc { puts "Ouch!" })

많은 Ruby / Tk 위젯은 사용자가 콜백을 활성화 할 때 콜백 을 트리거 할 수 있으며, 이러한 경우 특정 코드 블록 또는 프로 시저가 호출 되도록 명령 콜백을 사용할 수 있습니다 . 앞에서 본 것처럼 위젯을 만들 때 명령 콜백 절차를 지정할 수 있습니다.

helpButton = TkButton.new(buttonFrame) {
   text "Help"
   command proc { showHelp }
}

또는 나중에 위젯의 명령 방법을 사용하여 할당 할 수 있습니다.

helpButton.command proc { showHelp }

명령 방법은 프로 시저 또는 코드 블록을 허용하므로 이전 코드 예제를 다음과 같이 작성할 수도 있습니다.

helpButton = TkButton.new(buttonFrame) {
   text "Help"
   command { showHelp }
}
Sr. 아니. 태그 및 이벤트 설명
1

"1" (one)

왼쪽 마우스 버튼을 클릭했습니다.

2

"ButtonPress-1"

왼쪽 마우스 버튼을 클릭했습니다.

"Enter"

마우스를 안으로 이동했습니다.

4

"Leave"

마우스를 밖으로 이동했습니다.

5

"Double-1"

두 번 클릭했습니다.

6

"B3-Motion"

한 위치에서 다른 위치로 오른쪽 버튼을 끕니다.

7

Control-ButtonPress-3

Ctrl 키 와 함께 오른쪽 버튼을 누릅니다 .

8

Alt-ButtonPress-1

Alt 키 와 함께 Let 버튼을 누릅니다 .

구성 방법

The configure method can be used to set and retrieve any widget configuration values. For example, to change the width of a button you can call configure method any time as follows −

require "tk"

button = TkButton.new {
   text 'Hello World!'
   pack
}
button.configure('activebackground', 'blue')
Tk.mainloop

To get the value for a current widget, just supply it without a value as follows −

color = button.configure('activebackground')

You can also call configure without any options at all, which will give you a listing of all options and their values.

The cget Method

For simply retrieving the value of an option, configure returns more information than you generally want. The cget method returns just the current value.

color = button.cget('activebackground')