Pergunta

Existe uma maneira em Gtk + para empilhar um widget em cima do outro - sem contar GtkFixed? não GtkFixed não funcionar bem por duas razões:. 1) Eu preciso de ordem Z, e 2) Eu preciso de um widget para alongar e preencher espaço fornecido

Foi útil?

Solução

Eu não acho que há um recipiente adequado em GTK padrão. Eu subclasse Gtk :: fixa ... ele ainda é o mais próximo que você pode começar, e se você usar gtkmm então subclasse não deve ser muito difficult¹. Depois, você pode controlar as dimensões de todos os widgets, esticando uma criança selecionada para o espaço de preenchimento.

Para o controle do eixo Z provavelmente você vai precisar de manipular do widget janelas X - Verifique a documentação GDK no tópico da GDK windows². Lembro que em PyGTK cada elemento tem gtk.Widget.window propriedade, eu acho que o mesmo é para gtkmm. Isso pressupõe que todos os seus widgets filhos têm janelas X, então F. E. você vai precisar para embrulhar Gtk :: Etiqueta no interior 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

Outras dicas

Eu tive esse problema exato usando um Gtk :: fixo (na verdade gtk.Fixed - pygtk - mas eu acho que é tudo a mesma coisa por baixo) e eu era capaz de lidar com isso com bastante facilidade através da manipulação da janela de cada widget

No meu caso, os widgets já são instâncias EventBox, e eu só precisava ter certeza de que o que eu estava arrastando em torno estava em cima, porque caso contrário, deslizou outros por baixo, que parecia completamente errado. A solução era tão simples como chamar "widget.window.raise_ ()" para aumentar a janela subjacente do widget quando o widget foi clicado para iniciar o arraste.

Então, eu estou basicamente apenas reafirmando que as obras resposta anterior, mas eu queria salientar que é realmente muito fácil. Parece que você pode precisar criar algumas EventBoxes para manter seus widgets, mas depois que ele deve funcionar.

Você pode ver o código que eu estava trabalhando em em http://github.com/divegeek/BlockHead

Eu era capaz de fazer exatamente isso -

exibição de um widget preenchendo todo o espaço, e depois outro em cima em um local fixo, tanto visíveis ao mesmo tempo

em gtk2 usando GtkFixed, trabalhar fora uma ordem adequada inserção (inserido pela primeira vez - bottom, última inserido - parte superior), e - mais importante !! - forçando GtkFixed ter a sua própria janela:

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

Se você não fizer set_has_window (f, 1), todas as janelas crianças será inserido em algum widget pai / janela (ver gtk_fixed_realize () in gtkfixed.c), e que pode criar ordem z confusão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top