ruby-gnome2-hiki-pt_BR****@sourc*****
ruby-gnome2-hiki-pt_BR****@sourc*****
2004年 4月 9日 (金) 22:49:55 JST
------------------------- REMOTE_ADDR = 200.216.146.35 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/pt_BR/?tut-gtk2-packing-demo ------------------------- = Programa de Demonstra$Bgc(Bo de Posicionamento {{link "tut-gtk2-packing-box-details", "tut-gtk2-packing-intro", "tut-gtk", "tut-gtk2-packing-tables"}} #!/usr/bin/env ruby require 'gtk2' # Cria uma nova caixa hbox preenchida com bot$B(Bs-r$B(Bulos. Os areumentos para Gtk::HBox.new e # Gtk::Box#pack_start em que estamos interessados s$BeP(B passados para este m$BqU(Bodo. def make_box(homogeneous, spacing, expand, fill, padding) box = Gtk::HBox.new(homogeneous, spacing) "Gtk::Box#pack_start (button, #{expand}, #{fill}, #{padding})".split(/ /).each do |s| button = Gtk::Button.new(s) box.pack_start(button, expand, fill, padding) end box end # "Parse" o argumento de linha de comando. which = ARGV.shift unless which $stderr.puts "uso: #{$0} num" $stderr.puts " onde num 1, 2, ou 3." exit 1 end # N$BeP(B esque$BmB(B de inicializar a Ruby/GTK2! Gtk.init # Cria a janela principal. window = Gtk::Window.new # Vocdeve sempre lembrar-se de conectar o sinal delete_event # a janela principal. Isso bastante importante para comportamento intuitivo apropriado. window.signal_connect("delete_event") do Gtk::main_quit false end window.border_width = 10 # A gente cria uma caixa vertical (vbox) e posiciona as caixas horizontais dentro (criado por make_box). # Isso nos permite empilhar as caixas horizontais preenchidas com bot$B(Bs uma sobre a outra nesta vbox. box1 = Gtk::VBox.new(false, 0) case which.to_i when 1 # Cria e alinha um novo r$B(Bulo ao lado esquerdo. # Discutiremos esta fun$Bne(Bo e outras na se$Bne(Bo sobre atributos de componentes. label = Gtk::Label.new("Gtk::HBox.new(false, 0)") label.set_alignment(0, 0) box1.pack_start(label, false, false, 0) # As primeiras 2 entradas s$BeP(B para os par$BcN(Betros homog$BsO(Beo e espa$BmB(Bmento para Gtk::HBox.new. # As 3 $B(Btimas entradas s$BeP(B para os argumentos "expandir", "preencher" e espa$BmP(B_externo para Gtk::HBox#pack_start. [ [false, 0, false, false, 0], [false, 0, true, false, 0], [false, 0, true, true, 0], ].each do |args| # Cria uma caixa horizontal com os par$BcN(Betros especificados # e o posiciona acima da caixa vertical. box2 = make_box(*args) box1.pack_start(box2, false, false, 0) end # Insere um separador na caixa vertical. separator = Gtk::HSeparator.new box1.pack_start(separator, false, true, 5) # Mesmo do anterior. label = Gtk::Label.new("Gtk::HBox.new(true, 0)") label.set_alignment(0, 0) box1.pack_start(label, false, false, 0) [ [true, 0, true, false, 0], [true, 0, true, true, 0], ].each do |args| box2 = make_box(*args) box1.pack_start(box2, false, false, 0) end separator = Gtk::HSeparator.new box1.pack_start(separator, false, true, 5) when 2 label = Gtk::Label.new("Gtk::HBox.new(false, 10)") label.set_alignment(0, 0) box1.pack_start(label, false, false, 0) [ [false, 10, true, false, 0], [false, 10, true, true, 0], ].each do |args| box2 = make_box(*args) box1.pack_start(box2, false, false, 0) end separator = Gtk::HSeparator.new box1.pack_start(separator, false, true, 5) label = Gtk::Label.new("Gtk::HBox.new(false, 0)") label.set_alignment(0, 0) box1.pack_start(label, false, false, 0) [ [false, 0, true, false, 10], [false, 0, true, true, 10], ].each do |args| box2 = make_box(*args) box1.pack_start(box2, false, false, 0) end separator = Gtk::HSeparator.new box1.pack_start(separator, false, true, 5) when 3 # Isto demonstra a habilidade de usar Gtk::Box#pack_end para justificar # a direita os componentes. Primeiramente, a gente cria uma nova caixa como antes. box2 = make_box(false, 0, false, false, 0); # Cria um r$B(Bulo que sercolocado no fim. label = Gtk::Label.new("fim") box2.pack_end(label, false, false, 0) box1.pack_start(box2, false, false, 0) # Um separador para o bot$BeP(B. separator = Gtk::HSeparator.new # Isto explicitamente configura o separador para 400 pixels de largura por 5 de altura. # Isto para que a caixa hbox que a gente criou seja tamb$BqN(B 400 pixels de largura, # e o r$B(Bulo "fim" seja separado dos outros r$B(Bulos na caixa hbox. # De outra maneira, todos os componentes na hbox seriam posicionados t$BeP(B pr$B(Bimos # uns dos outros quanto poss$ByW(Bel. separator.set_size_request(400, 5) box1.pack_start(separator, false, true, 5) end # Cria uma nova caixa box, e posiciona um bot$BeP(B 'Sair' a ela. # Esse bot$BeP(B pode ser usado para terminar o programa, exatamente como o X da janela. quitbox = Gtk::HBox.new(false, 0) button = Gtk::Button.new("Sair") button.signal_connect("clicked") do Gtk.main_quit end quitbox.pack_start(button, true, false, 0) box1.pack_start(quitbox, true, false, 0) window.add(box1) # Mostra todos os componentes. window.show_all # Como sempre, a gente termina ao entrar no loop principal, com Gtk.main. Gtk.main