llama eso: gui.rb
#!/usr/bin/env ruby
require 'gtk2'
require "highline/import"
require 'open3'
require 'monitor'
require './test'
def report_press(w); puts "Lauching (button) w=#{w}"; end
window = Gtk::Window.new(Gtk::Window::TOPLEVEL)
window.set_title "GUI de pruebas"
window.border_width = 89
window.set_size_request(485, -1)
window.signal_connect('delete_event') { Gtk.main_quit }
nb = Gtk::Notebook.new
label1 = Gtk::Label.new("Gtk notebook")
button = Gtk::Button.new("Aqui se abre gtk dialog")
button.signal_connect("clicked") {
dialog = Gtk::Dialog.new(
"Aqui gtk dialog",
nil,
Gtk::Dialog::MODAL,
[ Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK ],
[ Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL ]
)
dialog.default_response = Gtk::Dialog::RESPONSE_OK
label1 = Gtk::Label.new("Entra algo")
carte = Gtk::Entry.new
table = Gtk::Table.new(4, 2, false)
table.attach_defaults(label1, 0, 1, 0, 1)
table.attach_defaults(carte, 1, 2, 0, 1)
table.row_spacings = 5
table.column_spacings = 5
table.border_width = 10
dialog.vbox.add(table)
dialog.show_all
dialog.run do |response|
case response
when Gtk::Dialog::RESPONSE_OK
system "echo > carte.txt %s\n" % [carte.text]
Test.guiTest
end
end
dialog.signal_connect('response') { dialog.destroy }
}
nb.signal_connect('change-current-page') { another_tab }
nb.append_page(button, label1)
window.add(nb)
window.show_all
Gtk.main
Y eso: test.rb
#!/usr/bin/env ruby
require 'gtk2'
require "highline/import"
require 'open3'
class Test
def self.guiTest
puts "Aqui estamos en gtk dialog"
sleep 1
puts "Mueves la ventana dondé has escrito algo"
sleep 1
puts "Ya veras que la GUI atras se fija"
sleep 3
puts "Se fija hasta la fin de esta function, para que comprendes dejo terminar esta function dentro 20s"
sleep 20
puts "Fonction terminada, la GUI ha volvido bien ahora pero se queda la ventana de gtk dialog, hay que dar le anular o por la cruz"
end
end
Mueve la GUI y ve lo que te explico en la consola tambien.
Como he dicho al final se vuelve bien pero no sé porqué se fija mientras el ataque.. bueno de mi lado soy avanzado bien, me queda 2 cosas a probar y sera listo.