Tkinter:抓取ScrolledText文本板的内容

时间:2015-10-20 21:24:31

标签: python tkinter

所有。我正在编写一个简单的类似记事本的程序,它可以在按下转义键时保存文件并关闭程序。我之所以提到这一点,是因为在这种方法中程序会遇到问题。 textpadScrolledText个对象。

这一行:

`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()

由于我发布了整件事,我可以解释一切背后的理由。它应该是一个快速的小东西,打开一个待办事项列表,并在文本框中显示列表中已有的内容。我做了我喜欢的任何编辑,然后它在关闭之前保存,当我遇到逃避时,问题在于它不会因为我之前在帖子中提到的那条线而关闭。

1 个答案:

答案 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/

快乐的编码,祝你好运!