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.
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