Would you like to have a more native look for your Tkinter application? Are the themes provided in ttkthemes not to your liking?
This package provides a version of gtkTtk
,
formerly tilegtk
packaged for
usage with Python. Simply follow the installation instructions and all
required files are installed to the site package directory.
Currently, a build process for Linux and Windows is available. If you would like to use the package on OS X, please let me know so we can work on a build system.
Currently, wheels are provided for Windows. The Linux wheels are built
with Travis-CI and are thus not manylinux
wheels. Therefore, building
yourself is recommended when using Linux (either from the source dist
from PyPI or this repository). Feel free to open an issue if you
encounter any problems building!
These instructions are for Ubuntu, Python 3.5 or higher. Any lower version may work, but is not supported. On other distributions, package names may be different.
# Build Tools
sudo apt install build-essential cmake
# Required Libraries
sudo apt install libgtk2.0-dev libglib2.0-dev tcl-dev tk-dev
# Required Python packages
python -m pip install scikit-build
python setup.py install
These instructions assume you have MSYS2
installed, with the MinGW toolchain. The setup.py
script will check
the additional build dependencies and install them when required.
Both the MSYS bin
directory as well as the MinGW bin
directory must
be on the PATH
to run the setup.py
script. Usually, these folders
are C:\msys64\usr\bin
and C:\msys64\mingw64\bin
, but they may differ
for your installation.
In addition to this, the setup.py
script expects the Dependencies
program found here to be
installed under deps/Dependencies.exe
by default. This tool is used
to find all DLL-files necessary to run gttk
without any external files.
If you have satisfied all requirements, assuming you want to install the package outside of your MSYS installation:
# Replace C:\Python with the path to your Python setup
# The MSYS version of Python is on PATH and thus you should use an abspath!
C:\Python\python.exe setup.py install
The binary distribution of gttk
will come with all DLL-files known to
be required to run it. These DLL-files are generally available under
their own specific licenses, as covered in the files that are found in
the MSYS directory /share/licenses
.
Simply import the package and instantiate the GTTK
class. Then the
theme will become available for usage in a ttk.Style
.
import tkinter as tk
from tkinter import ttk
from gttk import GTTK
window = tk.Tk()
gttk = GTTK(window)
style = ttk.Style()
style.theme_use("gttk")
print(gttk.get_current_theme()) # Prints the active GTK theme
gttk.set_gtk_theme("Yaru") # Sets GTK theme, provided by developer
ttk.Button(window, text="Destroy", command=window.destroy).pack()
window.mainloop()
If you encounter an error because you are running in the repository,
directory, make sure to disallow imports from the working directory
before importing gttk
:
import sys
sys.path = sys.path[2:]
import gttk
So, now that you've installed gttk
and loaded it into your application,
you want to specify what GTK should be loaded. Due to the nature of GTK,
this may seem a bit complicated, but it's not too hard.
The default theme directory on Linux are specified by the XDG
standard and generally /usr/share/themes
is used. This folder contains
Gnome themes, which can be applied to gttk
if it includes a GTK+-2.0
theme variant.
On Windows the default directory is given by
${dirname(GetModuleFileName())}\\share\\themes
, where GetModuleFileName()
is a win32
function that returns the path to the current executable,
so usually %PYTHONDIR%\\python.exe
.
These folders are not really convenient, as users do not generally have write permissions for them.
A different theme directory may be specified by passing the
theme_dir_prefix
kwarg to GTTK.__init__
, or by setting the
environment variable GTK_DATA_PREFIX
. This value only serves as a
prefix, so then the theme directory becomes
${GTK_DATA_PREFIX}/share/themes
. Check the absolute path with
GTTK().get_themes_directory()
.
To load a theme from the theme directory, first make sure that you have copied a proper GTK+-2.0 theme into the theme directory, in its own sub-folder. Then, set the theme using the GTTK class
gttk = GTTK(window, theme="THEME_NAME_HERE")
# OR
gttk.set_theme("THEME_NAME_HERE")
or you can create a ~/.gtkrc
file (the specific paths of the files
that are parsed are found with GTTK().get_default_files()
) and having
at least the line
gtk-theme-name = "THEME_NAME_HERE"
This will then be applied to all GTK applications that read the resource file.
gttk
should work with any GTK theme you can throw at it, but below
are the themes Yaru and Adwaita as examples.
This repository provides a wrapper around gttk
, which is a renamed
version of gtkTtk
, which in turn is a renamed version of tile-gtk
.
The original tile-gtk
is available under hte MIT License. This version
is available only under GNU GPLv3.
python-gttk
Copyright (c) 2008-2012 Georgios Petasis
Copyright (c) 2012 Cheer Xiao
Copyright (c) 2019-2020 Géballin
Copyright (c) 2020 RedFantom
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
tile-gtk
, gtkTtk
and hence also gttk
are far from perfect. You may
encounter various graphical artifacts when using particular themes,
while others work without flaws.
You are welcome to report any issues, and pull requests are even better. Currently the package can only be built for Linux-based systems and attempts to create a process for building on Windows using MSYS and CMake have proven unfruitful. If you would like to give it a go, feel free to contact me.