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!
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 gtkdef 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.unfullscreenaction()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