【问题标题】:How can I kill a thread with python我怎样才能用python杀死一个线程
【发布时间】:2021-03-04 17:13:32
【问题描述】:

我正在使用 GUI (Tkinter) 制作一个随机数猜谜游戏,这出现了 RuntimeError: threads can only be started once。我试图杀死线程,但我找不到任何方法。代码如下:

def main(c):
    global max_num, number, guess_num, enter, l1, t1

    if c <= 5:
        messagebox.showerror(title='Import error', message='Please add a bigger number than 5')
        max_num.delete(0, END)
    else:
        number = random.randrange(1, c+1)
        print(number)

        t1 = threading.Thread(target=lambda: process(int(guess_num.get())))
        l1 = Label(root, text='Whats the number?')
        guess_num = Entry(root, bd=3)
        enter = Button(root, text='Enter', command=t1.start)

        l1.grid(row=2)
        guess_num.grid(row=3)
        enter.grid(row=3, column=1)

def process(answer):
        global number

        if number == answer:
            result = Label(root, text='Correct Answer!')

            result.grid(row=4)
            guess_num.destroy()
            enter.destroy()
            l1.destroy()

        else:
            if answer > number:
                wrong_result = Label(root, text='Wrong Answer! Your answer is bigger than the random number', fg='red')

            elif answer < number:
                wrong_result = Label(root, text='Wrong Answer! Your answer is smaller than the random number', fg='red')

            wrong_result.grid(row=4)
            time.sleep(3)
            wrong_result.destroy()


在第一个函数 (main) 中我调用线程,在第二个函数 (process) 中我想杀死 Thread

【问题讨论】:

    标签: python multithreading user-interface tkinter


    【解决方案1】:

    该错误试图告诉您传递command=t1.start 将导致每次按下按钮时在相同 t1 实例上调用start()。在 Python 中,您不能在同一个线程实例上多次调用 thread.start()。更改以下行:

            ...
            print(number)
    
            t1 = threading.Thread(target=lambda: process(int(guess_num.get())))
            l1 = Label(root, text='Whats the number?')
            guess_num = Entry(root, bd=3)
            enter = Button(root, text='Enter', command=t1.start)
            ...
    

            ...
            print(number)
    
            def process_in_thread():
                t1 = threading.Thread(target=lambda: process(int(guess_num.get())))
                t1.start()
    
            l1 = Label(root, text='Whats the number?')
            guess_num = Entry(root, bd=3)
            enter = Button(root, text='Enter', command=process_in_thread)
            ...
    
    

    【讨论】:

      猜你喜欢
      • 2011-08-20
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多