Charles_God 2021-12-26 00:46 采纳率: 75%
浏览 1784
已结题

RuntimeError: main thread is not in main loop

在用python3.10的tkinter编程时发现这样一个错误:

Exception in thread Thread-7:
Traceback (most recent call last):
  File "C:\Users\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1009, in _bootstrap_inner
    self.run()
  File "C:\Users\AppData\Local\Programs\Python\Python310\lib\threading.py", line 1358, in run
    self.function(*self.args, **self.kwargs)
  File "D:\Python\English_Parser\main.py", line 42, in timing1
    self.ago1 = self.entry.get()
  File "C:\Users\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 3072, in get
    return self.tk.call(self._w, 'get')
RuntimeError: main thread is not in main loop

使用的时候并没有问题,只是在按关闭页面之后会报错

源码:

from tkinter import *
import parser
from time import sleep
import threading


class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master

        self.label1 = Label(text='请输入:')  # 设置初始界面
        self.label1.grid(column=0, row=0)
        self.entry = Entry()
        self.entry.grid(column=1, row=0)

        self.translator()

    def translator(self):  # 翻译
        def translate(word):
            tree = parser.get_data(word)  # 获取网页解析

            phonetic_symbol = StringVar()  # 音标
            phonetic_symbols = parser.get_phonetic_symbol(tree)
            phonetic_symbol.set('Br : ' + phonetic_symbols['Br'] + ' Am : ' + phonetic_symbols['Am'])
            Entry(textvariable=phonetic_symbol).grid(column=0, row=1, columnspan=2)

            meanings = StringVar()  # 释义
            meanings.set(parser.get_meanings(tree))
            text = Text(width=50, height=10)
            text.grid(column=2, row=0, columnspan=2, rowspan=2)
            text.delete(1.0, END)
            text.insert(1.0, meanings.get())

        def timing1():
            global timer
            self.ago1 = self.entry.get()
            if self.ago1 != self.ago2:
                translate(self.entry.get())
            timer = threading.Timer(1, timing2)
            timer.start()

        def timing2():
            global timer
            self.ago2 = self.entry.get()
            if self.ago1 != self.ago2:
                translate(self.entry.get())
            timer = threading.Timer(1, timing1)
            timer.start()

        self.ago1 = self.ago2 = str()
        timer = threading.Timer(1, timing1)  # 计时器
        timer.start()


if __name__ == '__main__':
    root = Tk()
    root.title('EnglishParser')
    root.geometry('800x400+400+200')
    app = Application(master=root)
    root.mainloop()

别的tkinter都没问题
就比如:

from tkinter import *

root = Tk()
root.mainloop()

正常关闭,没有报错,所以到底怎么回事呢

  • 写回答

1条回答 默认 最新

报告相同问题?

问题事件

  • 系统已结题 1月4日
  • 已采纳回答 12月27日
  • 创建了问题 12月26日

悬赏问题

  • ¥15 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥20 和学习数据的传参方式,选择正确的传参方式有关
  • ¥15 这是网络安全里面的poem code
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路