FAQ 3.14 How can I write a GUI (X, Tk, Gtk, etc.) in Perl?

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

This is an excerpt from the latest version perlfaq3.pod, which
comes with the standard Perl distribution. These postings aim to
reduce the number of repeated questions as well as allow the community
to review and update the answers. The latest version of the complete
perlfaq is at http://faq.perl.org .


3.14: How can I write a GUI (X, Tk, Gtk, etc.) in Perl?

    (contributed by Ben Morrow)

    There are a number of modules which let you write GUIs in Perl. Most GUI
    toolkits have a perl interface: an incomplete list follows.

    Tk  This works under Unix and Windows, and the current version doesn't
        look half as bad under Windows as it used to. Some of the gui
        elements still don't 'feel' quite right, though. The interface is
        very natural and 'perlish', making it easy to use in small scripts
        that just need a simple gui. It hasn't been updated in a while.

    Wx  This is a Perl binding for the cross-platform wxWidgets toolkit (
        http://www.wxwidgets.org ). It works under Unix, Win32 and Mac OS X,
        using native widgets (Gtk under Unix). The interface follows the C++
        interface closely, but the documentation is a little sparse for
        someone who doesn't know the library, mostly just referring you to
        the C++ documentation.

    Gtk and Gtk2
        These are Perl bindings for the Gtk toolkit ( http://www.gtk.org ).
        The interface changed significantly between versions 1 and 2 so they
        have separate Perl modules. It runs under Unix, Win32 and Mac OS X
        (currently it requires an X server on Mac OS, but a 'native' port is
        underway), and the widgets look the same on every plaform: i.e.,
        they don't match the native widgets. As with Wx, the Perl bindings
        follow the C API closely, and the documentation requires you to read
        the C documentation to understand it.

        This provides access to most of the Win32 GUI widgets from Perl.
        Obviously, it only runs under Win32, and uses native widgets. The
        Perl interface doesn't really follow the C interface: it's been made
        more Perlish, and the documentation is pretty good. More advanced
        stuff may require familiarity with the C Win32 APIs, or reference to

        CamelBones ( http://camelbones.sourceforge.net ) is a Perl interface
        to Mac OS X's Cocoa GUI toolkit, and as such can be used to produce
        native GUIs on Mac OS X. It's not on CPAN, as it requires frameworks
        that CPAN.pm doesn't know how to install, but installation is via
        the standard OSX package installer. The Perl API is, again, very
        close to the ObjC API it's wrapping, and the documentation just
        tells you how to translate from one to the other.

    Qt  There is a Perl interface to TrollTech's Qt toolkit, but it does not
        appear to be maintained.

        Sx is an interface to the Athena widget set which comes with X, but
        again it appears not to be much used nowadays.


The perlfaq-workers, a group of volunteers, maintain the perlfaq. They
are not necessarily experts in every domain where Perl might show up,
so please include as much information as possible and relevant in any
corrections. The perlfaq-workers also don't have access to every
operating system or platform, so please include relevant details for
corrections to examples that do not work on particular platforms.
Working code is greatly appreciated.

If you'd like to help maintain the perlfaq, see the details in

Site Timeline