CustomTkinter README

The project's README from github.com/TomSchimansky/CustomTkinter. As one markdown file: README.md.

PyPI PyPI - Downloads Downloads last 6 month PyPI - License Minimum Python Version


Current Developers Contact
Tom Schimansky [email protected]
Federico Spada www.linkedin.com/in/federicospada13

Paypal donation button


Official website: https://customtkinter.tomschimansky.com/

CustomTkinter is a python UI-library based on Tkinter, which provides new, modern and fully customizable widgets. They are created and used like normal Tkinter widgets and can also be used in combination with normal Tkinter elements. The widgets and the window colors either adapt to the system appearance or the manually set mode ('light', 'dark'), and all CustomTkinter widgets and windows support HighDPI scaling (Windows, macOS). With CustomTkinter you'll get a consistent and modern look across all desktop platforms (Windows, macOS, Linux).

| complex_example.py on Windows 11 with dark mode and 'blue' theme

| complex_example.py on macOS in light mode and standard 'blue' theme

Installation

Install the module with pip:

pip3 install customtkinter

Update existing installation: pip3 install customtkinter --upgrade
(update as often as possible because this library is under active development)

Documentation

The official documentation can be found here:

➡️ https://customtkinter.tomschimansky.com/documentation.

Example Program

To test customtkinter you can try this simple example with only a single button:

import customtkinter

customtkinter.set_appearance_mode("System")  # Modes: system (default), light, dark
customtkinter.set_default_color_theme("blue")  # Themes: blue (default), dark-blue, green

app = customtkinter.CTk()  # create CTk window like you do with the Tk window
app.geometry("400x240")

def button_function():
    print("button pressed")

# Use CTkButton instead of tkinter Button
button = customtkinter.CTkButton(master=app, text="CTkButton", command=button_function)
button.place(relx=0.5, rely=0.5, anchor=customtkinter.CENTER)

app.mainloop()

which results in the following window on macOS:

In the examples folder, you can find more example programs and in the Documentation you can find further information on the appearance mode, scaling, themes and all widgets.

More Examples and Showcase

You can run the following code to show a simple App that displays all available widgets:

import customtkinter as ctk
ctk.run_showroom()

Appearance mode change and scaling change

CustomTkinter can adapt to the Windows 10/11 light or dark mode:

https://user-images.githubusercontent.com/66446067/204672968-6584f360-4c52-434f-9c16-25761341368b.mp4

| complex_example.py on Windows 11 with system appearance mode change and standard 'blue' theme

On macOS you either need python3.10 or higher or the anaconda python version to get a dark window header (Tcl/Tk >= 8.6.9 required):

https://user-images.githubusercontent.com/66446067/204673854-b6cbcfda-d9a1-4425-92a3-5b57d7f2fd6b.mp4

| complex_example.py on macOS with system appearance mode change, user-scaling change and standard 'blue' theme

Button with images

It's possible to put an image on a CTkButton. You just have to pass a PhotoImage object to the CTkButton with the image argument. If you want no text at all you have to set text="" or you specify how to position the text and image at once with the compound option:

| image_example.py on Windows 11

Scrollable Frames

Scrollable frames are possible in vertical or horizontal orientation and can be combined with any other widgets. | scrollable_frame_example.py on Windows 11

Integration of TkinterMapView widget

In the following example I used a TkinterMapView which integrates well with a CustomTkinter program. It's a tile based map widget which displays OpenStreetMap or other tile based maps:

https://user-images.githubusercontent.com/66446067/204675835-1584a8da-5acc-4993-b4a9-e70f06fa14b0.mp4

| examples/map_with_customtkinter.py from TkinterMapView repository on Windows 11

You can find the TkinterMapView library and example program here: https://github.com/TomSchimansky/TkinterMapView

CustomTkinter (TomSchimansky/CustomTkinter)

Searching Database…

What is this?CustomTkinter is a Python UI library based on Tkinter. It provides modern, fully customizable widgets so desktop apps get a consistent, up-to-date look across Windows, macOS and Linux.
So is it a replacement for Tkinter or a layer on top of it?A layer on top, not a replacement: you create and use its widgets just like normal Tkinter widgets, and you can freely mix them with regular Tkinter elements in the same app.
How do I add it to a project?Install it from PyPI with pip: pip install customtkinter. The README advises updating often (also via pip) because the library is under active development.
Do I need anything special besides a normal Python install?No, just Python. The only quirk is macOS: to get a dark window header you need Python 3.10 or higher or the Anaconda version, since Tcl/Tk >= 8.6.9 is required.
Will apps look sharp on high-DPI displays on every OS?HiDPI scaling is confirmed for Windows and macOS — those are the only two platforms the README names for it. Linux gets the same modern look, but no scaling support is claimed there.
Does it follow my system's dark mode?Yes. Widgets and window colors adapt to the system appearance automatically, or you can set the mode manually to 'light' or 'dark' — including Windows 10/11 dark mode.
How customizable is the look beyond dark mode?Widgets are fully customizable and there are themes — the README examples use a standard 'blue' theme, and the documentation covers appearance mode, scaling, themes and every widget.
Can I put images on buttons?Yes — pass a PhotoImage object to a CTkButton via the image argument. Set text='' for an image-only button, or use the compound option to control how text and image sit together.
Does it have scrollable frames?Yes, in both vertical and horizontal orientation, and scrollable frames can be combined with any other widgets.
Can I embed a map in my app?Not built in, but the author's TkinterMapView library integrates well with CustomTkinter — it's a tile-based map widget that displays OpenStreetMap or other tile-based maps.
Size
147.6 MB
Stars
13.6K
Updated
CommitJun 24
Age
5y
Commits · 90 Days