Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 插入文本后,文本小部件何时更新_Python_Python 3.x_Tkinter - Fatal编程技术网

Python 插入文本后,文本小部件何时更新

Python 插入文本后,文本小部件何时更新,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我创建了一个简单的GUI,其中包含一个按钮和一个文本小部件(TextArea)。我的业务是当我点击按钮时,文本小部件将插入一些文本 在我附加的图像中,GUI出现后,我单击按钮,我在第9行的断点处,我期望文本小部件有两行:text1,text2 但是,在函数回调完成之前,不会显示任何内容 从tkinter导入* master=Tk() def回调(文本:文本): text.delete('1.0',结束) text.insert(结束“text1\r\n”) text.insert(结束'tex

我创建了一个简单的GUI,其中包含一个按钮和一个文本小部件(TextArea)。我的业务是当我点击按钮时,文本小部件将插入一些文本

在我附加的图像中,GUI出现后,我单击按钮,我在第9行的断点处,我期望文本小部件有两行:text1,text2

但是,在函数回调完成之前,不会显示任何内容

从tkinter导入*
master=Tk()
def回调(文本:文本):
text.delete('1.0',结束)
text.insert(结束“text1\r\n”)
text.insert(结束'text2\r\n')
text.insert(结束'text3\r\n')
text.insert(结束“text4\r\n”)
text.insert(结束'text5\r\n')
text.insert(结束“text6\r\n”)
text.insert(结束“text7\r\n”)
Text小部件=文本(主)
textwidget.pack()
b=按钮(master,text=“OK”,command=lambda:callback(textwidget))
b、 包()
mainloop()
我的问题是如何在执行textwidget的insert方法后立即强制gui更新

更新

感谢@Saad推荐,我更新了代码(在第9行插入text.update()),我可以在文本小部件中看到文本

def回调(文本:文本): text.delete('1.0',结束) text.insert(结束“text1\r\n”) text.insert(结束'text2\r\n') text.update() text.insert(结束'text3\r\n') text.insert(结束“text4\r\n”) text.insert(结束'text5\r\n') text.insert(结束“text6\r\n”) text.insert(结束“text7\r\n”)
好的,现在我知道问题的确切原因了。正如我在图中看到的,您已经在代码的第9行设置了一个断点。这样做的目的是在断点处暂停编译,以便我们可以测试不同的东西,比如错误,但是这个特性对于GUI来说并不健康,至少在我所看到的情况下是这样的。因此,只需删除空闲中的红色断点即可解决问题

这样就不必使用
text.update()


我在文本小部件中插入了一些文本,但在mainloop()执行之前,文本不会立即显示。窗口甚至不能在
mainloop
之前正确显示,那么你怎么能看到文本呢,基于你的帖子,我有点困惑。如果您没有在主代码中使用
update()
update\u idletasks()
。很抱歉,我的问题让您感到困惑。我的意思是,在UI出现之后,我点击了按钮。根据您的建议,我必须调用update()方法来显示我期望的文本。如果这是正确的代码,就不应该发生这种情况。或者您想不按按钮就显示文本?在我问题中的代码处,当我单击按钮时,我可以看到文本显示在textwidget中,但当我在text.insert(END,'text3\r\n')行调试时,正如我提到的,textwidget是空的。因此,我在text.insert(END,'text2\r\n')之后更新add text.update()。当我在text.insert(END,'text3\r\n')行创建断点时,我可以看到文本。无论如何,非常感谢。请提供未更新的代码。您可以通过编辑post向post添加信息。我只想了解文本小部件在执行insert命令后如何更新GUI。例如,当我第二次单击第9行的断点时,文本小部件仍然有7行文本,因为文本小部件GUI在执行命令text.delete('1.0',END)后没有更新。无论如何,谢谢你的回答。我明白了,如果你想在
文本
小部件中看到东西是如何更新的,那就做一件事,然后尝试
after()
,稍微延迟一下,你会注意到并且可以看到一行一行地添加,这也取决于你放置的延迟时间,我认为是400-600毫秒(0.4-0.6秒)应该注意到差异。如果您不知道如何使用
after()
这里是。如果这能帮助你考虑接受答案。