Исключение: Сигнал работает только в основном потоке, python, tkinter

#python #multithreading #tkinter #signals

Вопрос:

Ну, я создаю приложение в tkinter, и для моего фонового процесса я использую потоки, чтобы мое приложение зависало во время выполнения фонового процесса.

Но я делаю для себя исключение. Линейный бот.login() создает исключение.

Ниже приведен код.

 from tkinter import * 

import threading 

from instabot import Bot


def login_thread():
    threading.Thread(target=login).start()

def login():
    # pb = progress_bar()
    # pb.start()
    username = username_variable.get()
    password = password_variable.get()

    try:
        canvas.delete('usernameTag')
        canvas.delete('passwordTag')
        canvas.delete('invalidLoginTag')
    except:
        pass

    cookie_del = glob.glob("config/*cookie.json")
    try:
        os.remove(cookie_del[0])
    except Exception:
        pass

    if username == '':
        username_error()
        # pb.stop()
        # pb.unpack()
        
    elif password == '':
        password_error()
        # pb.stop()
        # pb.unpack()
        
    else:
        try:
            print("hi")
            bot.login(username=username,password=password)
            print('hello')
            # pb.stop()
            # pb.unpack()
            unpack_login_panel()
            acc.pack(username)
        except Exception as e:
            print(e)
            invalid_login()
            # pb.stop()
            # pb.unpack()


b0 = Button(
    image = img0,
    borderwidth = 0,
    highlightthickness = 0,
    command = login_thread,
    relief = "flat")

b0.place(
    x = 760, y = 453,
    width = 550,
    height = 43)
 

Это дает мне исключение, что сигнал работает только в основном потоке. кстати, это всего лишь небольшая часть кода.
Кто-нибудь может мне в этом помочь?

Комментарии:

1. Как вы думаете, зачем вам здесь нужна нить? То, что ты пытаешься сделать, не сработает. Либо вы забываете о потоке и оставляете код в таком виде, либо перестраиваете его и просто выполняете рабочий поток, который досент мешает основному потоку. На этом сайте есть несколько вопросов, которые помогут вам разобраться в этой проблеме.

Ответ №1:

Просто отсутствует необязательный аргумент

бот.логин(is_threaded = True)