
GTK::Simple
GTK::Simple is a set of simple GTK 3 bindings using
NativeCall. Only some GTK widgets are currently implemented. However, these are
enough to create a reasonable interactive GUI for an idiomatic Raku program.
The GTK Widgets in this distribution include the following:
| Widget | Description |
|---|
| ActionBar | Group multiple buttons and arrange in 'left', 'middle', and 'right' |
| Button | A simple button with a label and a callback |
| Calendar | A calendar for selecting a date |
| CheckButton | A check button with a label |
| CheckMenuItem | A checkable menu item |
| ComboBoxText | A simple combo box |
| DrawingArea | A drawing area (requires the 'Cairo' module) |
| Entry | Allows for text to be provided by the user |
| FileChooserButton | A button that opens a file chooser dialog |
| Frame | A bin with a decorative frame and optional label |
| Grid | A table-like container for widgets for window design |
| Label | Adds a line of text |
| LevelBar | A bar that can used as a level indicator |
| LinkButton | Create buttons bound to a URL |
| ListBox | A vertical listbox where each row is selectable |
| MarkUpLabel | Adds text with GTK mark up (e.g. color and font manipulation) |
| Menu | A simple menu with a menu item label |
| MenuBar | A simple menu bar that contain one or more menus |
| MenuItem | A simple menu item that can have a sub menu |
| MenuToolButton | A menu tool button with a label or an icon |
| PlacesSidebar | Sidebar that displays frequently-used places in the file system |
| ProgressBar | Show progress via a filling bar |
| Scale | Allows for a number to be provided by the user |
| ScrolledWindow | Container for widgets needing scrolling, eg., multiline texts |
| RadioButton | A choice from multiple radio buttons |
| Spinner | Showing that something is happening |
| TextView | Adds multiple lines of text |
| ToggleButton | A toggle-able button |
| Toolbar | A tool bar that can contain one or more menu tool buttons |
| VBox, HBox | Widget containers which enable window layout design |
Example
use GTK::Simple;
my $app = GTK::Simple::App.new( title => "Hello GTK!" );
$app.set-content(
GTK::Simple::VBox.new(
my $button = GTK::Simple::Button.new(label => "Hello World!"),
my $second = GTK::Simple::Button.new(label => "Goodbye!")
)
);
$app.border-width = 20;
$second.sensitive = False;
$button.clicked.tap({ .sensitive = False; $second.sensitive = True });
$second.clicked.tap({ $app.exit; });
$app.run;
Using :subs option
Another approach is to specify :subs on import. This provides subroutine aliases for the constructors
of all of the available GTK::Simple widgets, converted from CamelCase to kebab-case.
GTK::Simple::MenuToolButton becomes menu-tool-button, GTK::Simple::ProgressBar becomes progress-bar, etc.
The above example can be equivalently written as:
use GTK::Simple :subs;
my $app = app(title => "Hello GTK!");
$app.set-content(
v-box(
my $button1 = button(label => "Hello World"),
my $button2 = button(label => "Goodbye!")
)
);
# ...
Further examples
The first four examples were written as mini tutorials to show how the
system works:
For more examples, please see the examples/ folder.
Limitations
The full functionality of GTK 3 is not available in
this module.
Prerequisites
This module requires the GTK3 library to be installed. Please follow the
instructions below based on your platform:
Debian Linux
sudo apt-get install libgtk-3-dev
Mac OS X
brew update
brew install gtk+3
Windows
The GTK team describes how to do this for Windows at
Setting up GTK for Window
Installation and sanity tests
Use the zef package manager
$ zef install GTK::Simple
Author
Jonathan Worthington, jnthn on #raku, https://github.com/jnthn/
Contributors
The Raku team
License
The Artistic License 2.0