
Explore Python and Tkinter for desktop apps, learn the basics, and complete projects to master Tkinter. Create responsive, native-looking interfaces and distribute your apps on users' machines with Tkinter updates.
Build a solid foundation in Python and Tkinter by following a detailed curriculum, installing Python, and creating your first desktop app with widgets, user input, and geometry managers.
Review this Python refresher with optional skips for familiar topics and quizzes after videos, and use playback speed controls to tailor learning; complete videos to earn the certificate.
Explore how Python handles variables, assignments, and data types such as integers, floats, and strings; learn to print results, reuse names, and understand mutability and simple operations.
Explore string formatting in Python 3.6+ by embedding variables with f-strings, so values update dynamically in printed greetings. Use the format method for reusable templates with placeholders.
Learn to collect user input in Python using input, prompt the user, and store responses in variables. Convert inputs to numbers for math and format results with f-strings.
Explore lists, tuples, and sets in Python to store multiple values in a single variable, define each type with brackets or braces, and compare mutability, order, and duplicates.
Explain advanced set operations like difference, union, and intersection using examples of local and abroad friends, and point to resources on symmetric difference.
Explore booleans in Python by using comparisons to yield true or false, and learn how ==, !=, and the is keyword affect numbers, lists, and strings.
Master how to use if statements in Python to decide with booleans, handle user input, and use indentation with else and elif, plus .lower for case-insensitive checks.
Explore how the in keyword checks membership across lists, tuples, sets, and strings, using examples of friends, watched movies, and user input to print true or false.
Explore how to use the in keyword in Python if statements, with membership tests on a set of movies watched and a magic number game as practical examples.
Explore loops in Python, including while loops and for loops, and learn to use break, range, and sum to control repetition, process lists, and compute averages.
Learn how Python list comprehensions create new lists from existing ones, including doubling numbers and filtering by conditionals, and explore list identity with is and id.
Master dictionaries in Python by mapping string keys to values, accessing and updating entries, using for loops and the in operator, and composing lists of dictionaries for complex data.
Learn how to destructure tuples in Python, unpack multiple values in for loops, and handle missing data with ignored variables; explore list of tuples and dictionary item iteration.
Define and call your own functions in Python with def, a name, brackets, and colon; learn about callable variables, calling, scope, and indentation.
Learn how to define functions with parameters and pass values as arguments in Python, using positional and keyword arguments, with examples like add, say hello, and divide.
Explore default parameter values in Python by making y optional in a two-argument add function. Learn how x is required, while y uses a default, and that defaults come last.
Explore how Python functions return values, why they default to None, and how to use return to pass results, including handling multiple or different data types.
Explore lambda functions in Python: anonymous, single-line helpers that return values using four parts, often paired with map, and why named functions and list comprehensions are usually clearer.
Explore dictionary comprehensions in Python to map usernames to full user tuples, creating a username_mapping of key-value pairs for efficient login checks.
Explore unpacking arguments in Python by defining functions that collect and de-structure with *args and dictionaries, and implement an apply function for multiply and add, with common pitfalls.
Learn how to unpack and collect keyword arguments in Python using **kwargs and dictionaries. Discover how to pass and forward positional and keyword arguments between functions, with practical examples.
Explore object oriented programming in Python by building a student class with attributes like name and grades, and methods such as average to compute the average of grades.
Master python's two magic methods, __str__ and __repr__, to produce user-friendly and unambiguous string representations of objects like Bob with name and age, enabling easy printing and object recreation.
Learn how instance, class, and static methods work in Python, including classmethod factories with cls, illustrated by a Book example with TYPES, hardcover, and paperback.
Explore Python class inheritance by building a Device base class and a Printer subclass that uses super.init, includes capacity and remaining pages, and inherits disconnect behavior.
Explore class composition in Python and how a bookshelf has many books, contrasting it with inheritance to reduce complexity and keep objects decoupled.
Learn how type hinting in Python 3.5+ declares input types and return values, using a list average example that returns a float.
Master Python imports to reuse code across files, using from module import function or import module, and learn how __name__ and dunder main distinguish run from import.
Understand relative imports in Python and why they confuse beginners. Contrast them with absolute imports and adopt absolute imports for reliable, straightforward module access.
Explore how Python errors aid debugging by raising and catching exceptions with try-except, using else and finally, and visualizing traceback for division by zero and other issues.
Custom error classes inherited from ValueError to guard against reading beyond pages in a simple book class with a read method.
Discover how Python treats functions as first-class citizens by passing and calling them as values, using them in operations, and employing lambdas or itemgetter.
Learn how to use Python decorators to securely guard functions, transforming get_admin_password with a decorator that checks user access levels and exposes admin-only results.
Explore the at syntax for decorators in Python, learn how to wrap functions with a decorator like make secure, preserve names with functools.wraps, and avoid losing documentation.
Learn to decorate functions with parameters by building a flexible decorator that accepts arbitrary args and kwargs, passes them to the original function, and remains usable across different functions.
Explore decorators with parameters via a decorator factory that handles three levels of functions to control access for admin and user functions like get_admin_password and get_dashboard_password.
Explore mutability in Python by examining how lists share references and how id reflects objects. Explain immutables like tuples and strings, and how integers stay unchanged with assignment.
Discover why mutable default parameters in Python cause shared lists across instances; learn to use None defaults and initialize inside the function to keep each student's grades separate.
Set up tkinter in your Python project by selecting an interpreter and editor, importing tkinter, and running tkinter._test to verify installation. Troubleshoot Tkinter on Windows, macOS, and Ubuntu.
Create your first Tkinter hello world app by aliasing Tkinter as tk, using ttk widgets, setting up the root window, packing a label with padding, and running the event loop.
Learn how to create and place Tkinter buttons, connect commands, and explore pack options like top, left, fill, and expand to control layout.
Explore building a tkinter greetings app by adding an entry field, linking it to a tk string var, and printing a hello message that uses the user name or world.
Explore how pack manages tkinter widgets with ipadx, ipady, padding, fill, expand, and side options to create dynamic layouts, including expansion priority and left, top, and right anchoring.
Create flexible Tkinter layouts by using frames; pack widgets in a main frame and root with side, fill, and expand options to control horizontal and vertical space.
Learn to structure a greetings app with Tkinter frames: an input frame for label and entry, and a button frame using pack with side top, fill both, and fill X.
Master the Tkinter grid geometry manager to create responsive two-dimensional layouts with frames and widgets, using row and column configuration, weight, and sticky to grow content.
Enable high dpi support for Tkinter on Windows 10 by setting the process dpi awareness with ctypes windll, improving text clarity on high dpi screens.
Explore Tkinter widgets, learn parameters and arguments, configure and access values, and work with labels, images, dropdowns, scales, and scroll bars.
Explore labels in Tkinter, including configuring text, padding, fonts, and images with Pillow, resizing, combining text and images via compound, and updating with StringVar.
Explore the text widget in Tkinter, learn how to create an editable text area, insert and retrieve content using 1.0 and end, and manage widget state.
Learn how to add independent scrollbars to a text widget in Tkinter by linking the scrollbar and the text widget with yview and scroll.set, and choose vertical or horizontal orientation.
Implement separators in Tkinter to organize content with the separator widget and ttk.Separator in horizontal orientation. Configure the pack option and fill or sticky to improve visibility beyond one-pixel line.
Create and configure a Tkinter ttk checkbutton bound to a StringVar with onvalue and offvalue, and use a command to print current option and explore text, image, and state options.
Learn to use radio buttons in Tkinter by grouping options with the same StringVar so only one can be selected, with labels and values for each option.
Learn to implement comboboxes in Tkinter, using StringVar and ttk.combobox to present a dropdown of values, with optional typing, event binding to handle selections, and a read-only mode.
Create a tkinter listbox to display languages, bind a selection change function, and print current selections using curselection and get, with single or multiple select modes.
Explore spinboxes in tkinter, an entry field with arrows to adjust values, using from_ and to, intvar or textvariable, wrap behavior and initial value, ttk spinbox options.
Explore scales in Tkinter by creating a horizontal ttk scale from 0 to 10. Bind a change command to print the value and track it with a DoubleVar.
Learn to set up a Tkinter GUI by creating a main frame, placing labels, an entry, and a calc button with grid layout, padding, and alignment for a responsive window.
build a tkinter app that converts metres to feet by binding a string variable to an entry, and define a calculate_feet function with try-except using 3.28084 to print the result.
Link a feet_value string variable to the feet display label, update on button click with feet.3f formatting, and use a static non-resizable window to prevent layout changes.
Learn to add keyboard shortcuts in Tkinter by binding enter and keypad enter to the root or input, enabling form calculation without clicking.
Configure the tkinter global font by importing tkinter.font, extracting TkDefaultFont, and setting it to size fifteen. Learn caveats with fields and plan dynamic padding via a frame.
Explore how the Tkinter winfo_children method retrieves all widgets inside a frame for bulk interaction. Apply consistent padding by configuring grid properties across children, reducing duplicated padx and pady.
Explore object-oriented programming in Tkinter by building a root window through a HelloWorld class that inherits from tk.Tk, using super().__init__, and organizing widgets with self.
Explore object-oriented programming with frames in Tkinter, creating a custom UserInputFrame that encapsulates a label, an entry, and a button inside a ttk.Frame.
Learn how to build a full tkinter app using object-oriented design by creating a HelloWorld class as a Tk subclass, initializing the window, and composing with a UserInputFrame.
Learn to refactor a tkinter distance converter into an object-oriented app by building a DistanceConverter class, a MetresToFeet frame, and self-managed widgets and methods.
Add an inner container frame to the Tkinter window and grid it with padx, pady, and sticky. Prevent frame overlap and prepare for feet to metres calculations in future steps.
Build a feet-to-metres frame by repurposing a metres-to-feet class, swapping labels, inputs, and displays, and using a shared calculate interface for flexible unit conversion.
Learn to switch between two frames in a single Tkinter window by stacking frames and using tkraise to reveal one, with a controller that stores frames and a show_frame method.
Assign key bindings inside the show_frame method to ensure the active frame handles the keys. Bind return and enter to frame.calculate, start with metres to feet, and switch frames seamlessly.
Explore styling Tkinter apps by using ttk.Style to list and switch themes, and see how themes like vista and clam alter widget appearance and behavior.
Learn to inspect and modify Tkinter widget styles by identifying a widget's style class with winfo_class and applying changes to the style class, such as Tlabel.
Configure and apply ttk styles to tkinter widgets with style.configure, set fonts like Segoe UI 20, and use TLabel or custom style classes.
Explore how to inspect a Tkinter label layout and identify elements like Label.border, Label.padding, and Label.label. Configure these properties with style.configure and style.lookup, and note theme variations such as clam.
Learn to create custom inherited styles in Tkinter by copying a built-in style, configuring a new style like CustomEntryStyle.TEntry, and applying changes such as padding to multiple widgets.
Configure state-specific options in a Tkinter style using style.map to change foreground and background for states like pressed and active.
Explore Tkinter fonts, focusing on TkDefaultFont and TkTextFont for entry fields. Change fonts via the constructor or named fonts, and note the styling limitations on entries.
Learn how to create and reuse named fonts in Tkinter by defining font objects, assigning them to widgets, and checking available font families across systems.
Create a pomodoro timer app that counts down from 25 minutes, toggles to short and long breaks, and supports start, stop, reset, and configurable durations via a settings window.
Create a Tkinter pomodoro timer that counts down from 25 minutes to zero, updating a label every second using a StringVar and after 1000 ms.
Add breaks to a Tkinter timer by cycling Pomodoro, short break, and long break with a deque and rotate, updating to 25:00, 05:00, or 15:00.
Display a current timer label showing Pomodoro, short break, or long break, updating as the timer changes, and center the timer within its frame using the place method.
Learn to add start and stop controls to a Tkinter timer, manage timer state with start_timer and stop_timer, and prevent multiple after calls by tracking and canceling the scheduled decrement.
Implement the reset button to stop the timer, reset it to 25 minutes, restore the timer schedule from pomodoro to breaks, then re-enable start and update the timer description.
Move timer configuration from the timer class to the controller to enable sharing with a future settings frame, using StringVar for pomodoro and break times.
Split your app into multiple files by creating a frames package with __init__.py, moving the timer into frames, and importing via from frames import timer and settings.
Create a settings frame in a Tkinter GUI with spinboxes for pomodoro, long break, and short break, linked to a controller for live timer updates.
Switch between timer and settings frames using tk raise, with a controller managing frame references and lambda callbacks to show the target frame.
Define color constants and a clam theme style database to apply custom timer, text, and button styles with hover and disabled states across the pomodoro app.
Build a chat app interface connected to a server, featuring send and fetch capabilities, labels for messages, a custom scrollable frame, a typing area, and styling updates.
Learn to build a tkinter chat app, set a 1200 by 500 window, fetch messages from the API at http://167.99.63.70/messages using requests, and print them.
Create a label for each incoming message to display content in the chat window. Store messages in a global list and update labels only for new messages to avoid duplicates.
Convert each message timestamp to a readable date with datetime and strftime, and display it as a time label beside the message to distinguish duplicates by date.
Refactor the tkinter message UI by splitting the loop into private methods for container and content, then add a sample avatar with Pillow and ImageTk.
Learn to create a scrollable frame in Tkinter by embedding a frame in a canvas, configuring the scroll region, and connecting a vertical scrollbar via the canvas yview.
Explore building a scrollable message window in a tkinter canvas by embedding a frame, configuring the scroll region, adding a scrollbar, and wrapping text for chat messages.
Learn to resize and wrap Tkinter labels as the window changes size by adjusting wraplength based on container width, and bind the mouse wheel to trigger scrolling with self._on_mousewheel.
Post messages to the server using a text input and submit button, sending a json body to /message, then refresh messages and auto-scroll to the bottom while clearing the input.
Style and theme a Tkinter chat app by configuring fonts, colors, and ttk styles, and applying SendButton and FetchButton styles with hover and pressed states using the clam theme.
Learn to build a snake game using Python and Tkinter by creating a canvas-based app, loading assets with Pillow, managing snake movement, collisions, scoring, and random food placement.
Welcome to the highest-rated course on Udemy on creating desktop apps using Python and Tkinter.
Whether you want to create simple utilities, complex multi-page applications, or internal tools for your business, Tkinter has what you need.
In this course, I'll teach you the techniques to make any kind of desktop application using Python and Tkinter.
A frequent question is: "Why should I learn Tkinter instead of web development"?
Desktop applications are much easier to develop than websites. This is especially true for tools and utilities.
It's easy to share Tkinter apps with others without needing them to install Python.
Python GUI apps made with Tkinter look native to the Operating System.
Tkinter apps have full access to the user's computer, which means you can store data locally, safely and securely.
So what's covered in the course?
This is the most comprehensive Tkinter course available on Udemy. We'll look at how you can:
Use Tkinter's grid and pack layout methods to structure your apps
Use Object-Oriented Programming with Tkinter, and create your own custom widgets
Split Tkinter apps into many files, so working on them becomes much easier
Add fonts and styles to Tkinter apps using the new Themed Tkinter Widgets
Add shortcuts and keybindings to your Python GUI apps
Connect to web APIs to send and receive data, stored in the cloud
Build games using Tkinter with the Canvas widget
Package and distribute Tkinter apps so your users don't need to install Python
We've also included two unique sections in this course:
A complete Python refresher. If you're new to Python (but you have some other coding experience), this section will make you productive right away.
A full reference of many Tkinter widgets so you learn how to work with them quickly. It's also easy to come back to later to review what you've learned.
Other students are loving this course!
> The course is straightforward and logically introduces new concepts. I am enjoying it so far!
> This course was perfect for no-frills refresher - and then some! The instructor is very engaging, is full of great suggestions and insight, and delivers his material perfectly.
> Excellent course! A lot of details explained well.
My name is Jose Salvatierra, and I'll be your instructor! I'm an experienced software developer turned instructor. I've helped over 250,000 students in their programming journey.
So if you want to create and distribute intuitive, usable Python GUI applications, this is the course for you!
I'll see you on the inside!