Domanda

C'è un modo in Gtk + per impilare un widget sopra l'altro - senza contare GtkFixed? GtkFixed non funziona bene per due motivi:. 1) Ho bisogno di ordine Z, e 2) Ho bisogno di un widget di allungare e riempire lo spazio fornito

È stato utile?

Soluzione

Non credo che ci sia un contenitore adeguato in GTK standard. Vorrei sottoclasse Gtk :: fisso ... è ancora quello più vicino si può ottenere, e se si utilizza gtkmm quindi sottoclasse non dovrebbe essere molto difficult¹. Quindi è possibile controllare le dimensioni di tutti i widget, che si estende un bambino selezionato per riempire lo spazio.

Per controllare l'asse Z si avrà probabilmente bisogno di manipolare le finestre X del widget - controllare la documentazione GDK sul tema della GDK windows². Mi ricordo che in PyGTK ogni widget ha proprietà gtk.Widget.window, immagino che lo stesso è per gtkmm. Ciò presuppone che tutti i widget figli hanno X windows, così f.e. avrete bisogno di avvolgere Gtk :: Etichetta all'interno Gtk :: EventBox.

http: // www. gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/chapter-customwidgets.html

http: // www. gtkmm.org/docs/gtkmm-2.4/docs/reference/html/classGdk_1_1Window.html#6eef65b862344ad01b01e527f2c39741

Altri suggerimenti

Ho avuto questo problema esatto utilizzando un Gtk :: fissa (in realtà gtk.Fixed - pygtk - ma credo che sia lo stesso sotto) e sono stato in grado di gestire la cosa abbastanza facilmente manipolando la finestra di ciascun widget

Nel mio caso, i widget già sono casi EventBox, e ho solo bisogno di fare in modo che quello che stavo trascinando intorno era in cima, perché altrimenti scivolare al di sotto gli altri, che sembrava del tutto sbagliato. La soluzione era semplice come chiamare "widget.window.raise_ ()" per aumentare la finestra sottostante del widget quando il widget è stato cliccato per iniziare il trascinamento.

Quindi sono fondamentalmente solo riaffermando che la risposta precedente funziona, ma ho voluto sottolineare che in realtà è abbastanza facile. Suona come potrebbe essere necessario creare alcuni EventBoxes per contenere i widget, ma dopo che dovrebbe funzionare.

È possibile vedere il codice su cui stavo lavorando a http://github.com/divegeek/BlockHead

Sono stato in grado di fare esattamente questo -

  

un widget visualizzazione riempire l'intero spazio, e quindi un altro su una postazione fissa, sia visibile contemporaneamente

in GTK2 utilizzando GtkFixed, elaborazione di un ordine di inserimento adeguato (primo inserito - fondo, ultimo inserito - in alto), e - più importante !! - costringendo GtkFixed di avere il proprio finestra:

`f := gtk_fixed_new();
gtk_widget_set_has_window(f, 1);`

Se non fai set_has_window (f, 1), tutte le finestre bambini saranno inseriti in qualche widget di genitore / finestra (vedi gtk_fixed_realize () in gtkfixed.c), e che potrebbe creare z-ordine di disordine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top