<p>一旦您知道了<a href="http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/text-index.html" rel="nofollow">Widget indices</a>的工作原理,并且知道了<code>insert</code>和{<cd2>}<a href="http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/text-methods.html" rel="nofollow">methods on the ^{<cd3>} widget</a>:</p>
<pre><code>starting_text = "THIS WOULD COME FROM A FILE"
...
textbox = TEXT_WIDGET_SETUP_ALREADY
textbox.insert("1.0",starting_text)
...
ending_text = textbox.get("1.0","end-1c")
</code></pre>
<p>棘手的部分是在程序关闭时访问文本,而不是在小部件被销毁之后(或者您得到一个<code>_tkinter.TclError: invalid command name ".4384096888"</code>错误):</p>
^{pr2}$
<p>虽然如果使用<code>from tkinter import *</code>表示法,则需要将类称为<code>Text</code>之外的名称,也可能不使用<code>ending_text</code>作为全局变量,但这是演示如何操作的最简单方法。在</p>
<hr/>
<p>这是我用来测试IO的完整代码,不过如果您不了解如何处理已经存在的文件,<a href="https://docs.python.org/2/tutorial/inputoutput.html" rel="nofollow">references elsewhere</a>。在</p>
<pre><code>import tkinter as tk
filename = "test.txt"
class Text(tk.Text):
def destroy(self):
global ending_text
ending_text = self.get("1.0","end-1c")
super(Text,self).destroy()
try:
with open(filename) as f:
text = f.read()
except IOError:
text = ""
root = tk.Tk()
textbox = Text(root)
textbox.insert("1.0",text)
textbox.grid()
#this would probably just be put in the destroy method
def finish(event=None):
with open(filename,"w") as f:
f.write(ending_text)
textbox.bind("<Destroy>",finish) #this will happen after Text.destroy() so textbox.get() fails if used from this point
root.mainloop()
</code></pre>