Criar  Editar  FrontPage  Índices  Buscar  Alterações  History  RSS  Back  Login

tut-gtk-helloworld2 Diff - Ruby-GNOME2 Project Website

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

= Um Olá Mundo Melhorado
{{link "tut-gtk-signals-more", nil, "tut-gtk", "tut-gtk2-packing-intro"}}

{{image_right("en:helloworld2.png")}}

Vamos dar uma olhada em um olámundo um pouco melhorado com melhores exemplos de blocos de "callbacks".
Isto também nos introduzirá para o nosso próximo tópico, posicionando componentes.

  #!/usr/bin/env ruby

  # Inicializa a Ruby/GTK2, como sempre.
  require 'gtk2'

  # Uma pressão em um botão chamará este método.
  def callback(widget)
    # Mostra a propriedade 'label' do componente.
    # Veja a documentação de referência para mais informações.
    puts "Olá novamente - #{widget.label}(#{widget}) foi pressionado."
  end

  # Cria a janela.
  window = Gtk::Window.new

  # Especifica o título e a borda da janela.
  window.title = "Botões Olá"
  window.border_width = 10

  # O programa terminará diretamente no 'delete_event'.
  window.signal_connect('delete_event') do
    Gtk.main_quit
    false
  end

  # A gente cria uma caixa para posicionar os componentes dentro.  
  # Isto é descrito em detalhes na seção seguinte.
  # A caixa não é realmente visível, ela é usada apenas como uma
  #  ferramenta para organizar os componentes.
  box1 = Gtk::HBox.new(false, 0)

  # Coloca a caixa dentro da janela principal.
  window.add(box1)

  # Cria um novo botão com o rótulo "Botão 1".
  button1 = Gtk::Button.new("Botão 1")

  # Agora quando o botão é clicado, a gente chama o método de "callback"
  # com uma referência para "botão 1" como seu argumento.
  button1.signal_connect( "clicked" ) do |w|
    callback(w)
  end

  # Em vez de window.add, a gente posiciona este botão dentro da caixa invisível,
  # a qual foi posicionada dentro da janela.
  box1.pack_start(button1, true, true, 0)

  # Faça esses mesmos passos de novo para criar um segundo botão.
  button2 = Gtk::Button.new("Botão 2")

  # Chama a mesma função de "callback" com um argumento diferente,
  # passando uma referência para "botão 2" desta vez.
  button2.signal_connect("clicked") do |w|
    callback(w)
  end

  # Posiciona o segundo botão em uma caixa também.
  box1.pack_start(button2, true, true, 0)

  # Você pode chamar o método "show" de cada componente, como a seguir:
  #   button1.show
  #   button2.show
  #   box1.show
  #   window.show
  window.show_all
  Gtk.main
  
Como o primeiro Olá Mundo, você perceberá que desta vez não existe uma maneira fácil de sair do programa, assim você tem que usar o seu gerenciador de janela ou linha de comando para matá-lo ("kill it") .  

Um bom exercício para o leitor seria inserir um terceiro botão "Sair" que sairá do programa.  

Você pode também querer brincar com as opções para Gtk::Box#pack_start enquanto le a nossa próxima seção. Tente redimensionar a janela e observe o comportamento.