При повторном добавлении и удалении лейблов появляется ошибка "Exception in Tkinter callback"
Мне надо сделать так, чтобы был слайдер с возможностью выбора от 0 до 8. Например, если пользователь ставит число 6, создается 6 точек и (если до этого было точек больше) удаляются остальные. Первые 2-3 раза вызов функции работает отлично, но после - ошибка: Exception in Tkinter callback. Traceback (most recent call last). Я совершенно не могу понять в чем проблема, пытался решить наверное уже часа 2, так что задаю вопрос здесь.
Код:
from tkinter import *
import random
dots = 3
def randomizer():
a = random.randint(0, 900)
b = random.randint(0, 500)
return a, b
def set_dots():
global dots
print(dots_slider.get())
if dots_slider.get() > dots: # Создание точек
for i in range(dots_slider.get()):
x, y = randomizer()
aim_dots[i].place(x=x, y=y)
if dots_slider.get() < dots: # Удаление точек
for i in range(8 - dots_slider.get()):
aim_dots[-i].destroy()
dots = dots_slider.get()
if __name__ == '__main__':
window = Tk()
window.title("Aim trainer")
window.geometry('1140x660')
window.config(cursor='crosshair', bg='#444444')
aim_zone = Frame(window, height=600, width=1000, bg='#DDDDDD', bd=4, relief=RAISED)
aim_zone.place(x=0, y=0)
info_zone = Frame(window, height=600, width=128, bg='#BBBBBB', bd=4, relief=RAISED, cursor='left_ptr')
info_zone.place(x=1000, y=0)
aim_dot1 = Label(aim_zone, width=2, height=1, bg='blue')
aim_dot2 = Label(aim_zone, width=2, height=1, bg='blue')
aim_dot3 = Label(aim_zone, width=2, height=1, bg='blue')
aim_dot4 = Label(aim_zone, width=2, height=1, bg='blue')
aim_dot5 = Label(aim_zone, width=2, height=1, bg='blue')
aim_dot6 = Label(aim_zone, width=2, height=1, bg='blue')
aim_dot7 = Label(aim_zone, width=2, height=1, bg='blue')
aim_dot8 = Label(aim_zone, width=2, height=1, bg='blue')
aim_dots = (aim_dot1, aim_dot2, aim_dot3, aim_dot4, aim_dot5, aim_dot6, aim_dot7, aim_dot8)
slider_label = Label(info_zone, text="Dots amount:", font=('Comic Sans', 16), width=9, padx=8)
slider_label.pack(side=TOP)
dots_slider = Scale(info_zone, from_=8, to=0, length=123, orient=HORIZONTAL, tickinterval=4)
dots_slider.pack(side=TOP)
dots_button = Button(info_zone, text='Set this amount', command=set_dots)
dots_button.pack()
window.mainloop()
Консоль:
5
2
7
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Юрий\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
return self.func(*args)
File "C:\Users\Юрий\PycharmProjects\pythonProject\main.py", line 17, in set_dots
aim_dots[i].place(x=x, y=y)
File "C:\Users\Юрий\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 2477, in place_configure
self.tk.call(
_tkinter.TclError: bad window path name ".!frame.!label"