如果语句被Tkinter中的else语句删除

时间:2015-03-28 10:08:14

标签: python python-3.x tkinter

我在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.")

1 个答案:

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