【发布时间】:2018-08-29 19:45:08
【问题描述】:
我创建了一个循环来搜索 CSV 文件并返回带有指定关键字的行。当 else 函数退出时,循环工作正常。
import csv
from tkinter import *
import tkinter.messagebox as box
master = Tk()
label1 = Label(master, text = 'User_ID', relief = 'groove', width = 40)
label2 = Label(master, text = 'User_Info', relief = 'groove', width = 40, height = 5)
e1 = Entry(master, relief = 'groove', width = 40)
e2 = Text(master, relief = 'groove', width = 40, height = 5, borderwidth = 2)
def enter():
csvfile = open('stack_example.csv', 'r')
read = csv.reader(csvfile)
for row in read:
if str(e1.get()) in row:
e2.insert("1.0", row, 'r')
#break
#else:
#box.showinfo('Search Result','Not Found')
#master.mainloop()
button3 = Button(master, text = 'Retrieve File', relief = 'groove', width = 25, command=enter)
label1.grid( row = 1, column = 1, padx = 10 )
label2.grid( row = 2, column = 1, padx = 10 )
e1.grid( row = 1, column = 2, padx = 10 )
e2.grid( row = 2, column = 2, padx = 10 )
button3.grid( row = 3, column = 1, columnspan = 2)
但是,当 else 函数是代码的一部分时,循环会直接跳到 else 命令并忽略 if 命令。上面产生的输出是将带有关键字的行从 csv 文件插入到文本小部件。但是,下面的输出是一个显示框。 (使用相同的入口关键字,即在csv文件中)
import csv
from tkinter import *
import tkinter.messagebox as box
master = Tk()
label1 = Label(master, text = 'User_ID', relief = 'groove', width = 40)
label2 = Label(master, text = 'User_Info', relief = 'groove', width = 40, height = 5)
e1 = Entry(master, relief = 'groove', width = 40)
e2 = Text(master, relief = 'groove', width = 40, height = 5, borderwidth = 2)
def enter():
csvfile = open('stack_example.csv', 'r')
read = csv.reader(csvfile)
for row in read:
if str(e1.get()) in row:
e2.insert("1.0", row, 'r')
#break
else:
box.showinfo('Search Result','Not Found')
master.mainloop()
button3 = Button(master, text = 'Retrieve File', relief = 'groove', width = 25, command=enter)
label1.grid( row = 1, column = 1, padx = 10 )
label2.grid( row = 2, column = 1, padx = 10 )
e1.grid( row = 1, column = 2, padx = 10 )
e2.grid( row = 2, column = 2, padx = 10 )
button3.grid( row = 3, column = 1, columnspan = 2)
我的理解是,只有当 if 语句为 false 时 else 命令才会执行。但是,else 语句似乎用此代码覆盖了 if 语句。我不确定如何编写一个可以运行的循环:
- 如果关键字在 csvfile 中
- 然后将带有关键字的行插入到空白小部件中
- 如果关键字不在 csvfile 中
- 然后会显示一个带有“未找到”文本的框
【问题讨论】: