2012-07-21 6 views
1

pygtk 대화 상자를 사용하고 있습니다. 버튼을 추가 했으므로 이제 단추의 위치를 ​​제어하려고합니다. 예를 들어 센터링.pygtk 센터링 대화 상자 단추

import pygtk 
pygtk.require('2.0') 
import gtk 

dlg = gtk.Dialog('Marker Label') 
dlg.set_size_request(350, 300) 
dlg.show() 

entry = gtk.Entry() 
entry.show() 
entry.set_activates_default(gtk.TRUE) 
dlg.vbox.pack_start(entry) 

# Create a centering alignment object 
align = gtk.Alignment(0.5, 0.5, 0, 0) 

button = dlg.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) 

align.add(button) 
dlg.vbox.pack_start(align, False, False, 5) 
dlg.set_default_response(gtk.RESPONSE_OK) 
response = dlg.run() 

if response == gtk.RESPONSE_OK: 
    label = entry.get_text() 
    print label 
dlg.destroy() 

나는이 메시지가 무엇입니까 : 여기

내 코드입니다

test.py:19 : GtkWarning : 형 GtkAli의 컨테이너 형 GtkButton에 위젯을 추가하려고 gnment, 위젯은 이미 GtkHButtonBox 유형의 컨테이너 안에 있지만, http://library.gnome.org/devel/gtk-faq/stable/의 GTK + FAQ는 위젯을 다시 부모로 만드는 방법을 설명합니다. 대화 상자의 아래쪽에 수평 버튼 박스 - 그것은 말처럼 align.add (버튼)

답변

1

문제가 dlg.add_button에 의해 반환 된 버튼()을 이미 부모가 있다는 것입니다.

FAQ를 따를 수 있습니다 - HButtonBox에서 단추를 제거한 후에 vbox에 추가하십시오. (힌트 : 어느 쪽이든, 대화 상자를 보이기 전에 모든 것을하고 싶다고 생각합니다.) hbox가 "action_area"라고 불리는 것 같습니다. 어쩌면 dlg.action_area.remove (button)

또는 직접 단추를 만들 수 있습니다. dlg.add_button()을 사용하는 대신 gtk.button_new_from_stock (gtk.STOCK_OK)을 사용하십시오.

[그러나 나는 Gtk 프로그래머가 아니며 두 경우 모두 이벤트 처리가 어떻게 작동하는지 알지 못합니다. 나는. 단추 중 하나를 눌렀을 때 대화 상자를 닫을 지 또는 더 많은 것을 추가해야하는지 여부는 알 수 없습니다. Gtk 문서는 확실히 저에게 인상을주고 있습니다 ...]

0

당신은 올바른 길을 가고있었습니다. 단순히 버튼 상자 (action_area)를 gtk.Alignment로 이동하십시오. 당신은 평소처럼 대화

빌드 후 추가

align_action_area = gtk.Alignment(xalign=0.5, yalign=0.0, xscale=0.0, yscale=0.0) 
dialog.vbox.pack_end(child=align_action_area) 
dialog.action_area.reparent(new_parent=align_action_area) 
dialog.set_default_response(gtk.RESPONSE_OK) 
dialog.show_all() 

참고 : set_default_response()를 reparent 후 호출해야합니다() 그렇지 않으면 기본 기능이 작동하지 않습니다 활성화합니다.

코드에서

대체 :

align.add(button) 
dlg.vbox.pack_start(align, False, False, 5) 

로 :

dlg.vbox.pack_end(child=align, expand=False, fill=False, padding=5) 
dlg.action_area.reparent(new_parent=align) 
dlg.show_all() 
관련 문제