我在ButtonBox中添加了几个孩子,但我希望它们不是同质的。因此,我调用了ButtonBox.set_homogeneous(False),并且大多数情况下它都起作用。但是,当我将窗口的大小调整为最小时,出现一个垂直的滚动条时,我发现ButtonBox下方有很多空白。我能够通过将每个子项分别指定为非同质调用ButtonBox.set_child_non_homogeneous(child,True)来解决此问题,同时还保留了先前对ButtonBox.set_homogeneous(False)的调用。
我的问题是,为什么会这样?我将ButtonBox的布局设置为EXPAND,应占用所有空间。
我做了一些测试代码来说明我在说什么。您可以尝试使用带和不带注释的行,以查看我提到的两种情况。
import sys
from gi.repository import Gtk
class Application(Gtk.Application):
def __init__(self):
super().__init__(application_id='com.stackoverflow.xor')
self.connect('activate', self.on_activate)
self.connect('startup', self.on_startup)
def on_startup(self, app):
self.window = Gtk.ApplicationWindow(application=app)
self.window.set_default_size(200, 200)
self.window.add(MainView(self))
def on_activate(self, app):
self.window.show_all()
class MainView(Gtk.ScrolledWindow):
def __init__(self, app):
super().__init__()
button_list = Gtk.ButtonBox(orientation=Gtk.Orientation.VERTICAL)
button_list.set_layout(Gtk.ButtonBoxStyle.EXPAND)
button_list.set_homogeneous(False)
button_list.get_style_context().remove_class('linked')
for i in range(4):
button = Gtk.Button()
label = Gtk.Label('\n'.join(['test test'] * (i + 1)))
button.add(label)
button_list.pack_start(button, False, False, 0)
#button_list.set_child_non_homogeneous(button, True)
self.add(button_list)
if __name__ == '__main__':
main_app = Application()
exit_status = main_app.run(sys.argv)
sys.exit(exit_status)
最佳答案
您的问题是在将按钮添加到设置为“展开为假”的框中时。
button_list.pack_start(button,False,False,0)
具有EXPAND布局的按钮箱与其子项自行展开不同。
编辑:这在#gtk +上进行了讨论,但对于此布局,子代都应将“展开和填充”设置为“真”。