Help language development. Donate to The Perl Foundation

GTK::Simple zef:finanalyst last updated on 2023-02-25
## 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 = title => "Hello GTK!" );

        my $button = => "Hello World!"),
        my $second = => "Goodbye!")

$app.border-width = 20;
$second.sensitive = False;
$button.clicked.tap({ .sensitive = False; $second.sensitive = True });
$second.clicked.tap({ $app.exit; });

### 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!");

        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:
- [Hello world](
- [Toggles](
- [A simple grid](
- [Marked Scales](

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,

## Contributors

The Raku team

## License

The Artistic License 2.0