Tk 8.4 후반 버전대의 새로운 기능

admin의 아바타

spinbox

spinbox .spia -from 1 -to 10 -textvariable v
pack .spia
.spia configure -state readonly
set v

spinbox 위젯은, Tk 8.4 버전부터 추가된 3개의 위젯중 에서도, 전 부터 존재했었기 때문에 일반적이라 볼 수 있습니다. scale과 마찬가지로 연속적인 값중에서 한개의 값을 선택하는 위젯입니다. 선택할수 있는 값의 범위는 -from-to로 지정합니다. -state옵션은 normal, readonly, disabled 3개가 있고, 기본은 normal 입니다. normal의 경우는 우측의 화살표를 클릭하여 값을 증가시킬수 있는것 외에도, 텍스트 부분을 직접 편집하여 값을 변경할수 있습니다. readonly는 우측의 화살표 부분을 클릭하여 값을 증가 시킬수 있으며, 텍스트 편집은 불가능합니다. disabled는 양측 모두 편집이나 증가 모두 불가능 상태가 됩니다.

labelframe

set fa [labelframe .fa -bd 2 -rel groove -text "타이틀" -labelanchor ne]
label $fa.lab1 -text "선택하여 주십시오."
button $fa.b1 -text "버튼 1"
button $fa.b2 -text "버튼 2"
button $fa.b3 -text "버튼 3"
foreach e {lab1 b1 b2 b3} {
    pack $fa.$e -side top -padx 2 -pady 2 -anc w
}
pack $fa

label과 frame의 조합에 많은 분들이 목말라 했을겁니다. 다른 GUI 툴킷에서는 훌륭한 메이저 위젯으로, Tk 에서도 사용할수 있게 됐으며, frame의 선 일부에 label을 표시할수 있습니다. 텍스트는 -text 옵션으로 지정할수 있고, -labelwidget 옵션으로는 임의의 위젯을 지정할 수 있습니다. -borderwidth-relief등 frame위젯에서 사용하던 옵션의 대부분을 사용할수 있습니다. 독특한 옵션 -labelanchor는, frame위의 label 위치를 동남서북 eswn의 기호로 나타내고, 최대 2개의 조합으로 사용할수 있습니다. 기본은 nw(북서: 왼쪽 위) 입니다.

panedwindow

set pa [panedwindow .pa -orient horizontal]

set f1 [frame .f1 -bd 3 -rel groove]
listbox $f1.lsta
$f1.lsta insert end "Item A"
$f1.lsta insert end "Item B"
$f1.lsta insert end "Item C"
pack $f1.lsta

set f2 [frame .f2 -bd 3 -rel groove]
message $f2.msga -text { 테스트 중 입니다.} -width 150
pack $f2.msga

$pa add $f1; $pa add $f2
pack $pa

panedwindow는 윈도우를 여러개의 창 틀로 나눈 frame입니다. frame과의 차이는, pane의 경계선으로 된 틀을 마우스로 각 pane의 폭을 좁히거나 넓히거나 하는 일을 할 수 있습니다. -orient 옵션으로 경계선의 방향을 결정짓는데, horizontal, vertical로 결정지을수 있습니다. 위젯을 생성하면 add 커맨드로 위젯을 panedwindow에 왼쪽 순으로 추가할 수 있습니다. forget 커맨드로 삭제하는것도 가능합니다.

-compound 옵션

image create photo Image1 -file ok.gif
button .b -text "확인" -image Image1 \
    -compound right -font {Helvetica 10 normal}
pack .b -ipadx 5

button, label, menuitem의 각 위젯에 -compound 옵션이 추가됐습니다. 이 옵션은 이러한 위젯에 -text 옵션으로 지정된 레이블 문자열이나, -image 옵션으로 지정된 이미지 출력이나, 어느 한쪽밖에 표시할수 없었던 문제를 해결하고 있습니다. 레이블과 이미지를 동시에 표시하고 싶은 위젯에 -text, -image 옵션을 사용합니다. 그리고 -compound 옵션으로 표시방법을 지정하며, none, top, bottom, left, right, center 중에서 선택합니다. 기본값은 none이며, -text나 -image 양쪽이 지정되면, 이미지만 출력됩니다. top 이후의 다섯개는 문자열로부터 이미지를 어디에 출력할것인가를 지정하는 의미입니다.

첨부 파일파일 크기
spinbox.png7.11 KB
labelframe_1.png7.18 KB
panedwindow.png10.61 KB
compound.png7.4 KB
compound2.png6.32 KB