Tkinter: Tcl_AsyncDelete: обработчик asyn c удален неправильным потоком? Как справиться с этой ошибкой потока - PullRequest
2 голосов
/ 19 июня 2020
• 1000 вниз без какого-либо предупреждения, я не знаю, как обрабатывать эту ошибку в python, если для этого есть какой-либо метод обработки ошибок, пожалуйста, помогите мне в этом, в моем случае я просто вызываю другое окно tkinter из основного окна tkinter , Я очень старался решить эту ошибку, но она не решается, так как она возникает снова и снова, пробовала все методы, приведенные в предыдущих сообщениях, но все же она идет, я знаю, что tkinter не является потокобезопасным, но как с этим справиться идеи, я новичок в этом?
root=Tk(mt_debug=1)
root.geometry('454x567')
B=Button(root,text='Plot window',command=lambda: func3(parameter)).grid(row=1,column=2,padx=10,pady=10)
root.mainloop()

def func3(parameter):
  threading.Thread(target=lambda: Plottingandselect(parameter)).start()
  #using threading to call  the
  #another window due to which above error is coming after opening and
  #closing it 2-3 times

def Plottingandselect(rollno):
      window=Tk(mt_debug=1)
      window.title("Marks Distribution")
      Label(window, text=rollno).grid(row=1,column=2)

      Label(window,text="X axis").grid(row=2,column=1)
      Label(window, text="Marks",relief=SUNKEN).grid(row=3, column=1)
      Label(window,text="Y axis").grid(row=2,column=3,padx=22)
      OPTIONS1 = [
        "Physics",
        "Maths",
        "Chemistry",
        "Biology",
      ]
      list1 = Listbox(window, selectmode="multiple", relief=SUNKEN, font=("Times New Roman", 10))
  #then user will select above parameters and graphs will be plotted and 
  #it is plotting also perfectly multiple times also , but when i am closing
 # this plotting window and again I select another roll number and do the 
 #same 2-3 times it gives the following error
 # mt_debug I am using because I thought that mttkinter will handle it but it's not true

Это ошибка:

 invalid command name "233512792_check_events"
 while executing
"233512792_check_events"
("after" script)
Exception in Tkinter callback
Tcl_AsyncDelete: async handler deleted by the wrong thread 

Пробовал много методов, теперь не знаю, как ее исправить.

1 Ответ

1 голос
/ 19 июня 2020

В вашем случае вы можете просто использовать Toplevel вместо Tk внутри функции Plottingandselect(), и никаких потоков не требуется:

def Plottingandselect(rollno):
    window = Toplevel()
    window.title("Marks Distribution")
    ...

...
root = Tk(mt_debug=1)  # are you using mtTkinter?
root.geometry('454x567')
B = Button(root, text='Plot window', command=lambda: Plottingandselect(parameter)) # 'parameter' is not defined in your original code
B.grid(row=1, column=2, padx=10, pady=10)
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...