Сбой стандартного перенаправления Tkinter с KeyError: 'Нет' - PullRequest
0 голосов
/ 06 ноября 2018

У меня получилась странная проблема: иногда мое приложение tkinter аварийно завершало работу с KeyError: «None». Это очень нестабильно: (

Вот мой класс перенаправления, я только что следил за некоторыми другими из Интернета, у меня нет большого понимания об этом.

Этот код был вызван моим последовательным монитором, который в основном печатает полученные данные.

Файл "D: \ work \ tools \ eclipseWorkspace \ myDemo \ mySerialPort.py", строка 119, в readSerial
печать serBuffer
Файл "D: \ work \ tools \ eclipseWorkspace \ myDemo \ mySerialPort.py", строка 56, в записывать self.widget.winfo_toplevel (). Обновление ()

Файл "C: \ Python27 \ lib \ lib-tk \ Tkinter.py", строка 954, в winfo_toplevel 'winfo', 'toplevel', self._w)) Файл "C: \ Python27 \ lib \ lib-tk \ Tkinter.py", строка 1200,

в nametowidget w = w.children [n]

KeyError: 'Нет'

class Logger(object):
    def __init__(self, widget, tag="stdout"):
        self.widget = widget
        self.tag = tag
        self.file = open("message.log","w")

    def write(self, msg):
        if msg == None:
            return
        self.widget.configure(state="normal")
        self.widget.insert("end", msg, (self.tag,))
        self.widget.configure(state="disabled")
        self.widget.see(END)
        self.widget.winfo_toplevel().update()
        self.file.write(msg)

    def flush(self):
        self.file.flush()

1 Ответ

0 голосов
/ 07 ноября 2018

Я надеюсь, что кто-то сможет выяснить причину, в настоящее время мое решение, кроме KeyError, я также попытался с помощью совета Джейсона, поэтому мой текущий код выглядит следующим образом:

try:
    self.widget.update()
except KeyError:
    pass
...