2012-12-01 9 views
6

Sto sviluppando un altro visualizzatore di immagini usando Python e Gtk e il visualizzatore è al momento molto semplice: consiste in un GtkWindow con un GtkTreeView sul lato sinistro che visualizza l'elenco delle mie immagini, e un GtkImage sul lato destro, visualizzando il immagine reale. Fin qui tutto bene.Come modificare il layout di un'applicazione Gtk a schermo intero?

Ora, vorrei andare a schermo intero, e visualizzare solo l'immagine con uno sfondo nero, ecc

posso vedere diversi modi per farlo:

  • posso nascondere() il finestra, e visualizzare un grande GtkImage invece, ma sto perdendo tutte le cose che ho configurato sulla finestra prima (segnali per esempio), e sto nascondendo la finestra che va a schermo intero, che è un po 'strano;
  • Posso nascondere() il contenuto della finestra, rimuovere il contenuto della finestra (che può avere un solo figlio, per quanto ne so?) E inserire invece un GtkImage (e fare il contrario all'uscita a schermo intero);
  • Posso provare a giocare con i contenitori all'interno della mia finestra e nascondere/mostrare il loro contenuto quando la finestra diventa a schermo intero/a schermo intero. Più precisamente, stavo pensando di aggiungere un altro GtkHBox come figlio diretto della mia finestra, con due figli, e visualizzare solo il primo in modalità "normale" e solo il secondo a schermo intero.

Sembra tutto un po 'hacky, quindi mi chiedo quale sarebbe il modo consigliato per gestire questo tipo di situazione. Grazie!

risposta

6

Penso che il modo più semplice per implementarlo sia quello di avere un layout con tutte le impostazioni dei widget e l'impostazione dei segnali. Quindi, quando si attiva e si disattiva a schermo intero, si dispone di un set di widget che si rendono visibili e non visibili. Prova la dimostrazione qui sotto. È una semplice implementazione che entra e esce da fullscreen quando si preme F11. Un HBox viene utilizzato per creare il layout, che contiene un'etichetta a sinistra e un'immagine a destra. Ho riempito l'etichetta con un testo fittizio in modo da occupare una buona quantità di spazio. Quando si attiva e si disattiva la modalità a schermo intero, si attiva la visibilità dell'etichetta e si fa in tal modo che l'immagine acquisisca l'intero spazio sullo schermo o la condivida con l'etichetta. Ho appena usato una delle immagini che vengono fornite con gtk a scopo dimostrativo. Di seguito sono riportati due screenshot che mostrano il layout dentro e fuori lo schermo intero.

Codice

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

finestra normale

enter image description here

Full screen

enter image description here

+0

OK, leggendo il nostro post, ho appena realizzato che ho solo 3 widget/contenitori da nascondere/mostrare a schermo intero o meno. Quindi, basta attivare la visibilità di quelli quando cambio la modalità, come hai fatto nel tuo esempio, è abbastanza sufficiente ... –

+0

@multani felice di sentire che ha funzionato per te. –