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 的方法更紧凑,更易于阅读和修改。