2011-09-30 2 views
0

TkRoot의 '위쪽'부분에 두 개의 버튼을 배치하면 서로 아래에 있습니다. '.pack'의 매개 변수는 수평으로 정렬됩니까? (솔루션은 n 버튼에도 적용되어야 함)Tk, .pack을 사용하여 레이아웃을 만드는 방법?

루비 코드는 훌륭하지만 tk와 작동하는 것은 훌륭합니다. (파이썬 등의 사람이라면)

편집 : 다음은 필요합니다 : 오른쪽 'TkText + TkScrollbar'안에 'top'만 사용하면됩니다. 의도 (단추가 TkText 위에 있음)

답변

0

왼쪽의 단추는 pack이어야합니다.

require 'tk' 

root = TkRoot.new 
# button 1 
btn_OK = TkButton.new(root) do 
    text "OK" 
    borderwidth 5 
    underline 0 
    state "normal" 
    cursor "watch" 
    font TkFont.new('times 20 bold') 
    foreground "red" 
    activebackground "blue" 
    relief  "groove" 
    command (proc {}) 
    pack("side" => "left", "padx"=> "50", "pady"=> "10") 
end 
# button 2 
btn_Cancel = TkButton.new(root) do 
    text "Cancel" 
    borderwidth 5 
    underline 0 
    state "normal" 
    cursor "watch" 
    font TkFont.new('times 20 bold') 
    foreground "red" 
    activebackground "blue" 
    relief  "groove" 
    command (proc { exit }) 
    pack("side" => "left", "padx"=> "50", "pady"=> "10") 
end 
Tk.mainloop 
+0

실제 요구 사항을 반영하도록 제 질문을 수정했습니다. – NopeAndNever

1

TK에의 포장은 외부 위젯 내부의 나머지 공간 떨어져 슬라이스를 복용하고 내부 위젯에 해당 슬라이스를 할당하여 작동합니다 내가 온라인으로 발견 Tk의 예를 수정했습니다. (side은 슬라이스가 제거 된 공간의 어느 쪽인지를 말하며 fill은 내부 위젯이 공간을 차지하는 방식을 말하고 expand은 외부 위젯의 크기가 변경 될 때 상황이 어떻게 반응하는지 말합니다.) 슬라이스 내에서 내부 위젯이 가운데에 배치됩니다 . 일을 제대로하려면 약간의 조정이 필요할 수 있습니다. 이 일을 할 때 위젯의 배경을 다른 (번쩍 거리는) 색상으로 변경하면 상황을 더 쉽게 볼 수 있기 때문에 대개 더 쉽습니다.

패커에서 원하는 것을 수행 할 수없는 경우 중첩 된 프레임을 사용해야하거나 그리드 레이아웃 엔진을 사용하도록 전환해야합니다 (훨씬 더). (아주 펑키 물건 <Configure> 이벤트를 듣고 또는 사금을 사용하여 필요로 할 수 있지만, 정말 그들이 모두 드문 일이야. 모든 레이아웃의 99.9 %가 packgrid 수행 할 수 있습니다.) 많은 Tk의 개발자는 달리

+0

그 간단한 프로그램을 위해서 나는 단지 꾸러미를 사용하고 싶다. 그것은 과잉이라고 할 수있다. – NopeAndNever

+0

@Nope : 간단한 레이아웃에도 그리드를 사용하는 반면 (매우 예외적으로) 오 잘, 마일리지는 결국 달라진다. 우리가 어떻게 생각 하느냐에 달려 있다고 생각합니다. –

1

을, 나는 팩을 선호 왜냐하면 그것이 어떻게 작동하는지에 대한 정신적 모델을 형성하는 것이 더 쉽기 때문입니다. 팩을 사용하여 매우 정교한 레이아웃을 만들 수도 있습니다. 개념적으로 접근하는 방법은 프레임을 컨테이너로 사용하고 순서대로 (모든 오른쪽 또는 왼쪽) 또는 나란히 (왼쪽/오른쪽) 배치하는 것입니다. 이 컨테이너/하위 접근법을 사용하면 원하는 곳 어디에서나 물건을 포장 할 수 있습니다. 정렬하려는 항목이 동일한 컨테이너/프레임 내에 있는지 확인하십시오.

+0

아마도 2 프레임짜리 하나의 수직 한 예가 될 것입니다. 그리고 저는 모두 행복합니다 :-D 제발. – NopeAndNever

0

팩 자체만으로는 동일한 컨테이너에 가로 및 세로로 물건을 놓을 수 없습니다. 이것은 보편적 인 진리가 아니라 엄지 손가락의 규칙과 같습니다. 기존의 두 가지 솔루션이 있습니다. 중첩 된 프레임 사용 - 가로로 정렬 된 항목은 하나 이상, 세로로 정렬 된 항목은 하나 이상 - 그리드를 사용하여 전환합니다.

중첩 프레임은 기존 위젯의 부모를 변경해야한다는 의미는 아닙니다. 팩 (및 격자 및 장소)에 대한 in 옵션은 매우 유용합니다.