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

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日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来