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 ?

Foi útil?

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.

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