所有。我正在编写一个简单的类似记事本的程序,它可以在按下转义键时保存文件并关闭程序。我之所以提到这一点,是因为在这种方法中程序会遇到问题。 textpad
是ScrolledText
个对象。
这一行:
`contents = self.textPad.get(self, 1.0, END)`
导致以下错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1535, in __call__
return self.func(*args)
File "todopad.py", line 24, in save_and_quit
contents = self.textPad.get(self, 1.0, END)
AttributeError: Event instance has no attribute 'textPad'
我知道这是问题所在,因为当该行被注释掉时,程序会执行并终止而不会出现问题。虽然我根本不理解这个错误。
这是一个非常冗长的问题:如何检索ScrolledText文本板的内容并将其保存到变量或直接将其写入文件?还有关于错误消息的解释?
提前谢谢。
编辑:根据要求,这是整个事情的代码。
import sys
import Tkinter
from Tkinter import *
from ScrolledText import *
root = Tkinter.Tk(className = "TodoPad");
textPad = ScrolledText(root, width = 80, height = 20)
def start_and_open():
textFile = open('/home/colin/documents/prog/py/todopad/todo', 'r')
contents = textFile.read()
textPad.insert('1.0', contents)
textFile.close()
def save_and_quit(self):
textFile = open('/home/colin/documents/prog/py/todopad/todo', 'w')
#contents = self.textPad.get(self, 1.0, END) # The line in question
#textFile.write(contents)
textFile.close()
root.destroy()
textPad.pack()
root.bind('<Escape>', save_and_quit)
root.after(1, start_and_open)
root.mainloop()
由于我发布了整件事,我可以解释一切背后的理由。它应该是一个快速的小东西,打开一个待办事项列表,并在文本框中显示列表中已有的内容。我做了我喜欢的任何编辑,然后它在关闭之前保存,当我遇到逃避时,问题在于它不会因为我之前在帖子中提到的那条线而关闭。
答案 0 :(得分:2)
首先,有关识别问题的荣誉。
要回答出现的问题:您需要将窗口小部件放入窗口框架中。您可以选择.grid()
和.pack()
。第一个允许您准确选择您要去的地方,第二个放入(技术上)默认位置。
现在,您的小部件实例未预设,因此您的程序无法从中提取值。你必须设置一个位置。我建议使用.grid()
,但示例.pack()
也适用。
textPad = ScrolledText(root, width = 80, height = 20)
textPad.pack()
试试这个,看看它是否有效。这应该解决它,但我可能是错的。
不要只做
textPad = ScrolledText(root, width = 80, height = 20).pack()
pack()
函数返回NULL并使窗口小部件无效。
最后,你为什么要使用自己?您没有使用任何类 - 您需要global
ize变量。抛出的错误是由于您的程序不知道从哪个类提取self
实例。从程序中删除self
变量,并将其放入函数中:
global textPad
这将使它成为global
,所有功能都可以使用它。
这应该可以解决您现在遇到的所有问题。但是,试一试并报告会发生什么。
以下是全局变量的一些资源,从小部件获取输入以及保存到文件;
http://www.python-course.eu/python3_global_vs_local_variables.php
http://effbot.org/tkinterbook/text.htm
http://www.afterhoursprogramming.com/tutorial/Python/Writing-to-Files/
快乐的编码,祝你好运!