2006/01/20

PyGTK에서 TextView 에 다른 Widget 추가

PyGTK 2 에서 textview 위젯에 위젯 포함할때

TextView 위젯 안에는 다른 위젯을 포함할 수 있는데, 이때 위젯은 TextView에 간단히 추가되지 않는다.

추가할때 PyGTK의 객체 추가방법과는 조금 다른 방법으로 추가된다.

1. window 나 box 위젯에 객체 추가하기
add 메소드나 pack_start, pack_end 메소드 사용하기

add 메소드 사용
win.add(widget)

pack_start, pack_end 메소드 사용
hbox.pack_start(wiget, expand, fill, spacing)
vbox.pack_end(widget, expand, fill, spacing)

그런데 textview 위젯에서는 iter와 anchor 를 얻어서 생성해야 한다. 그리고 textview 에 위젯을 추가하는 메소드를 사용한다.

2. textview 위젯에 다른 위젯 추가하기

textview buffer 얻어오기
buffer = textview.get_buffer()

textview buffer의 iter 얻어오기
iter = buffer.get_start_iter()

textview buffer에 anchor 추가. # create_child_anchor 메소드는 iter 를 요구한다.
anchor = buffer.create_child_anchor(iter)

textview 에 추가할 위젯 생성
checkButton = gtk.CheckButton("생성된 파티션을 확인하시겠습니까?")
checkButton.show()

button을 textview 에 추가. # add_child_at_anchor 는 1번째 요소로 추가할 위젯을 받고, 2번째 요소로 anchor를 받는다.
textview.add_child_at_anchor(checkButton, anchor)

######### 참고 #########
이때 anchor가 미리 생성되어 있다면 anchor 추가 구문 대신 다음 구문을 써서 anchor를 받아올 수 있다. 물론 생성되어 있다는 가정하에서는 iter 를 얻어오는 구문 조차 필요하지 않다.
anchor = buffer.get_data("anchor")
########################

이제 실행된 textview에는 다른 위젯이 포함되어 있는걸 확인할 수 있다.

------------------------------------------ textview에 위젯을 더 추가해보기
textview에 위젯이 포함되어 있을때 위젯을 더 추가하려면 anchor를 한번더 생성해야 한다.
이때 anchor 생성은 anchor를 생성하는 구문만 한번 더 써주면 되며 iter를 생성할 생각이라면
get_start_iter() 메소드는 textview의 가장 첫번째 iter를 얻어오게 되므로 마지막에 위젯을
추가할 생각이라면 get_end_iter()를 이용해서 iter를 얻어와야 합니다.
-----------------------------------------------------------------------

댓글 없음: