Skip to content
On this page

Tkinter

Tkinter is a Python library for creating graphical user interfaces (GUIs). It is a standard part of the Python programming language and is based on the Tcl/Tk GUI toolkit. Tkinter provides a set of tools and widgets for creating windows, dialog boxes, buttons, menus, and other GUI elements.

Tkinter is a cross-platform library that can be used on Windows, macOS, and Linux systems. It is easy to learn and use, making it a popular choice for beginners who want to create simple GUI applications. However, it is also powerful enough to create complex applications with advanced features and functionality.

Some of the key features of Tkinter include support for various widget types (such as buttons, text boxes, and canvas), event handling (to handle user interactions), and layout management (to arrange the widgets in the window). Tkinter also provides support for creating custom widgets, using styles and themes to customize the appearance of the widgets, and internationalization (i18n) to support multiple languages.

Installation

Tkinter comes pre-installed with Python on most systems. However, if it's not available, you can install it using the following command:

bash
pip install tk

Basic Usage

Simple Windows

To create a basic window, you need to initialize the main Tkinter class and call its mainloop() method:

python
root = tk.Tk()
root.title("My Tkinter App")
root.geometry("400x300")

root.mainloop()

root is the main window, and you can customize it by setting the title and window dimensions using the title() and geometry() methods, respectively.

Window with widgets

Tkinter provides several built-in widgets like buttons, labels, and text boxes. You can add them to your window and set their properties. Here's an example of adding a label and a button:

python
def on_button_click():
    print("Button clicked!")

root = tk.Tk()
root.title("My Tkinter App")
root.geometry("400x300")

label = tk.Label(root, text="Hello, Tkinter!")
label.pack(pady=20)

button = tk.Button(root, text="Click me!", command=on_button_click)
button.pack()

root.mainloop()

In this example, we define a function called on_button_click() to handle button clicks. We create a Label and a Button widget, setting their properties and adding them to the root window using the pack() method. The pady parameter in pack() adds some vertical padding around the label.

Handle user events

In the example above, we've already shown how to handle a button click event by setting the command parameter. For other types of events, you can use the bind() method on the widget:

python
def on_key_press(event):
    print(f"Key pressed: {event.char}")

root = tk.Tk()
root.title("My Tkinter App")
root.geometry("400x300")

label = tk.Label(root, text="Press any key")
label.pack(pady=20)

root.bind("<KeyPress>", on_key_press)

root.mainloop()

Here, we define a function on_key_press() to handle key press events. We then bind the event to the root window using the bind() method and the corresponding event pattern (e.g., <KeyPress> for key press events).

Object-oriented Approach

To implement an object-oriented approach, create a custom class for your application. This class should inherit from the Tkinter Tk class:

python
class MyApp(tk.Tk):

    def __init__(self):
        super().__init__()
        self.title("My OO Tkinter App")
        self.geometry("400x300")
        self._create_widgets()

    def _create_widgets(self):
        self.label = tk.Label(self, text="Hello, Tkinter!")
        self.label.pack(pady=20)

        self.button = tk.Button(self, text="Click me!", command=self.on_button_click)
        self.button.pack()

    def on_button_click(self):
        print("Button clicked!")

app = MyApp()
app.mainloop()

In this example, we define the MyApp class and call the parent constructor using super().__init__(). We also set the title and window dimensions, and call the _create_widgets() method, which will be responsible for creating and adding widgets to the main window.

In the _create_widgets() method, we create a Label and a Button widget, set their properties, and add them to the main window using the pack() method. Notice how we set the button command to self.on_button_click.

Released under the MIT License.