如何在PyGTK中将小部件打包到窗口的垂直中心?

时间:2014-12-18 23:06:12

标签: python layout pygtk

我正在使用PyGTK创建GUI:

vbox = gtk.VBox(False, 1)
vbox.set_border_width(1)
window.add(vbox)
vbox.show()

vbox.pack_start(menubar, False, True, 0)
vbox.pack_start(a, False, False, 0)
vbox.pack_start(b, False, False, 10)
vbox.pack_end(self.statusbar, False, False, 0)
vbox.pack_end(c, False, False, 10)
  • ab是固定大小的元素。

这会创建一个这样的窗口:

 _______________________
|_Window____________|_X_|
|_File_Edit_____________|
|          [a]          |
|          [b]          |
|                       |
|                       |
|                       |
|                       |
|__________[c]__________|
|__Status okay._________|

我需要垂直居中ab,以便a的下边缘出现在垂直中心,而b的上边缘出现在垂直中心:

 _______________________
|_Window____________|_X_|
|_File_Edit_____________|
|                       |
|           |           |
|           v           |
|          [a]          |
|                       |<-- 10 px margin
|          [b]          |
|           ^           |
|           |           |
|                       |
|__________[c]__________|
|__Status okay._________|
  • 在PyQT4中,可以通过将addStretch(1)添加到这些项之前和之后的空格来实现此布局,但是我找不到PyGTK的等效命令。
  • 中心可以测量为文件菜单和状态栏之间的空格,或者文件菜单和[c]之间的空格,无论哪种解决方案最简单。

有没有办法以这种方式垂直居中窗口中的项目?

1 个答案:

答案 0 :(得分:1)

你必须使用第二个VBox打包&amp; b小部件在一起然后打包这个盒子中心,在代码下面运行:

import gtk

window = gtk.Window()
window.set_size_request(120, 180)

vbox = gtk.VBox()
vbox.set_border_width(1)
window.add(vbox)
vbox.show()

a = gtk.Label('a')
b = gtk.Label('b')
c = gtk.Label('c')

vbox2 = gtk.VBox()
vbox2.pack_start(a, True, False, 0)
vbox2.pack_start(b, True, False, 10)
vbox.pack_start(vbox2, True, False, 10)
vbox.pack_end(c, False, False, 10)

window.connect('destroy', gtk.main_quit)
window.show_all()
gtk.main()

Pack_startpack_end方法获取一些参数来设置小部件的位置。

pack_start(widget?, center?, max_stretch?, border?)