Pregunta

¿Hay alguna manera en GTK + para apilar un widget en la parte superior de otro - sin contar GtkFixed? GtkFixed no funciona bien por dos razones:. 1) Necesito orden Z, y 2) Necesito un widget para estirar y rellenar proporcionado espacio

¿Fue útil?

Solución

No creo que hay un recipiente adecuado en GTK estándar. Me subclase Gtk :: fijo ... todavía es el más cercano que puedes conseguir, y si se utiliza a continuación, la subclasificación gtkmm no debe ser muy difficult¹. A continuación, puede controlar las dimensiones de todos los widgets, que se extiende un hijo seleccionado para llenar el espacio.

Para el control del eje Z es probable que necesite para manipular ventanas X de Widget - compruebe la documentación sobre el tema de GDK GDK windows². Recuerdo que en PyGTK cada widget tiene la propiedad gtk.Widget.window, supongo que lo mismo es para gtkmm. Esto supone que todos sus widgets hijos tienen ventanas X, de modo F. E. que necesita para envolver Gtk :: etiqueta dentro de 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

Otros consejos

Tenía este problema exacto usando un Gtk :: fijo (en realidad gtk.Fixed - pygtk - pero yo creo que todo es lo mismo por debajo) y yo era capaz de manejar con bastante facilidad mediante la manipulación de la ventana de cada widget

En mi caso, los widgets ya son casos EventBox, y sólo tenía que asegurarse de que el que yo estaba arrastrando alrededor era en la parte superior, porque de lo contrario se deslizó por debajo de otros, que parecía bastante mal. La solución era tan simple como llamar "widget.window.raise_ ()" para elevar ventana subyacente del widget cuando se hace clic en el widget para iniciar el arrastre.

Así que estoy básicamente sólo reafirmando que la respuesta anterior funciona, pero quería señalar que en realidad es bastante fácil. Parece que usted puede necesitar para crear algunas EventBoxes para mantener sus widgets, pero después de eso sólo debe trabajar.

Puede ver el código que estaba trabajando en http://github.com/divegeek/BlockHead

yo era capaz de hacer exactamente eso -

  

pantalla un widget llenar todo el espacio, y luego otro en la parte superior en una ubicación fija, tanto visible al mismo tiempo

en GTK2 utilizando GtkFixed, la elaboración de una orden de inserción adecuado (primero inserta - inferior, último registro insertado - parte superior), y - lo más importante !! - forzando GtkFixed a tener su propia ventana:

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

Si usted no hace set_has_window (f, 1), todas las ventanas de los niños se insertarán en algunos widget padre / ventana (ver gtk_fixed_realize () en gtkfixed.c), y que podría crear desorden-orden z.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top