How to change the layout of a Gtk application on fullscreen?

别等时光非礼了梦想. 提交于 2020-01-03 10:07:19

问题


I'm developing another image viewer using Python and Gtk and the viewer is currently very simple: it consists of a GtkWindow with a GtkTreeView on the left side displaying the list of my images, and a GtkImage on the right side, displaying the actual image. So far, so good.

Now, I would like to go fullscreen, and display only the image with a black background, etc.

I can see several ways of doing this:

  • I can hide() the window, and display a big GtkImage instead, but I'm loosing all the stuff that I setup on the window before (signals for example), and I'm hiding the window which goes fullscreen, which is a bit weird;
  • I can hide() the content of the window, remove the content of the window (which can have only one child, as far as I know?), and put a GtkImage inside instead (and do the reverse on exiting fullscreen);
  • I can try to play with the containers inside my window, and hiding/showing their content when the window is going fullscreen/exiting fullscreen. More precisely, I was thinking of adding another GtkHBox as a direct child of my window, with two child, and displaying only the first one on "normal" mode, and only the second one on fullscreen.

That all seem a bit hacky, so I wonder what would be the recommended way to handle this kind of situation. Thanks!


回答1:


I think the simplest way to implement this is to have one layout with all your widgets setup and the signals setup. Then when you toggle in and out off fullscreen you have a set of widgets that you make visible and not visible. Try out the demonstration below. It's a simple implementation that goes in and out of fullscreen when you press F11. An HBox is used to make the layout, which contains a label on the left and an image on the right. I've filled the label with some dummy text so that it takes up a good amount of space. As you toggle in and out of fullscreen it will toggle the visibility of the label and thus make the image either take the full screen real estate or share it with the label. I just used one of the stock images that comes with gtk for demonstration purposes. Below are two screenshots showing the layout in and out of fullscreen.

Code

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()

Normal window

Full screen



来源:https://stackoverflow.com/questions/13658460/how-to-change-the-layout-of-a-gtk-application-on-fullscreen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!