Tkinter GUI freezing, used Thread then encountered RuntimeError: threads can only be started once
MRAB
python at mrabarnett.plus.com
Tue Jan 10 13:32:32 EST 2023
On 2023-01-10 14:57, Abhay Singh wrote:
> Here is the entire code snippet of the same.
>
> Please help
>
> def change_flag(top_frame, bottom_frame, button1, button2, button3, button4, controller): global counter, canvas, my_image, chosen, flag, directory canvas.delete('all') button5['state'] = DISABLED counter += 1
>
> chosen, options_text = function_options()
> right_answer_flag = get_right_answer_flag(chosen, options_text)
> #pdb.set_trace()
>
> try:
> location = directory + chosen + format_image
> except:
> controller.show_frame(PlayAgainExit)
>
> my_image = PhotoImage(file=location)
> canvas.create_image(160, 100, anchor=CENTER, image=my_image)
>
> button1["text"] = options_text[0]
> button2["text"] = options_text[1]
> button3["text"] = options_text[2]
> button4["text"] = options_text[3]
>
> button1['state'] = NORMAL
> button2['state'] = NORMAL
> button3['state'] = NORMAL
> button4['state'] = NORMAL
> ##############
>
> button5 = Button(
> next_frame,
> width=20,
> text="next",
> fg="black",
> #command=lambda: change_flag(top_frame,bottom_frame,button1,button2,button3,button4,controller))
> command=Thread(target=change_flag, args =(top_frame,bottom_frame,button1,button2,button3,button4,controller)).start)
>
> button5.pack(side=RIGHT, padx=5, pady=5)
>
The formatting is messed up, which doesn't help.
Some points:
You have a 'bare' except, i.e. "except:". Don't do that. It swallows
_all_ exceptions and can hide bugs.
I don't like how you're passing Thread...start as an argument. IMHO, it
would be better/cleaner to pass a plain function, even if the only thing
that function does is to start the thread.
I can't tell what 'change_flag' is doing because of the formatting
issue. Is it doing GUI stuff? In a thread? If yes, don't do that. The
GUI doesn't like that. Only the main thread should do GUI stuff.
More information about the Python-list
mailing list