实时更新Python tkinter标签

时间:2018-01-20 00:01:58

标签: python tkinter

我想在循环开始后在python 中更新我的标签。 可悲的是我收到了错误

File "mygui.py", line 19, in <module>
GUI.user_said("General Kenobi")
File "mygui.py", line 16, in user_said
self.my_label['text'] = self.label_text
File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1486, in __setitem__
self.configure({key: value})
File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1479, in configure
return self._configure('configure', cnf, kw)
File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1470, in _configure
self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: invalid command name ".!label"

对我来说根本没有帮助...... 我的代码:

from tkinter import *

class MyGUI:
"""A simple class"""

def __init__(self):
    self.__main_window = Tk()
    self.label_text = "Hello There"
    self.my_label = Label(self.__main_window, text=self.label_text)
    self.my_label.pack()
    self.__main_window.mainloop()

def user_said(self, users_request):
    """Returns what the user says"""
    self.label_text = "You said:\n{}\n\n".format(users_request)
    self.my_label.config(text=self.label_text)

GUI = MyGUI()
GUI.user_said("General Kenobi")

如果有人帮我找到解决问题的方法,我很高兴。

1 个答案:

答案 0 :(得分:0)

因为MyGUI.__init__调用self.__main_window.mainloop(),所以在主窗口被销毁之前它不会返回。因此,当您调用GUI.user_said("General Kenobi")时,不再存在任何小部件。