Page Content

Tutorials

TK GUI in Ruby: Creating Your First Graphical User Interface

TK GUI in Ruby

There are numerous alternatives for creating desktop applications with Ruby, and the Graphical User Interface (GUI) is the most often used interface globally. The standard Ruby GUI toolkit is called Tk. This article explains how to design a graphical user interface (GUI) using Ruby’s Tk toolkit, with code samples that demonstrate its fundamental use and event-driven architecture.

Tk Overview and Characteristics

The Tk library is a wrapper for Tcl/Tk. Because it is cross-platform and independent of language, it is a popular choice for developing graphical user interfaces (GUIs) that function on Windows, Linux, Mac OS X, and other Unix-like platforms.

You can also read What Is Cookies And Sessions In Ruby, key Differences Of It

Key Features

Standard Library: If Tk is installed on the system, the Tk binding for Ruby is preloaded together with Ruby.

Widget-Based: Using a composition paradigm, Tk works by creating containers (such as TkRoot or TkFrame) and then filling them with GUI components known as widgets (buttons, labels, etc.).

Event-Driven: Apps for Tk are event-driven. You make widgets and attach blocks of code (called callbacks) to them. Tk executes the relevant code block in response to a user action (like as clicking a button).

Appearance: Although Tk is easy to use and functional, it typically doesn’t create the most attractive interfaces when compared to native alternatives.

The Simple Tk Application Structure

The three essential steps of a Tk application are declaring widgets, loading the library, and initiating the event loop.

Code Example 1: Minimal “Hello World” Application

This is the most basic Tk application; it creates a labelled window.

CodeExplanation
require "tk"Loads the Tk library package.
TkRoot.new{ title “Hello World!” }Defines the top-level container widget (the application window) and sets its title. The TkRoot is always the top-level widget.
label = TkLabel.new(root) { text "You are a trout!" }Creates a label widget inside the root window.
label.packPacks the child widget inside its parent for display, utilizing the geometry manager to control where the widget shows up. Leaving this off will prevent the widget from being displayed.
Tk.mainloopStarts the main event loop, which loads the GUI and waits for events. The program remains blocked here until the window is closed.

Note: It should be noted that material for Perl/Tk can offer helpful information for Ruby/Tk development because the Tk binding is comparable to that of Perl.

You can also read What Is Automated Testing for Web Applications In Ruby

Implementing Behavior with Callbacks (Events)

Apps for Tk are event-driven. Blocks of code that you tie to widgets are run when the event occurs.

Code Example 2: Adding a Button and Callback

Here’s an example of using TkButton to bind a code block to the command option that is triggered by a click event.

require 'tk'

TkButton.new do
  text "EXIT"
  # The command option takes a block, which runs when the button is clicked
  command { exit }
  pack('side' => 'left', 'padx' => 10, 'pady' => 10)
end

Tk.mainloop

Note: You can pass a Proc object to the command option.

Code Example 3: The Stopwatch Application (Advanced Widgets)

A more intricate example that demonstrates the grouping and management of several widgets is a timer.

Container Setup: TkRoot, the application’s main window, and maybe a TkMenuBar are used.

User Input/Display:

  • To display the time, a TkLabel is utilized.
  • To initiate the start or stop methods, press a TkButton. The button’s behaviour can be changed to make it function like a physical toggle by calling its command method.

Background Events: An intriguing widget that operates in the background without any visual representation is the TkAfter event, which updates the displayed time by regularly firing a method (tick), for example, every millisecond.
Setting Up Widgets and Data Binding:

Widget Configuration and Data Binding

Dynamic Configuration: A code block or a hash can be passed to the configure method, which allows you to modify a widget’s settings while the program is running. Configure('text' => 'Stop'), for example, modifies the label of the button.

Variable Binding: A Ruby variable can be bound to a widget’s value using the TkVariable proxy, guaranteeing that modifications to the variable update the widget and vice versa.

Note on Scope: When options are passed through a code block, the block is evaluated within the widget’s object context rather than the caller’s.

Geometry Management

A geometry manager must be used to arrange widgets after they have been produced. You won’t see the widget if you skip this step.

Tk geometry managers are able to identify three commands:

CommandPlacement SpecificationCommon Usage
packFlexible, constraint-based placementMost commonly used command.
placeAbsolute position
gridTabular (row/column) position

In the basic examples, layout is controlled by the pack method, which frequently passes arguments for position (side) or padding (padx, pady).

You can also read Web Application Frameworks In Ruby: Power Of Ruby On Rails

Agarapu Geetha
Agarapu Geetha
My name is Agarapu Geetha, a B.Com graduate with a strong passion for technology and innovation. I work as a content writer at Govindhtech, where I dedicate myself to exploring and publishing the latest updates in the world of tech.
Index