如何使用Revealer-like过渡调整Gtk + 3中的窗口大小?

时间:2015-03-13 18:29:21

标签: python gtk gtk3 pygobject

使用PyGObject,可以获得一个通过Revealer过渡扩展的窗口,如下面的代码片段所示:http://learngtk.org/tutorials/python_gtk3_tutorial/html/revealer.html

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from gi.repository import Gtk

def reveal_child(button):
    if revealer.get_reveal_child():
        revealer.set_reveal_child(False)
    else:
        revealer.set_reveal_child(True)

window = Gtk.Window()
window.connect("destroy", Gtk.main_quit)

grid = Gtk.Grid()
window.add(grid)

revealer = Gtk.Revealer()
revealer.set_reveal_child(False)
grid.attach(revealer, 0, 1, 1, 1)

label = Gtk.Label("Label contained in a Revealer widget")
revealer.add(label)

button = Gtk.Button("Reveal")
button.connect("clicked", reveal_child)
grid.attach(button, 0, 0, 1, 1)

window.show_all()

Gtk.main()

如何获得窗口收缩(转换)的相反效果?现在revealer.set_reveal_child(False)可以看到用于原始显示的扩展空间。

所寻求的效果与Expander类相同。 set_resize_toplevel(True)效果。{{1}}

1 个答案:

答案 0 :(得分:0)

我试图将此作为评论发布,但我没有足够的声誉点。这个答案实在太短(在我看来)是一个单独的答案。无论如何,尝试设置孩子的可见性,例如“revealer.get_reveal_child()。set_visible(False)” 这似乎做了我认为你想做的事情。当您切换显示时,您必须切换孩子的可见性。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from gi.repository import Gtk

def reveal_child(button):
    if revealer.get_reveal_child():
        revealer.set_reveal_child(False)
        # this line was a mistake
        #revealer.get_reveal_child().set_visible(False)
        revealer.set_visible(False)
    else:
        revealer.set_reveal_child(True)
        # this line was a mistake
        #revealer.get_reveal_child().set_visible(True)
        revealer.set_visible(True)

window = Gtk.Window()
window.connect("destroy", Gtk.main_quit)

grid = Gtk.Grid()
window.add(grid)

revealer = Gtk.Revealer()
revealer.set_reveal_child(False)
grid.attach(revealer, 0, 1, 1, 1)

label = Gtk.Label("Label contained in a Revealer widget")
revealer.add(label)

button = Gtk.Button("Reveal")
button.connect("clicked", reveal_child)
grid.attach(button, 0, 0, 1, 1)

window.show_all()

Gtk.main()

编辑纠正:第一次,我在错误的小部件上设置了可见。