如何在全屏上更改Gtk应用程序的布局?

时间:2012-12-01 10:21:14

标签: python user-interface gtk pygobject

我正在使用Python和Gtk开发另一个图像查看器,目前查看器非常简单:它由左侧GtkWindowGtkTreeView组成,显示我的图像列表,以及右侧有一个GtkImage,显示实际图像。到目前为止,非常好。

现在,我想全屏显示,只显示带有黑色背景的图像等。

我可以看到几种方法:

  • 我可以隐藏()窗口,然后显示一个大的GtkImage,但我丢失了之前在窗口上设置的所有东西(例如信号),我正在隐藏窗口全屏,这有点奇怪;
  • 我可以隐藏()窗口的内容,删除窗口的内容(据我所知只能有一个孩子?),并在内部添加一个GtkImage(并执行退出全屏时反向);
  • 我可以尝试使用窗口内的容器,并在窗口全屏/退出全屏时隐藏/显示其内容。更确切地说,我正在考虑添加另一个GtkHBox作为我的窗口的直接子项,有两个孩子,并且在“正常”模式下仅显示第一个,而在全屏上仅显示第二个。

这一切看起来都有点hacky,所以我想知道处理这种情况的推荐方法是什么。谢谢!

1 个答案:

答案 0 :(得分:6)

我认为实现这一目标的最简单方法是使用一个布局来设置所有小部件并设置信号。然后,当您在全屏模式下切换时,您会看到一组可见且不可见的小部件。试试下面的演示。当您按F11时,这是一个简单的实现,可以进出全屏。 HBox用于制作布局,左侧包含标签,右侧包含图像。我在标签上填写了一些虚拟文本,以便占用大量空间。当您切换进出全屏时,它将切换标签的可见性,从而使图像占据全屏空间或与标签共享。我只是使用了gtk附带的一张图片用于演示目的。下面是两个屏幕截图,显示了全屏布局和布局。

<强>代码

import gtk

def keypress(win, event):
    if event.keyval == gtk.keysyms.F11:
        win.is_fullscreen = not getattr(win, 'is_fullscreen', False)
        action = win.fullscreen if win.is_fullscreen else win.unfullscreen
        action()
        label.set_visible(not win.is_fullscreen)

win = gtk.Window()
win.connect("delete-event", gtk.main_quit)
win.connect('key-press-event', keypress)
image = gtk.image_new_from_stock(gtk.STOCK_ABOUT, gtk.ICON_SIZE_DIALOG)
label = gtk.Label(('test ' * 20 + '\n') * 20)
vbox = gtk.HBox()
vbox.add(label)
vbox.add(image)
win.add(vbox)
win.show_all()
gtk.main()

普通窗口

enter image description here

全屏

enter image description here