Button causing Tkinter Window to Crash (Python)

Question:

I started learning python a few days ago and I have been messing around with Tkinter. I have been making a cookie-clicker type of game to practice what I learned. Everything worked except for a button that when clicked should start adding 1 point every 30 seconds.

I isolated the problem to this this:

from tkinter import *
import time

cookies_clicked = 0
cursors = 0

main_window = Tk()
main_window.title("Cookie Clicker")
main_window.geometry("900x500")


def click():
    global cookies_clicked
    global cursors
    cursors += 1
    while 0 == 0:
        print("test")# this is for me to check if the loop is working
        cookies_clicked += cursors
        time.sleep(30)


up_1 = Button(main_window, text="Upgrade 1", command=click)
up_1.place(x=410, y=100)

main_window.mainloop()

I know the loop is working when I click the button because "test" is printed every 30 seconds, but the Tkinter window stops responding completely.

Asked By: Bluffyyy

||

Answers:

That is because you are waiting in the main thread so tkinter is also waits for 30 seconds so you can use Threadings

from threading import Thread
def click():
    global cookies_clicked
    global cursors
    cursors += 1
    while True:
        print("test")  # this is for me to check if the loop is working
        cookies_clicked += cursors
        time.sleep(30)


def _click():
    p = Thread(target=click)
    p.start()

up_1 = Button(main_window, text="Upgrade 1", command=_click)

Also instead of click you should use _click method

Answered By: Sarper Makas
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.