我在tkinter中为自己创建字典,当我添加else语句时(对于任何不在字典中的查询),它首先删除if语句(索引)。
我不确切知道为什么。 Entry(exe)在没有任何问题的情况下工作,而else和index也可以使用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.")
答案 0 :(得分:2)
您的第二个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.")
您的代码存在的问题是,如果条目文字是'索引'然后search_result
被设置为" alea jacta est",正如预期的那样,然后你的代码继续测试条目文本是否是' exe'它不是' ; t,因此search_result
设置为"条目不在数据库中。"。您可以通过在return
之后的行上添加self.search_result.set("alea jacta est")
语句来阻止第二次测试,但最好使用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
的方法更紧凑,更易于阅读和阅读。修改