Зависание интерфейса
Когда запускаю программу накапливаю клики и нажимаю авто клики программа намертво зависает.
Причём в консоли результат пишется.
Как я понял ей не понравился цикл while.
Можно это как-то исправить?
from tkinter import *
import time
import math
tk = Tk()
tk['bg'] = 'orange'
tk.title('кликер')
tk.geometry('800x600')
tk.resizable(width=False, height=False)
clicks = 0
def click():
global clicks
clicks += 1
print(clicks)
def c100():
global clicks
if clicks >= 5:
clicks -= 5
while 1:
clicks += 0.3
print(round(clicks,1))
time.sleep(1)
elif clicks < 5:
print("мало кликов")
canvas = Canvas(tk, height=300, width=250 )
canvas.pack()
frame = Frame(tk, bg='red')
frame.place(relx=0.06, rely=0.06, width=700, height=500)
title = Label(frame, text='кликер', bg='yellow', font=('Comic Sans MS', 40))
title.pack()
btn = Button(frame, text='клик', bg='blue', font=('Comic Sans MS', 20), width=30, height=1, command=click, activebackground='dark blue', activeforeground='white')
btn.pack()
title1.place(x=5, y=10)
btn2 = Button(frame, text='Авто клики\nЦена:5', bg='lime', font=('Comic Sans MS', 15), command=c100)
btn2.place(x=30, y=160)
tk.mainloop()
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Я не понимаю логику вашей функции c100().
Но вам надо запомнить что:
while 1:- блокирует интерфейс;time.sleep(1)- блокирует интерфейс;- вам надо использовать метод
after().
from tkinter import *
import time
import math
tk = Tk()
tk['bg'] = 'orange'
tk.title('кликер')
tk.geometry('800x600')
tk.resizable(width=False, height=False)
clicks = 0
def click():
global clicks
clicks += 1
print(f'clicks = {clicks}')
def c100(fl=1):
global clicks
#print(f'def c100(): {clicks}') #
''' попробуйие так
if fl:
if clicks >= 5:
clicks -= 5
canvas.after(1000, lambda: c100(0))
elif clicks < 5:
print("мало кликов")
else:
clicks += 0.3
print(round(clicks, 1))
canvas.after(1000, lambda: c100(0))
'''
# мне показалось ято так:
if clicks >= 5 and fl:
clicks -= 5 if fl else 0
# while 1:
clicks += 0.3
print(round(clicks, 1))
# time.sleep(1)
canvas.after(1000, lambda: c100(0))
if not fl:
clicks += 0.3
print(round(clicks, 1))
canvas.after(1000, lambda: c100(0))
elif clicks < 5:
print("мало кликов")
''' попробуйие так
if clicks >= 5:
clicks -= 5
# while 1:
clicks += 0.3
print(round(clicks, 1))
# time.sleep(1)
canvas.after(1000, c100)
elif clicks < 5:
print("мало кликов")
'''
canvas = Canvas(tk, height=300, width=250)
canvas.pack()
frame = Frame(tk, bg='red')
frame.place(relx=0.06, rely=0.06, width=700, height=500)
title = Label(frame, text='кликер', bg='yellow', font=('Comic Sans MS', 40))
title.pack()
btn = Button(
frame,
text='клик',
bg='blue', font=('Comic Sans MS', 20),
width=30, height=1,
command=click,
activebackground='dark blue', activeforeground='white'
)
btn.pack()
#title1.place(x=5, y=10)
btn2 = Button(frame, text='Авто клики\nЦена:5', bg='lime', font=('Comic Sans MS', 15), command=c100)
btn2.place(x=30, y=160)
tk.mainloop()
