ruby-****@sourc*****
ruby-****@sourc*****
2004年 5月 11日 (火) 09:22:40 JST
------------------------- REMOTE_ADDR = 80.137.218.186 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/de/?tut-gtk2-packing-demo ------------------------- = Boxen anordnen: Beispielprogramm {{link "tut-gtk2-packing-box-details", "tut-gtk2-packing-intro", "tut-gtk", "tut-gtk2-packing-tables"}} #!/usr/bin/env ruby require 'gtk2' # Erstellen Sie eine neue Gtk::HBox-Instanz, die Sie mit Button-Beschriftungen # f$B(Blen. Die f$B(B uns interessanten Argumente beim Aufruf von Gtk::HBox.new und # Gtk::Box#pack_start, werden $B(Bergeben. 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 # Argumente von der Shell verarbeiten. which = ARGV.shift unless which $stderr.puts "usage: #{$0} num" $stderr.puts " where num is 1, 2, or 3." exit 1 end # Nicht vergessen, Ruby/GTK2 zu initialisieren! Gtk.init # Erstellt das Hauptfenster. window = Gtk::Window.new # Sie sollten immer daran denken, das Signal "delete_event" des # Hauptfensters zu verbinden. Das ist sehr wichtig f$B(B richtiges, # intuitives Verhalten des Programmes. window.signal_connect("delete_event") do Gtk::main_quit false end window.border_width = 10 # Wir erstellen eine vertikale Box (Gtk::VBox), um die horizontalen Boxen darin anzuordnen # (wird erstellt durch make_box). # Das erlaubt uns, die horizontalen (mit Buttons gef$B(Blten) Boxen nacheinander in der # vertikalen Box zu stapeln. box1 = Gtk::VBox.new(false, 0) case which.to_i when 1 # Erstellt ein neues Label und richtet dieses linksb$B(Bdig aus. # Wir werden diese und andere Funktionen im Abschnitt $B(Ber Widget-Attribute genauer # besprechen. label = Gtk::Label.new("Gtk::HBox.new(false, 0)") label.set_alignment(0, 0) box1.pack_start(label, false, false, 0) # Die ersten beiden Eintr$BgH(Be sind f$B(B die homogeneous- und spacing-Parameter # von Gtk::HBox.new. # Die drei letzten Eintr$BgH(Be sind f$B(B die Parameter expand, fill und padding der # Methode Gtk::HBox#pack_start. [ [false, 0, false, false, 0], [false, 0, true, false, 0], [false, 0, true, true, 0], ].each do |args| # Erstellt eine horizontale Box mit spezifizierten Parametern und ordnet # diese oben in der vertikalen Box an. box2 = make_box(*args) box1.pack_start(box2, false, false, 0) end # F$B(Bt einen Trenner in der vertikalen Box ein. separator = Gtk::HSeparator.new box1.pack_start(separator, false, true, 5) # Das gleiche wie im letzten Abschnitt. 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 # Dies demonstriert die F$BgI(Bigkeit, Gtk::Box#pack_end einzusetzen, um # Widgets rechtsb$B(Bdig auszurichten. Als erstes erstellen wir wie zuvor # eine neue Box. box2 = make_box(false, 0, false, false, 0); # Erstellt eine neues Label, das am Ende eingef$B(Bt wird. label = Gtk::Label.new("end") box2.pack_end(label, false, false, 0) box1.pack_start(box2, false, false, 0) # Einen Trenner f$B(B unten. separator = Gtk::HSeparator.new # Dies setzt den Trenner explizit auf 400 Pixel in der Breite und 5 # Pixel in der H$B(Be. Das f$B(Brt das zu, dass die horizontale Box, die # wir erstellt haben, ebenfalls 400 Pixel breit sein wird und das # abschlie$B_e(Bnde Label ("end") wird von den anderen Labels in der Box getrennt. # Andererseits werden alle Widgets in der Box so dicht wie m$Bvg(Blich # nebeneinander angeordnet. separator.set_size_request(400, 5) box1.pack_start(separator, false, true, 5) end # Erstellt eine neue Box und ordnet einen "Beenden"-Button darin an. # Dieser button kann verwendet werden, um das Programm zu beenden, genau # wie das Kreuz zum Schlie$B_e(Bn des Fensters. quitbox = Gtk::HBox.new(false, 0) button = Gtk::Button.new("Beenden") 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) # Alle Widgets anzeigen. window.show_all # Wie gewohnt, schlie$B_e(Bn wir mit dem Aufruf der Hauptschleife ab: Gtk.main