类中的Python回调?

时间:2014-04-24 07:48:37

标签: python class tkinter

我在Github中找到了代码文本摘要,我将更改此程序成为Tkinter程序。我有问题什么时候会使用Button小部件在类中获取值并在Text小部件中显示结果。如何在此代码中获取方法值的总结使用Tkinter按钮?我通常只使用函数或过程没有类和方法。这个代码已经在intrepreter中运行。

import nltk
from nltk.tokenize import sent_tokenize
from nltk.tokenize import word_tokenize
from nltk.probability import FreqDist 
from nltk.corpus import stopwords


class NaiveSummarizer:


    def summarize(self, input, num_sentences ):

        punt_list=['.',',','!','?']
        summ_sentences = []

        sentences = sent_tokenize(input)
        lowercase_sentences =[sentence.lower() 
            for sentence in sentences]
        #print lowercase_sentences

        s=list(input)
        ts=''.join([ o for o in s if not o in  punt_list ]).split()
        lowercase_words=[word.lower() for word in ts]
        words = [word for word in lowercase_words if word not in stopwords.words()]
        word_frequencies = FreqDist(words)

        most_frequent_words = [pair[0] for pair in 
            word_frequencies.items()[:100]]


                # add sentences with the most frequent words
        for word in most_frequent_words:
            for i in range(0, len(lowercase_sentences)):
                                if len(summ_sentences) < num_sentences:
                                        if (lowercase_sentences[i] not in summ_sentences and word in lowercase_sentences[i]):
                                                summ_sentences.append(sentences[i])
                                                break


        # reorder the selected sentences
        summ_sentences.sort( lambda s1, s2: input.find(s1) - input.find(s2) )
        return " ".join(summ_sentences)


if __name__ == "__main__":

    naivesum = NaiveSummarizer()
    text='''
    To see a world in a grain of sand,
    And a heaven in a wild flower,
    Hold infinity in the palm of your hand,
    And eternity in an hour.

    A robin redbreast in a cage
    Puts all heaven in a rage.

    A dove-house fill'd with doves and pigeons
    Shudders hell thro' all its regions.
    '''
text2 = '''
         You conclude with the aphorism of Hippocrates, "Qui gravi morbo correpti dolores non sentiunt, us mens aegro­tat" (Those who do not perceive that they are wasted by seri­ous illness are sick in mind), and suggest that I am in need of medicine not only to conquer my malady, but even more, to sharpen my senses for the condition of my inner self. I would fain give you an answer such as you deserve, fain reveal myself to you entirely, but I do not know how to set about it. Hardly do I know whether I am still the same person to whom your precious letter is addressed. 
'''
print(naivesum.summarize(text2,3))
print(naivesum.summarize(text,2))

1 个答案:

答案 0 :(得分:1)

您不能直接使用summarize功能作为按钮的回调;相反,你应该将它包装到另一个调用summarize的函数中,然后在Entry小部件中显示结果。

首先,您必须向窗口小部件添加text variable,以便您可以读取和写入文本,如下所示:

self.outputvar = StringVar()
Entry(self, textvariable=self.outputvar)

现在,您可以在按钮中添加callback功能,例如your other question,执行此操作:

def callback(self):
    text = "lorem ipsum" # get actual input text, maybe from another widget
    num = 3              # get proper value for whatever this is for
    result = self.summarize(text, num) # call summarize
    self.outputvar.set(result)         # show results in your widget

或者,您可以使用Text小部件;在这里,inserting text的处理方式不同。