If 语句被 Tkinter 中的 else 语句删除
If statement deleted by else statement in Tkinter
我在 tkinter 中为自己创建字典,当我添加 else 语句(对于不在字典中的任何查询)时,它首先删除了 if 语句(索引)。
我不明白为什么。条目 (exe) 与 else 一起工作没有任何问题,索引与 else 删除一起工作。
def search_button(self, event=None):
if self.entry.get() == 'index':
self.search_result.set("alea jacta est")
if self.entry.get() == 'exe':
self.search_result.set("lorem ipsum")
else:
self.search_result.set("Entry not in database.")
你的第二个 if
应该是 elif
:
def search_button(self, event=None):
if self.entry.get() == 'index':
self.search_result.set("alea jacta est")
elif self.entry.get() == 'exe':
self.search_result.set("lorem ipsum")
else:
self.search_result.set("Entry not in database.")
您的代码的问题在于,如果条目文本是 'index',那么 search_result
会按预期设置为 "alea jacta est",但是您的代码会继续测试是否条目文本是 'exe',但事实并非如此,因此 search_result
设置为 "Entry not in database."。您 可以 通过在 self.search_result.set("alea jacta est")
之后的行上放置 return
语句来阻止第二次测试,但最好使用 elif
技术。
如果您有很多可能的输入文本要测试,使用字典会更有效,将输入文本作为键,将结果文本作为值。这是一种方法:
texts = {
"index": "alea jacta est",
"exe": "lorem ipsum"
}
def search_button(self, event=None):
result_text = texts.get(self.entry.get(), "Entry not in database.")
self.search_result.set(result_text)
字典技术更有效,因为字典查找速度快,并且相对独立于字典中的项目数。
相比之下,if... elif...elif...
技术是对所有可能的字符串进行线性搜索,直到找到匹配项,如果要检查的项目很多,这会变得非常慢,尽管没关系如果只有少量项目需要检查。 OTOH,我发现基于 dict
的方法更紧凑,更易于阅读和修改。
我在 tkinter 中为自己创建字典,当我添加 else 语句(对于不在字典中的任何查询)时,它首先删除了 if 语句(索引)。
我不明白为什么。条目 (exe) 与 else 一起工作没有任何问题,索引与 else 删除一起工作。
def search_button(self, event=None):
if self.entry.get() == 'index':
self.search_result.set("alea jacta est")
if self.entry.get() == 'exe':
self.search_result.set("lorem ipsum")
else:
self.search_result.set("Entry not in database.")
你的第二个 if
应该是 elif
:
def search_button(self, event=None):
if self.entry.get() == 'index':
self.search_result.set("alea jacta est")
elif self.entry.get() == 'exe':
self.search_result.set("lorem ipsum")
else:
self.search_result.set("Entry not in database.")
您的代码的问题在于,如果条目文本是 'index',那么 search_result
会按预期设置为 "alea jacta est",但是您的代码会继续测试是否条目文本是 'exe',但事实并非如此,因此 search_result
设置为 "Entry not in database."。您 可以 通过在 self.search_result.set("alea jacta est")
之后的行上放置 return
语句来阻止第二次测试,但最好使用 elif
技术。
如果您有很多可能的输入文本要测试,使用字典会更有效,将输入文本作为键,将结果文本作为值。这是一种方法:
texts = {
"index": "alea jacta est",
"exe": "lorem ipsum"
}
def search_button(self, event=None):
result_text = texts.get(self.entry.get(), "Entry not in database.")
self.search_result.set(result_text)
字典技术更有效,因为字典查找速度快,并且相对独立于字典中的项目数。
相比之下,if... elif...elif...
技术是对所有可能的字符串进行线性搜索,直到找到匹配项,如果要检查的项目很多,这会变得非常慢,尽管没关系如果只有少量项目需要检查。 OTOH,我发现基于 dict
的方法更紧凑,更易于阅读和修改。