Difference between revisions of "GTK+"

From ArchWiki
Jump to: navigation, search
(Configuration file: Clarify reference for the list of settings)
(Compiling GTK+ programs: Add some simple message dialog example code.)
Line 127: Line 127:
 
There is some more tweaking to do in your themes gtkrc like explained [http://martin.ankerl.com/2008/10/10/how-to-make-a-compact-gnome-theme/ here] and there's another [http://gnome-look.org/content/show.php/Simple+eGTK?content=119812 theme] that does it all.
 
There is some more tweaking to do in your themes gtkrc like explained [http://martin.ankerl.com/2008/10/10/how-to-make-a-compact-gnome-theme/ here] and there's another [http://gnome-look.org/content/show.php/Simple+eGTK?content=119812 theme] that does it all.
  
== Compiling GTK+ programs ==
+
== Development ==
  
When writing a start-from-scratch GTK+ program with C, it's necessary to add CFLAGS for gcc (the code was adopted from ubuntu forum):
+
When writing a start-from-scratch GTK+ 3 program with C, it's necessary to add CFLAGS for gcc:
  gcc -g -Wall `pkg-config --cflags --libs gtk+-2.0` -o base base.c
+
  gcc -g -Wall `pkg-config --cflags --libs gtk+-3.0` -o base base.c
 
-g and -Wall parameters are not necessary since they are only for verbose debugging outputs.
 
-g and -Wall parameters are not necessary since they are only for verbose debugging outputs.
You may try out the official [http://library.gnome.org/devel/gtk-tutorial/stable/c39.html#SEC-HELLOWORLD Hello World example] provided by the gtk.org.
+
You may try out the official [http://developer.gnome.org/gtk-tutorial/stable/c39.html#SEC-HELLOWORLD Hello World example].
 +
 
 +
=== Write a simple message dialog ===
 +
You can write your own GTK+ 3 message dialog easily in many programming languages through GObject-Introspection or bindings, or you can simply use bash.
 +
 
 +
The following examples display a simple "Hello world" in a message dialog.
 +
 
 +
====Bash====
 +
*Dependency: {{Pkg|zenity}}
 +
{{File|hello_world.sh|<nowiki>#!/bin/bash
 +
zenity --info --title='Hello world!' --text='This is an example dialog.'</nowiki>}}
 +
 
 +
====C====
 +
*Dependency: {{Pkg|gtk3}}
 +
*Build with: {{Codeline|gcc -o hello_world `pkg-config --cflags --libs gtk+-3.0` hello_world.c}}
 +
{{File|hello_world.c|<nowiki>#include <gtk/gtk.h>
 +
void main (int argc, char *argv[]) {
 +
gtk_init (&argc, &argv);
 +
        GtkWidget *hello = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Hello world!");
 +
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (hello), "This is an example dialog.");
 +
        gtk_dialog_run(GTK_DIALOG (hello));
 +
}</nowiki>}}
 +
 
 +
====C++====
 +
*Dependency: {{Pkg|gtkmm3}}
 +
*Build with: {{Codeline|g++ hello_world.cc -o hello_world `pkg-config gtkmm-3.0 --cflags --libs`}}
 +
{{File|hello_world.cc|<nowiki>#include <gtkmm.h>
 +
#include <gtkmm/messagedialog.h>
 +
int main(int argc, char *argv[]) {
 +
Gtk::Main kit(argc, argv);
 +
Gtk::MessageDialog Hello("Hello world!", false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_OK);
 +
Hello.set_secondary_text("This is an example dialog.");
 +
Hello.run();
 +
}</nowiki>}}
 +
 
 +
====Genie====
 +
*Dependency: {{Pkg|gtk3}}
 +
*Makedependency: {{Pkg|vala}}
 +
*Build with: {{Codeline|valac --pkg gtk+-3.0 hello_world.gs}}
 +
{{File|hello_world.gs|<nowiki>uses
 +
Gtk
 +
init
 +
Gtk.init (ref args)
 +
var Hello=new MessageDialog (null, Gtk.DialogFlags.MODAL, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Hello world!")
 +
Hello.format_secondary_text ("This is an example dialog.")
 +
Hello.run ()</nowiki>}}
 +
 
 +
====JavaScript====
 +
*Dependencies: {{Pkg|gtk3}}, {{Pkg|gjs}} (works also with {{Pkg|seed}})
 +
{{File|hello_world.js|<nowiki>#!/usr/bin/gjs
 +
Gtk = imports.gi.Gtk
 +
Gtk.init(null, null)
 +
Hello = new Gtk.MessageDialog({type: Gtk.MessageType.INFO,
 +
                              buttons: Gtk.ButtonsType.OK,
 +
                              text: "Hello world!",
 +
                              "secondary-text": "This is an example dialog."})
 +
Hello.run()</nowiki>}}
 +
 
 +
====Python====
 +
*Dependencies: {{Pkg|gtk3}}, {{Pkg|python-gobject}}
 +
{{File|hello_world.py|<nowiki>#!/usr/bin/python
 +
from gi.repository import Gtk
 +
Gtk.init(None)
 +
Hello=Gtk.MessageDialog(None, Gtk.DialogFlags.MODAL, Gtk.MessageType.INFO, Gtk.ButtonsType.CLOSE, "Hello world!")
 +
Hello.format_secondary_text("This is an example dialog.")
 +
Hello.run()</nowiki>}}
 +
 
 +
====Vala====
 +
*Dependency: {{Pkg|gtk3}}
 +
*Makedependency: {{Pkg|vala}}
 +
*Build with: {{Codeline|valac --pkg gtk+-3.0 hello_world.vala}}
 +
{{File|hello_world.vala|<nowiki>using Gtk;
 +
public class HelloWorld {
 +
static void main (string[] args) {
 +
Gtk.init (ref args);
 +
var Hello=new MessageDialog (null, Gtk.DialogFlags.MODAL, Gtk.MessageType.INFO, Gtk.ButtonsType.OK, "Hello world!");
 +
Hello.format_secondary_text ("This is an example dialog.");
 +
Hello.run ();
 +
}
 +
}</nowiki>}}
 +
 
 +
=== More resources ===
 +
*[http://developer.gnome.org/gtk-tutorial/stable/ GTK+ 2.0 Tutorial]
 +
*[http://developer.gnome.org/gtk3/stable/ GTK+ 3 Reference Manual]
 +
*[http://developer.gnome.org/gtkmm-tutorial/stable/ gtkmm Tutorial]
 +
*[http://developer.gnome.org/gtkmm/stable/ gtkmm Reference Manual]
  
 
== Resources ==
 
== Resources ==

Revision as of 09:41, 3 November 2011

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary end

From the GTK+ website:

GTK+, or the GIMP Toolkit, is a multi-platform toolkit for creating graphical user interfaces. Offering a complete set of widgets, GTK+ is suitable for projects ranging from small one-off tools to complete application suites.

GTK+, The GIMP Toolkit, was initially made by the GNU Project for Gimp but is now a very popular toolkit with bindings for many languages.

Configuration programs

These GUI programs allow theme selection and at least customising of a font. They generally overwrite the ~/.gtkrc-2.0 file.

Example install command:

# pacman -S gtk-theme-switch2

See also Uniform Look for QT and GTK Applications#How do I set styles for each toolkit?

Themes

GTK+ 1.x

Old GTK+ 1 apps (like xmms) often do not look very nice at first. This is because they use ugly themes by default. To change this, you need to:

  1. download and install some nice themes
  2. change the theme

Some nice themes are in AUR. To install them, see gtk-smooth-engine.

To change the theme you can use gtk-theme-switch2. Run it with the 'switch' command.

GTK+ 2.x

Major desktop environments provide tools to configure the GTK+ theme, icons, font and font size. Alternatively, tools such as those mentioned above may be used.

It is recommended to install some GTK+ 2 themes as well. The popular Clearlooks theme is included within the Template:Package Official package:

# pacman -S gtk-engines

Further themes can be found in AUR:

Alternatively, GTK+ settings can be configured manually by editing Template:Filename. A list of GTK+ settings can be found in the gnome library. To manually change the GTK+ theme, icons, font and font size, add the following to Template:Filename:

Template:File

For example: Template:File

Note: The above example requires the packages Template:Package Official, Template:Package Official, Template:Package Official and murrine-themes-collection (from AUR).

GTK+ 3.x

If you use GNOME 3 DE, the theme can be changed with gnome-tweak-tool. Install with

# pacman -S gnome-tweak-tool

If you use a GTK+ 2.x based DE, like Xfce, LXDE, gnome-tweak-tool won't work; see FS#23633. You need to install librsvg

# pacman -S librsvg

and set your theme manually in Template:Filename (this is usually Template:Filename. An example Template:Filename file: Template:File After this, you need to set the same theme in your DE's appearance configuration tool. There are only a few themes which provide a uniform look for GTK+ 3.x and GTK+ 2.x apps. A few examples:

  1. Adwaita for GTK+ 3 and Advaicium for GTK+ 2
  2. Newlooks for GKT+ 3 and Clearlooks for GTK+ 2
  3. Zukitwo
  4. Elegant Brit
  5. Atolm
  6. Hope

Note: There probably are other themes. Some of these themes are available in AUR. Also, some of them are not usable as is for displaying a GTK+ 2.x panel (light text over light background), so you need to use the provided panel background.

GTK+ and QT

If you have GTK+ and QT (KDE) applications on your desktop then you know that their looks do not blend well. If you wish to make your GTK+ styles match your QT styles please read Uniform Look for QT and GTK Applications.

Configuration file

Note: See the GtkSettings properties in the GTK+ programming reference manual for the full list of GTK configuration options.

The purpose of this section is to collect GTK configuration settings which can e.g. be used within Template:Codeline.

Enabling Customizable Keyboard Shortcuts

You can customize your GTK applications' keyboard shortcuts (those are called accelerators in GTK terminology) by hovering your mouse over a menu item and pressing your desired key combination. However, this feature is disabled by default. To enable it, set

gtk-can-change-accels = 1

Speed up your GNOME menu

This setting controls the delay between you pointing the mouse at a menu and that menu opening in GNOME. Change this to a setting you prefer. I guess the number is in milliseconds, e.g. 250 being a quarter of a second.

gtk-menu-popup-delay = 0

Reduce widget sizes

If you have a small screen or you just do not like big icons and widgets, you can resize things easily. To have icons without text in toolbars, use

gtk-toolbar-style = GTK_TOOLBAR_ICONS

To use smaller icons, use a line like this:

gtk-icon-sizes = "panel-menu=16,16:panel=16,16:gtk-menu=16,16:gtk-large-toolbar=16,16\
:gtk-small-toolbar=16,16:gtk-button=16,16"

Or to remove icons from buttons completely:

gtk-button-images = 0

You can also remove icons from menus:

gtk-menu-images = 0

There is some more tweaking to do in your themes gtkrc like explained here and there's another theme that does it all.

Development

When writing a start-from-scratch GTK+ 3 program with C, it's necessary to add CFLAGS for gcc:

gcc -g -Wall `pkg-config --cflags --libs gtk+-3.0` -o base base.c

-g and -Wall parameters are not necessary since they are only for verbose debugging outputs. You may try out the official Hello World example.

Write a simple message dialog

You can write your own GTK+ 3 message dialog easily in many programming languages through GObject-Introspection or bindings, or you can simply use bash.

The following examples display a simple "Hello world" in a message dialog.

Bash

Template:File

C

Template:File

C++

Template:File

Genie

Template:File

JavaScript

Template:File

Python

Template:File

Vala

Template:File

More resources

Resources