Open In App

Run Code Alongside Python Tkinter'S Event Loop

Last Updated : 31 May, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

Running code alongside Tkinter's event loop consists of integrating background tasks with Tkinter's main loop without freezing the user interface. This is essential for creating responsive applications that perform tasks such as updating the UI, handling network requests, or running computations concurrently. In this article, we will explore two different approaches to running code alongside Tkinter's event loop.

Run Code Alongside Tkinter's Event Loop

Below are the possible approaches to running code alongside Tkinter's event loop.

  • Using the After Method
  • Using the threading Module

Run Code Alongside Tkinter's Event Loop Using the After Method

In this example, we are using the after method in Tkinter to schedule the update_label function to run every 1000 milliseconds (1 second). This function updates a label with a counter value and prints the value to the console, incrementing the counter each time until it reaches 10.

Python
import tkinter as tk

root = tk.Tk()
root.geometry("300x200")

label = tk.Label(root, text="", font=("Helvetica", 14))
label.pack(pady=20)

counter = 1

def update_label():
    global counter
    if counter <= 10:
        print(counter)
        label.config(text=str(counter))
        counter += 1
        root.after(1000, update_label)  

root.after(1000, update_label) 

root.mainloop()

Output:

1

Run Code Alongside Tkinter'S Event Loop Using the Threading Module

In this example, we are using the threading module to run the run_in_thread function in a separate thread. This function updates a label with different combinations of "GeeksforGeeks" and prints them to the console every second, allowing the Tkinter event loop to run concurrently without blocking.

Python
import tkinter as tk
import threading
import time

root = tk.Tk()
root.geometry("300x200")

label = tk.Label(root, text="", font=("Helvetica", 14))
label.pack(pady=20)

combinations = [
    "GeeksforGeeks",
    "Geeksfor",
    "Geeks",
    "forGeeks",
    "GfG",
    "GeeksforGeeks Rocks",
    "Learn at GeeksforGeeks",
    "GeeksforGeeks Python",
    "GeeksforGeeks Algorithms",
    "GeeksforGeeks Data Structures"
]
combination_index = 0

def run_in_thread():
    global combination_index
    while combination_index < len(combinations):
        print(combinations[combination_index])
        root.after(0, lambda: label.config(text=combinations[combination_index]))
        combination_index += 1
        time.sleep(1)

thread = threading.Thread(target=run_in_thread, daemon=True)
thread.start()

root.mainloop()

Output:

2(2)



Article Tags :
Practice Tags :

Similar Reads