Как правильно управлять потоками?

В программе идет основной поток, далее запускается дополнительный, в котором работает GUI. Мне требуется приостановить основной поток, для того чтобы управлять ходом событий из GUI, к примеру дать основной ветке выполнения пойти дальше. Часть кода для примера:

class LogOutput(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent, background="white")
        self.browser_var = BooleanVar()
        self.config_var = BooleanVar()
        self.browser_var.set(0)
        self.config_var.set(0)
        self.label = Label(self, text='unchanged text', background='gray44', foreground='black')
        self.browser_radio_console = Radiobutton(text='With terminal', variable=self.browser_var, value=0,
                                                 background='gray44', foreground='black')
        self.browser_radio_background = Radiobutton(text='In background', variable=self.browser_var, value=1,
                                                    background='gray44', foreground='black')
        self.button_browser = Button(self, text='Run browser', background='#555', foreground="#ccc",
                                     padx="20", pady="8", font="14", command=self.change_rb_1)

        self.config_radio_console = Radiobutton(text='With terminal', variable=self.config_var, value=0,
                                                background='gray44', foreground='black')
        self.config_radio_background = Radiobutton(text='In background', variable=self.config_var, value=1,
                                                   background='gray44', foreground='black')
        self.button_config = Button(self, text='Run config', background='#555', foreground="#ccc",
                                    padx="20", pady="8", font="14", command=self.change_rb_2)

        self.button_visual = Button(self, text='Run visual', background='#555', foreground="#ccc",
                                    padx="20", pady="8", font="14", command=start_visual)
        self.button_start = Button(self, text='Start learning', background='#555', foreground="#ccc",
                                   padx="20", pady="8", font="14")
        self.parent = parent
        self.init_ui()

    def init_ui(self):
        self.parent.title("Info")
        self.pack(fill=BOTH, expand=1)
        self.label.place(x=250, y=10)
        self.button_browser.place(x=25, y=90)
        self.browser_radio_console.place(x=35, y=135)
        self.browser_radio_background.place(x=35, y=155)
        self.button_config.place(x=235, y=90)
        self.config_radio_console.place(x=240, y=135)
        self.config_radio_background.place(x=240, y=155)
        self.button_visual.place(x=425, y=90)
        self.button_start.place(x=515, y=200)

    def change_label(self, root, app):
        self.label.config(text=game.get_info())
        root.after(100, app.change_label, root, app)

    def change_rb_1(self):
        if self.browser_var.get() == 0:
            self.label.config(text='with term')
            os.system(browser_term)
        elif self.browser_var.get() == 1:
            self.label.config(text='back')
            os.popen(browser)

    def change_rb_2(self):
        if self.config_var.get() == 0:
            self.label.config(text='with term')
            os.system(config_term)
        elif self.config_var.get() == 1:
            self.label.config(text='back')
            os.popen(config)


def start_visual():
    os.system(debug)



def run_gui():
    root = Tk()
    app = LogOutput(root)
    root.geometry("400x400+2700+500")
    app.change_label(root, app)
    root.mainloop()


def browser_button():
    time.sleep(1)
    os.popen(browser)


task = threading.Thread(target=run_gui)
task.start()  # тут идет ответвление доп потока под GUI

if __name__ == "__main__":  # Старт. Строки будут исполняться, только если скрипт запущен с этого файла
    local_dir = os.path.dirname(__file__)  # Возвращение локальной директории, в которой работает скрипт
    config_path = os.path.join(local_dir, "config-feedforward.txt")  # Получаем путь к конфигурационному файлу NEAT
    run(config_path)  # Старт основной части скрипта (ТРЕБУЕТСЯ РЕАЛИЗОВАТЬ ВОЗМОЖНОСТЬ ЗАПУСКА ЭТОЙ ФУНКЦИИ ИЗ GUI)
    config_path = resource.RLIMIT_STACK

Ответы (0 шт):