条目小部件不返回预期的字符串

时间:2013-09-10 13:06:06

标签: python tkinter tkinter-entry

我正在编写一个小程序,它应该在文本文件中找到最长的句子。 我继续阅读我的代码,但我不明白为什么它不起作用。 该程序正在使用Entry小部件。 基本上search()函数处理一些例外(这部分工作),如果输入有效的文件名,它会跳转到while循环。 while循环读取每一行并指定最长的longest。 一旦到达空行,就会执行(或应该)elif语句。 它应该显示Entry小部件中最长的句子。 问题是最终在条目小部件中出现的问题。

我在Windows上使用Python 3.

这是我的代码:

from tkinter import *

def search(event):
    try:
        txtFile = open(str(entr.get()), 'r')
    except:
        entr.delete(0, END)
        entr.insert(0, "File can't be found")
    else:
        x = 0
        while 1:
            rd = txtFile.readline()
            if len(rd)> x:
                longest = rd
                x = len(rd)
            elif rd == '':
                break
                txtFile.close()
                entr.delete(0, END)
                entr.insert(0, longest)

#####MAIN#####

wd = Tk()
wd.title('Longest sentence searcher')
entr = Entry(wd, bg='White')
entr.grid(row=0, column=0)
entr.bind('<Return>', search)
bttn = Button(wd, text='Search', bg='Light Green')
bttn.grid(row=1, column =0)
bttn.bind('<Button-1>', search)

wd.mainloop()

1 个答案:

答案 0 :(得分:1)

问题是您的代码是用于关闭文件和显示最长行的代码:

    while 1:
        rd = txtFile.readline()
        if len(rd)> x:
            longest = rd
            x = len(rd)
        elif rd == '':
            break
            txtFile.close()
            entr.delete(0, END)
            entr.insert(0, longest)

break突破了while循环,并且由于没有更多的代码,Python从函数返回。将最后三行移出while - 循环,你应该是好的:

    # Using 'True' for infinite loops is more idiomatic/pythonic
    while True:
        rd = txtFile.readline()
        if len(rd) > x:
            longest = rd
            x = len(rd)
        elif rd == '':
            break
    txtFile.close()
    entr.delete(0, END)
    entr.insert(0, longest)