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

2024-05-23 20:09:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写一个小程序,可以在文本文件中找到最长的句子。 我一直在读我的代码,但我不明白为什么它不工作。 程序正在使用Entry小部件。 基本上,search()函数处理一些异常(这部分正在工作),如果输入有效的文件名,它将跳转到while循环。 while循环读取每一行,并将最长的一行分配给longest。 一旦到达空行,elif语句就会执行(或者应该执行)。 它应该在Entry小部件中显示最长的句子。 问题是最后在entry小部件中什么都没有显示

我在Windows上使用python3

这是我的密码:

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

Tags: 程序searchlongest部件rddelete句子end
1条回答
网友
1楼 · 发布于 2024-05-23 20:09:26

问题是,用于关闭文件并显示最长行的代码从未执行:

    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)

相关问题 更多 >