RemoteTkIp support on Ruby/Tk

H

Hidetoshi NAGAI

Hi,

I committed the library to remote-control Ruby/Tk interpreters
on the other proesses. The library is one of the application of
MultiTkIp class, and is constructed from Tcl/Tk's 'send' command.

# Please don't ask me how to make 'send' command available on
# your environment. ;-) Please see the FAQ of Tcl/Tk.

"New Tcl/Tk 8.5 Features" on the Tcl/Tk web site says
------------------------------------------------------
* send officially supported on Windows
------------------------------------------------------
So, you may be able to test the library on Windows with Tcl/Tk8.5a1
(I don't test it on Windows).

The library 'remote-tk.rb' includes RemoteTkIp class.
Please see the following sample script.
It depends on its context that 'TkButton.new()' creates a button
widget on which Ruby/Tk interpreter.
------------------------------------------------------
require 'remote-tk'

# start sub-process
ip_name = 'remote_ip'
ip_list = TkWinfo.interps
fork{
exec "/usr/bin/env ruby -r tk -e \"Tk.appname('#{ip_name}');Tk.mainloop\""
}
sleep 1 until (app = (TkWinfo.interps - ip_list)[0]) && app =~ /^#{ip_name}/
p TkWinfo.interps

# create RemoteTkIp object
ip = RemoteTkIp.new(app)

# setup remote-ip window
btns = []
ip.eval_proc{
btns <<
TkButton.new:)command=>proc{
puts 'This procesure is on the controller-ip (Ruby-side)'
},
:text=>'print on controller-ip (Ruby-side)').pack:)fill=>:x)

btns <<
TkButton.new:)command=>
'puts {This procesure is on the remote-ip (Tk-side)}',
:text=>'print on remote-ip (Tk-side)').pack:)fill=>:x)

btns <<
TkButton.new:)command=>'ruby {
puts "This procedure is on the remote-ip (Ruby-side)"
p Array.new(3,"ruby")
}',
:text=>'ruby cmd on the remote-ip').pack:)fill=>:x)

TkButton.new:)command=>'exit', :text=>'QUIT').pack:)fill=>:x)
}

# setup controller-ip window
btns.each_with_index{|b, idx|
TkButton.new:)command=>proc{ip.eval_proc{b.flash}},
:text=>"flash button-#{idx}",
:padx=>10).pack:)padx=>10, :pady=>2)
}

TkButton.new:)command=>proc{exit}, :text=>'QUIT',
:padx=>10, :pady=>7).pack:)padx=>10, :pady=>7)

# start eventloop
Tk.mainloop
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

ruby/tk : hide TkFrame 1
Ruby/Tk 10
Ruby TK 2
Bug with Ruby/Tk encoding (ruby-1.9.1-rc1) 6
Ruby/Tk 4
Tk and Tile with Tk8.5 9
Ruby/Tk/Iwidgets tabnotebook (and scrollbar) 4
Ruby/tk Help Please 19

Members online

Forum statistics

Threads
473,981
Messages
2,570,187
Members
46,731
Latest member
MarcyGipso

Latest Threads

Top