GtkSharpDetails

The Gtk# docs here are outdated. Please visit the GtkSharp GitHub repo for updated content.

Gtk# 2.0 has been released.

For a list of the new features see Whats new on Gtk# 2 page, for a list of upcoming features see GtkSharpPlan.

Introduction

IFolder_Linux.png

iFolder, a GTK# application

Gtk#, a GUI Toolkit, is a set of .NET bindings for the gtk+ toolkit and assorted GNOME libraries. This library allows you to build fully native graphical Gnome application using Mono. GTK# is an event-driven system like any other modern windowing library. Every widget in an application has handler methods that get called when particular events happen.

Applications built using Gtk# will run on many platforms including Linux, Windows and macOS. Gtk is the native toolkit for the Linux desktop running GNOME, so applications will look and function best on here. The Mono packages for Windows include Gtk, Gtk# and the native theme to make your applications look like native Windows applications. At this point, running Gtk# applications on MacOS requires the user to run the X11 server.

You can use Glade along with the Glade# bindings to easily design GUI applications. A new GUI designer called Stetic is being built which will be integrated with the MonoDevelop IDE.

In addition to support the standard Gtk/Gnome stack of development tools, the gtk-dotnet.dll assembly provides a bridge to consume functionality available on the .NET stack, at this point this includes the functionality to use System.Drawing to draw on a widget.

See the sample in gtk-sharp/samples/DrawingSample.cs for details.

Availability

Gtk# is available for both Unix and Windows.

Tutorials

Beginning to use Gtk#

Gtk# GUI details and techniques

Advanced Gtk#

Extending your GUI

Internationalization

Accessibility

  • Cross platform

Other Gtk# Tutorials

  • Video demonstrating how to create a “Hello World” application using Gtk# and glade

http://nat.org/demos/gtksharp.html

  • Creating your first “hello world” Gtk# application using MonoDevelop

http://www.monodevelop.com/tutorials/helloworld.aspx

  • An old collection of documentation for Gtk#, it would be great if someone could go through this and insert it all into the wiki

http://www.gotmono.com/docs/gnome/bindings/gtk-sharp/gtk-sharp.html

  • How to build a Gtk# application in Windows using glade and Visual Studio.Net 2003

http://www.mfconsulting.com/tutorial/newgladeapp/

User Testimonials

User testimonials indicate that Gtk# provides developers with great productivity for building graphical applications especially when compared to GTK+ or Java Swing : “Gtk# and Mono have proven to be an outstanding combination for delivering rich client applications to the Linux desktop…Gtk# and Mono’s tight integration with the GNOME/Ximian desktop enables us to deliver desktop plugins written entirely in managed code. Today, this level of integration is not possible on Windows with .NET and Windows Forms.” says Brady Anderson from the iFolder project.

Additional Widgets

The following is a list of additional widgets (known as “controls” in Windows) that people have written to extend Gtk#:

Gnome-KeyRing-Sharp

This library provides access to the Gnome Keyring for managed applications.

Availability: GitHub, Web

GSF Sharp

This library provides access to reading and writing structured files (OLE files), this depends on the libgsf library from the GNOME project:

Availability: Web snapshot

GtkGlArea Sharp

A binding for GtkGlArea, a widget that can host an OpenGL context in your Gtk# application.

Availability: Web snapshot

WebKit Sharp

webkit-sharp provides access to WebKit, a fast, high-quality web browser engine suited for embedding in GTK+ applications. It features bleeding-edge HTML5, AJAX, SVG and JavaScript capabilities with seamless UI integration.

Availability: Web snapshot

GtkMozEmbed Sharp

This library provides access to the Mozilla rendering engine with Gtk+ using the GtkMozEmbed widget:

Availability: Web snapshot

GtkSourceView Sharp

Bindings to the GtkSourceView widget, this widget is typically used for writing programmer editors.

Availability: Web snapshot

Hal Sharp

This library provides access to the Hardware Abstraction Layer (HAL) from FreeDesktop.

This is used when you need to interact with the hardware. For example Banshee uses this to detect new media (reading and burning).

Availability: Web snapshot.

DBus Sharp

DBus Sharp is an implementation of the DBus protocol for managed languages. DBus allows applications on the Unix desktop to communicate with each others and is part of the FreeDesktop effort.

Availability: Web downloads

ipod sharp

ipod-sharp is a library that allows manipulation of the iTunesDB used in Apple iPod devices. Currently it supports adding/removing songs and manipulating playlists.

Availability: Web snapshot.

Maemo Sharp

Maemo# is a Gtk# bindings for Maemo libraries.

Availability: Web snapshot

JScall Sharp

JSCall is a simple JavaScript bridge for Gecko#. It’s an interim solution until someone writes a proper XPCOM bridge for Mono, and uses unmanaged code and P/Invoke to invoke Gecko’s XPCOM components from managed code. It should work with any .NET language, but I’ve referred to C# for simplicity. I don’t expect many people to use this, so the documentation is little more than minimal; lease contact me <m.j.hutchinson@gmail.com> if you need help working out how it works.

Availability: Web snapshot

NPlot Gtk

The first version of NPlot-Gtk was made by Miguel de Icaza, and was a wrapper of NPlot 0.9.8.5.

Now the wrapper of version 0.9.9.2 has just an NPlot upgrade and a few hacks over the work of Miguel (Carlos)

This version of NPlot has been extended to support Gtk# on Linux.

The version is based on NPlot 0.9.9.2 Availability: Web snapshot.

Taglib Sharp

TagLibSharp is a free and Open Source library for the .NET 2.0 and Mono frameworks which will let you do what you want to do.

It supports a large variety of movie and music formats which abstract away the work, handling all the different cases, so all you have to do is access file.Tag.Title, file.Tag.Lyrics, or my personal favorite file.Tag.Pictures.

A library for reading and writing metadata from audio files.

Availability: Web snapshot.

Daap Sharp

daap-sharp is a DAAP (Digial Audio Access Protocol) implementation. It is used by Apple’s iTunes software to share music.

Availability: Web snapshot.

Mono.ZeroConf

Supports the ZeroConf/Bonjour protocol using mdnsdresponder or Avahi.

Availability: Web snapshot.

If you know of anything else that should be added to this page, let someone in #mono know.

Gtk#’s Components

Gtk# Components

Gtk# is composed of three modules: gtk-sharp, gnome-sharp, and gnome-desktop-sharp.

Module:

gtk-sharp

glib-sharp

Portions of the glib 2.x libraries which provide a low-level non-GUI core library for gtk+.

pango-sharp

The Pango international text layout and rendering library.

atk-sharp

The atk Accessibility framework.

gdk-sharp

Drawing Kit using by gtk+.

gtk-sharp

The Gtk 2.x toolkit, a cross-platform toolkit for creating graphical user interfaces

glade-sharp

Supports dynamic loading of Glade interface builder files.

gtk-dotnet

Integration of the Gtk# namespace with System.Drawing.

Module:

gnome-sharp

art-sharp

A vector and rendering library.

gnome-sharp*

GNOME program initialization, printing, panel access, and assorted widgets.

gnomevfs-sharp*

File, MIME type, icon, and various GNOME file system interaction functionality.

gconf-sharp*

Configuration storage system on Gnome

Module:

gnome-desktop-sharp

gtkhtml-sharp*

A lightweight HTML widget.

gtksourceview2-sharp*

A source code editing and viewing widget library.

nautilusburn-sharp*

GNOME CD/DVD burning library.

rsvg-sharp

SVG rendering library.

vte-sharp*

The VTE terminal emulator.

wnck-sharp*

Window navigator construction kit library.

* Not not available on the Windows GTK# package

Versions & Status

The Gtk# project is closely associated with the Mono project.  Development is proceeding in the Mono git repository.  The git repository can be browsed on the web.

  • Gtk# 2.4 This is the current versions of Gtk# and they bind Gtk+ 2.4 and the GNOME 2.10 platform.

  • Gtk# 1.0.x: this is the old version of Gtk# and it binds the GNOME 2.2 platform.

For more details about the versions and future plans see: GtkSharpPlan.

Development is occuring on git master at: gtk-sharp

Migrating from 1.x to 2.x

See our page on upgrading your Gtk# application

Future Directions

We are keeping track of various ideas for Gtk# on the GtkSharpIdeas page

Additional Resources

For specific examples on GTK widgets, and other Gtk related topics, click on the GtkSharp category at the bottom of this page.