【问题标题】:Exception: Signal only works in main thread, python, tkinter例外:信号仅适用于主线程、python、tkinter
【发布时间】:2021-09-14 20:58:46
【问题描述】:

好吧,我在 tkinter 中创建应用程序,而我的后台进程使用线程,所以我的应用程序在执行后台进程时被冻结。

但是,我给了我一个例外。 bot.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)

这给了我一个例外,即信号仅在主线程中有效。顺便说一句,这只是代码的一小部分。 任何人都可以帮助我吗?

【问题讨论】:

  • 你为什么认为你需要一个线程?你试图做的事情不会奏效。要么忘记线程并留下这样的代码,要么重新排列它并只做一个不会干扰主线程的工作线程。这个网站上有几个问题可以帮助你理解这个问题。

标签: python multithreading tkinter signals


【解决方案1】:

只是缺少一个可选参数

bot.login(is_threaded = True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2014-11-12
    • 1970-01-01
    相关资源
    最近更新 更多