Velocity Reviews

Velocity Reviews (
-   Ruby (
-   -   how do I add a C widget to Ruby/Tk? (

Bill Paxton 01-09-2005 05:33 PM

how do I add a C widget to Ruby/Tk?
Content-type: text/plain; charset="ISO-8859-1"
Content-transfer-encoding: quoted-printable

I have an existing Tcl/Tk widget written in C that I=B9d like to port to
Ruby/Tk. The Lidie & Walsh book on Perl/Tk is helpful, but it doesn=B9t quit=
supply enough information. For example, it contains a call on
=B3Lang_CreateWidget=B2 that needs to be mapped to something for Ruby/Tk, but
what might that be?

Does anyone have a working example of a C widget done in Ruby/Tk? Could yo=
please share the secrets?

Bill Paxton


Hidetoshi NAGAI 01-10-2005 03:49 PM

Re: how do I add a C widget to Ruby/Tk?

From: Bill Paxton <>
Subject: how do I add a C widget to Ruby/Tk?
Date: Mon, 10 Jan 2005 02:33:05 +0900
Message-ID: <>
> I have an existing Tcl/Tk widget written in C that Iąd like to port to
> Ruby/Tk.

Please use your widget as it is.
Ruby/Tk (tcltklib) uses standard Tcl/Tk libraries.
If your wish (which uses same Tcl/Tk libraries) can load your widget
library, Ruby/Tk can load the widget library. For exapmle,

<Ruby/Tk method call> <call on Tcl/Tk>
Tk.load_cmd_on_ip(tk_cmd) --> auto_load tk_cmd
Tk.load_tclscript(file, enc=nil) --> source ?-encoding enc? file
Tk.load_tcllibrary(file, pkg=None, --> load file ?pkg? ?interp?

Tk.tk_call(cmd, arg, ... ) --> cmd arg ...
Tk.ip_eval(script) --> (eval "script" on Tcl/Tk ip)

Probably, you'll be able to load your widget library by
Tk.load_tcllibrary('your widget library').
After that, you can create and control your widgets by Tk.tk_call().

If you want create a class for your widget,
it is better the class is a sub-class of TkWindow class.
When the create command of your widget is "xxx path ??-opt val? ...?",
minimum definition for your widget class is the following.
class YOUR_WIDGET < TkWindow
TkCommandNames = ['xxx'.freeze].freeze

WidgetClassName = 'Xxx' # if needed
WidgetClassNames[WidgetClassName] = self # if needed

# define instance methods for your widget class

Then, you'll be able to create your widget by
----------------------------------------------------------, optkeys){ ... }
like as other standard widgets.
Hidetoshi NAGAI (

All times are GMT. The time now is 11:11 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.