如何检查只有一条语句等于0?

时间:2018-09-30 08:10:56

标签: python if-statement tkinter

在查找匹配的if语句来检查是否只有一项等于3的0时,我遇到了一些麻烦。 这是代码:

def thanx(self):
    if len(self.e.get()) == 0:
        messagebox.showerror("Error", "Please enter affordable infos")
        self.boo = False
    else:
        messagebox.showinfo("Submition done", "Thank you")
        self.boo = True

这只是检查我的变量e是否等于0,但实际上我还有2个条目。我知道我可以单独检查每一个,但是必须有一种更简单的方法来执行此操作。 我正在使用“ tkinter”顺便说一句,但这不应该太重要。

我用or进行了尝试,但这不起作用,或者我做错了。 (也尝试使用lambda解决此问题,但同样只是错误...)

也许有人可以帮助我...

编辑: 我可能已经对此进行了解释,我将在此处添加其余代码,以便您更好地理解这一点:

from tkinter import Tk, Label, Entry, Button, W
from tkinter import messagebox

class MyForm:
    def thanx(self):
        if len(self.e.get()) == 0:
            messagebox.showerror("Error", "Please enter affordable infos")
            self.boo = False
        else:
            messagebox.showinfo("Submition done", "Thank you")
            self.boo = True
    def callback(self):
       #print("Name: %s\nPassword: %s\nEmail: %s" % (self.e.get(), self.e2.get(),self.e3.get()))
       if self.boo:
            f = open("PrivatData.txt", "w+")
            f.write("Name: %s\nPassword: %s\nEmail: %s" % (self.e.get(), self.e2.get(),self.e3.get()))
    def __init__(self):
            self.root = Tk()
            self.root.title("Your privat details")
            Label(self.root, text="Your Name").grid(row = 0, padx = 12, pady=5)
            Label(self.root, text="Password").grid(row=1, padx=12, pady=5)
            Label(self.root, text="Email").grid(row=2, padx=12, pady=5)
            self.e = Entry(self.root)
            self.e2 = Entry(self.root)
            self.e3= Entry(self.root)
            self.e.grid(row=0,column=1,columnspan=2)
            self.e2.grid(row=1, column=1, columnspan=2)
            self.e3.grid(row=2, column=1, columnspan=2)
            self.e.focus_set()
            self.show= Button(self.root, text="Submit", command=lambda:[self.thanx(),self.callback()])
            self.quit = Button(self.root,text="Quit", command = self.root.quit)
            self.show.grid(row=3, column=1, pady=4)
            self.quit.grid(row=3, column=2, sticky = W, pady=4)
            self.root.geometry("230x140")
            self.root.configure(background= "#65499c")
            self.root.mainloop()
if __name__ == "__main__":
    app= MyForm()

4 个答案:

答案 0 :(得分:0)

使用any

if any((len(self.e.get().strip())==0,len(self.e2.get().strip())==0,len(self.e2.get().strip())==0)):
    do stuff to say that user did not input all fields
else:
    do stuff to say that user inputted all fields

完整的代码:

from tkinter import Tk, Label, Entry, Button, W
from tkinter import messagebox

class MyForm:
    def thanx(self):
        if any((len(self.e.get().strip())==0,len(self.e2.get().strip())==0,len(self.e2.get().strip())==0)):
            messagebox.showerror("Error", "Please enter affordable infos")
            self.boo = False
        else:
            messagebox.showinfo("Submition done", "Thank you")
            self.boo = True
    def callback(self):
       #print("Name: %s\nPassword: %s\nEmail: %s" % (self.e.get(), self.e2.get(),self.e3.get()))
       if self.boo:
            f = open("PrivatData.txt", "w+")
            f.write("Name: %s\nPassword: %s\nEmail: %s" % (self.e.get(), self.e2.get(),self.e3.get()))
    def __init__(self):
            self.root = Tk()
            self.root.title("Your privat details")
            Label(self.root, text="Your Name").grid(row = 0, padx = 12, pady=5)
            Label(self.root, text="Password").grid(row=1, padx=12, pady=5)
            Label(self.root, text="Email").grid(row=2, padx=12, pady=5)
            self.e = Entry(self.root)
            self.e2 = Entry(self.root)
            self.e3= Entry(self.root)
            self.e.grid(row=0,column=1,columnspan=2)
            self.e2.grid(row=1, column=1, columnspan=2)
            self.e3.grid(row=2, column=1, columnspan=2)
            self.e.focus_set()
            self.show= Button(self.root, text="Submit", command=lambda:[self.thanx(),self.callback()])
            self.quit = Button(self.root,text="Quit", command = self.root.quit)
            self.show.grid(row=3, column=1, pady=4)
            self.quit.grid(row=3, column=2, sticky = W, pady=4)
            self.root.geometry("230x140")
            self.root.configure(background= "#65499c")
            self.root.mainloop()
if __name__ == "__main__":
    app= MyForm()

答案 1 :(得分:0)

我假设目前正在检查某个字符串元素是否等于0。 例如

e = 'abc'
len(e) == 3 # True
l = []
len(l) == 0 # True

如果要检查字符串变量是否为0,则只需:

if not self.e.get():
    messagebox.showerror("Error")
    self.boo = False

答案 2 :(得分:0)

您可以尝试以下方法:

if len(self.e.get()) == 0 or len(self.e2.get()) == 0 or len(self.e3.get()) == 0:
    messagebox.showerror("Error", "Please enter affordable infos")
    self.boo = False
else:
    messagebox.showinfo("Submition done", "Thank you")
    self.boo = True

由于您有3个变量,因此无法“批量”检查所有变量,除非您构建了一个包含它们的数据结构,然后检查该数据结构的某些条件。但是,它没有任何优势。如果您添加一个新变量,例如e4,则仍然必须手动将其添加到数据结构中。

答案 3 :(得分:0)

要确保在一个if语句中所有三个文本框都不为空,可以使用以下命令:

if "" in [self.e.get().strip(), self.e2.get().strip(), self.e3.get().strip()]:
    messagebox.showerror("Error", "Please enter affordable infos")
    self.boo = False
else:
    messagebox.showinfo("Submition done", "Thank you")
    self.boo = True

这是一种简短而整洁的方式来编写您要执行的操作。之所以可行,是因为entry小部件如果为空,则将返回"",而self.e.get().strip()则使返回的文本为空(.strip()删除了开始和结束处的所有空格。字符串)(如果只是空格(" "\tn等)。

最好检查字符串的内容而不是字符串的长度,因为其中仅包含空格的框将返回0,如下所示。

>>> len(" ")
1
>>> len("")
0
>>> len("\t")
1