Tkinter文本文件搜索功能失效求助:输入后输出全文件内容
Tkinter文本搜索程序异常:输入任意内容返回全部文本
问题详情
我正在编写一个基于GUI的Python文本文件搜索程序,原本在CLI中正常运行的搜索函数,结合Tkinter使用时出现异常:通过Entry组件获取输入后,无论输入什么内容,搜索函数都会输出文本文件的全部内容。怀疑问题出在if msg.get() in line这一行,相关代码如下:
搜索函数代码
def search(): with open(r"loglar.txt", 'r') as fp: for l_no, line in enumerate(fp): lineNum = l_no + 1 # search string if msg.get() in line: lineNumber = ('Line Number:', lineNum) lineWord = ('Line:', line) print(lineNumber) print(lineWord)
Tkinter的getInfo函数代码
def getInfo(): msg = entry.get() print(type(msg)) print(msg) search()
问题原因与解决方案
核心问题
search()函数中调用的msg.get()和getInfo()里的局部变量msg不是同一个对象。如果search()里的msg未绑定到Entry组件,或者其值为空字符串,那么"" in line的判断永远为True,导致所有行都被输出。另外,getInfo()存在缩进错误,这也可能引发隐性问题。
修正代码
将用户输入的搜索关键词作为参数传递给search()函数,彻底避免作用域混淆:
def search(keyword): with open(r"loglar.txt", 'r') as fp: for l_no, line in enumerate(fp): lineNum = l_no + 1 if keyword in line: print(('Line Number:', lineNum)) print(('Line:', line)) def getInfo(): msg = entry.get() print(type(msg)) print(msg) search(msg) # 将获取到的输入传入search函数
额外建议
迁移CLI功能到GUI时,尽量通过参数传递数据,减少全局变量或跨函数组件引用的依赖,避免因作用域问题引发类似异常。
内容的提问来源于stack exchange,提问作者Lordke
相关产品推荐
相关产品推荐

