Есть код(что ниже), он не работает по понятным причинам, так как вызываю:
Tkinter из другого потока, а можно только из главного (root = Tk())
В мак ос это работает и я не задумывался над этим, но после запуска этого же кода на виндовс получил массу проблем и эту в том числе.
Как можно переделать код, чтобы не было этой проблемы, без ущерба производительности?
Читал про похожую проблему уже на форуме, но там человек нашол решение ввиди Queue(очереди), но есть ли другие варианты? и мини вопрос, даже два: почему в мак ос проблем не получил? и все ли гуи так относятся к потокам?
class dowloads(): def toplevel(self): self.down = Toplevel() self.down.title(u"Загрузка") frames = self.down center_window(frames, 400, 170) def prog_start(self): self.progressVar = IntVar(self.down) self.progress = Progressbar(self.down, value = 100, length=345, variable = self.progressVar) self.progress.grid(row=2, column=3, pady = 4, sticky = 'w', padx=7, columnspan=1) #self.progress.start(5) #self.progress.step(20) def label1(self): self.l1 = Label(self.down) self.l1["fg"] = "red" self.l1["font"] = "Helvetica 12" self.l1.grid(row=2, column=4, sticky = 'ne', columnspan=1) l0 = Label(self.down) l0.grid(row=0, column=0, sticky = 'news', padx = 4, pady = 10, columnspan=10) self.l2 = Label(self.down) self.l2.grid(row=1, column=0, sticky = 'nw', padx = 4, pady = 0, columnspan=10) self.l3 = Label(self.down) self.l3.grid(row=3, column=0, sticky = 'sw', padx = 4, columnspan=10) self.l2["font"] = "Helvetica" self.l3["font"] = "Helvetica 12 italic" self.l2["text"] = u'Подготовка... ' self.l1["text"] = u' 0%' self.l2.config(width=40, justify='left', anchor='nw') self.l3.config(width=40, justify='left', anchor='sw') self.l1.config(width=5, justify='right', anchor='ne') self.b1 = Button(self.down) self.b1["text"] = u'Остановить загрузку' self.b1["command"] = restart_program self.b1.grid(row=4, column=0, pady=10, columnspan=20) self.b1.config(width=20) def state_norm(self, event): self.k1['state'] = 'normal' self.k2['state'] = 'normal' self.k3['state'] = 'normal' def __init__(self, OSS, k1, k2, k3): root.attributes("-topmost", False) self.k1 = k1 self.k2 = k2 self.k3 = k3 self.OSS = OSS self.toplevel() self.prog_start() self.label1() threading.Thread(target=dowloads, args=(self.OSS, self.hi_there, self.QUIT, self.settings)).start() #вызываю классв новом потоке и он зависает так как: #Нельзя вызывать методы Tkinter из других потоков, кроме как из главного (там где root = Tk())

не могли бы привести пример? желательно на моем примере…