2016-08-25 7 views
1

Как мне изменить модальное диалоговое окно (уменьшить), чтобы оно соответствовало размеру его дочерних элементов при удалении дочерних виджетов? Следующий пример вырезания устанавливает ширину модального диалога, добавляет виджеты (который автоматически расширяет высоту), однако при удалении виджета остальные дочерние виджеты сдвигаются, но модаль остается той же самой высотой с пустым пространством внизу.Изменение размера диалогового окна Gtk после скрытия/удаления виджетов

import gtk 
import pango 

dialog = gtk.Dialog() 
dialog.set_modal(True) 

screen_width = gtk.gdk.screen_width() 
screen_height = gtk.gdk.screen_height() 

dialog.set_property('width-request', screen_width/3) 
dialog.set_position(gtk.WIN_POS_CENTER_ON_PARENT) 
dialog.action_area.set_layout(gtk.BUTTONBOX_SPREAD) 


flash = gtk.Label("Foo") 
flash.set_alignment(0, 0) 
flash.set_line_wrap(True) 
flash.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#a94442')) 
flash.modify_font(pango.FontDescription("sans 48")) 

eventbox = gtk.EventBox() 
eventbox.add(flash) 
eventbox.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse('#ebccd1')) 

label = gtk.Label("Username:") 

def check(widget=None): 
    print "test" 
    flash.hide() 

entry = gtk.Entry() 

button = gtk.Button('Check') 
button.connect('clicked', check) 

table = gtk.Table(2, 2, False) 
table.attach(label, 0, 1, 0, 1, xoptions=gtk.SHRINK) 
table.attach(entry, 1, 2, 0, 1, xoptions=gtk.EXPAND|gtk.FILL) 
table.attach(button, 1, 2, 1, 2, xoptions=gtk.EXPAND|gtk.FILL) 
table.show() 

vbox = gtk.VBox() 
vbox.pack_start(eventbox, False, False, 10) 
vbox.pack_start(table, False, False, 10) 

dialog.vbox.add(vbox) 
dialog.show_all() 
dialog.run() 
+0

Диалоги не могут быть изменены, но это может быть полезно http://stackoverflow.com/questions/14284166/set-dialog-not-resizable-or-create-another-gtk-window – Louis

ответ

1

Вы пробовали:

dialog.resize(400, 400)

Первое число ширина, вторая высота. Вам нужно будет сыграть с геометрией, чтобы выяснить, что вам нужно, или каким-то образом получить размер ваших виджетов.

P.S. Это работало для меня с использованием Gtk 3.12. Вы не публиковали свою версию.