Alguém pode explicar Gtk2 embalagem?
Pergunta
Eu preciso usar Gtk2 para um projeto. Eu vou estar usando python / ruby ??para ele. O problema é que a embalagem parece tipo de mística para mim. Eu tentei usar um VBox para que eu pudesse ter os seguintes widgets em minha janela (na seguinte ordem):
- menu
- barra de ferramentas
- controle de texto vista / editor
Eu consegui "adivinhar" o meu caminho com pack_start
e obter o layout que eu preciso, mas eu gostaria de ser capaz de compreendê-lo. A documentação em Rubi Gtk2 parece ser muito intuitiva (e assim é o python, uma vez que é o mesmo , escrito apenas para python), você poderia lançar alguma luz?
Além disso, set_size_request
não está sempre trabalhando quando eu adicionar um componente com pack_start
. Por que é que ?
Solução
Caixa embalagem é realmente simples, por isso talvez a sua incapacidade de compreender é porque você imagina que é mais complicado do que é.
Esquema estiver na vertical (como uma pilha de tijolos) ou horizontal (como uma fila de pessoas). Cada elemento em que o layout pode expandir ou ele não pode expandir-se.
Horizontal (HBox)
[widget][widget][widget][widget]
Vertical (VBox)
[widget]
[widget]
[widget]
[widget]
Assim, por exemplo, um layout horizontal (HBox) com dois botões, que o código seria:
import gtk
box = gtk.HBox()
b1 = gtk.Button('button1')
b2 = gtk.Button('button2')
box.pack_start(b1)
box.pack_start(b2)
Agora, uma vez que o padrão para a embalagem é ter expand=True
, ambos os botões adicionados à caixa irá expandir e cada um deles vai ocupar metade da área. Não importa o tamanho do recipiente é. Penso nisso como "elástico".
A expansão widgets:
[[ widget ][ widget ]]
Então, se você quiser um dos botões para não expandir, você vai embalá-lo como este:
box.pack_start(b1, expand=False)
Não-expandindo widget:
[[widget][ widget ]]
Em seguida, o botão só irá ocupar o espaço de que necessita para desenhar a si mesmo: Texto + fronteiras + sombras + imagens (se houver) etc. E o outro botão vai se expandir para preencher a área restante. Normalmente, os botões não precisa ser expandida, assim que uma situação da vida real é mais um TextArea que você gostaria de expandir para preencher a janela.
O outro parâmetro que pode ser passado para pack_start
é o parâmetro de preenchimento, e, normalmente, isso pode ser ignorado. É suficiente aqui para dizer que se expand=False
o parâmetro fill
é totalmente ignorado (porque não faz sentido nessa situação).
A outra coisa que você mencionou é set_size_request
. Eu geralmente dizer que esta não é uma boa idéia. Eu digo geralmente, porque há situações em que você precisa para usá-lo. Mas para alguém começando com a embalagem de uma interface de usuário GTK +, eu recomendo fortemente não usá-lo. Em geral, deixe as caixas e outros recipientes lidar com o seu layout para você. O set_size_request
não fazer exatamente o que você esperaria que ele faça. Isso não muda o tamanho de um widget, mas apenas quanto espaço ele vai solicitar. Pode utilizar mais, e pode até esticar para preencher espaços maiores. Raramente vai se tornar menor do que o pedido, mas mais uma vez porque é apenas um "pedido" não há garantia de theat o pedido será cumprido.