Python 按钮激活时,Tkinter else子句在if语句之前执行
我试图使delFile方法能够根据GUI中输入的内容从目录中删除文本文件。但是,当我按下按钮时,它只输出else子句messageboxPython 按钮激活时,Tkinter else子句在if语句之前执行,python,if-statement,tkinter,Python,If Statement,Tkinter,我试图使delFile方法能够根据GUI中输入的内容从目录中删除文本文件。但是,当我按下按钮时,它只输出else子句messagebox delFile是一个名为quizEdit的类的方法。问题是,在创建条目小部件大约一毫秒后,甚至在用户看到条目小部件之前,您正在调用.get() 根据经验,GUI函数需要在需要时请求数据。在你的例子中,我会做一个专门为获取值而设计的回调,然后调用你的函数 def delFile(self, num): if os.path.exists("quiz"+s
delFile是一个名为quizEdit的类的方法。问题是,在创建条目小部件大约一毫秒后,甚至在用户看到条目小部件之前,您正在调用
.get()
根据经验,GUI函数需要在需要时请求数据。在你的例子中,我会做一个专门为获取值而设计的回调,然后调用你的函数
def delFile(self, num):
if os.path.exists("quiz"+str(num)+".txt"):
os.remove("quiz"+str(num)+".txt")
tkinter.messagebox.showinfo("Removed!", "Quiz successfully Removed!")
else:
tkinter.messagebox.showinfo("Error!", "Quiz file not found!")
if os.path.exists("answer"+(num)+".txt"):
os.remove("answer"+(num)+".txt")
tkinter.messagebox.showinfo("Removed!", "Answers successfully Removed!")
else:
tkinter.messagebox.showinfo("Error!", "Answer file not found!")
delete = quizEdit("a")
root = Tk()
root.geometry("450x320")
root.title("Remove a text file")
label1 = Label(root, text = "What to remove?")
label1.place(x=70, y = 140)
entry1 = Entry(root)
entry1.place(x = 180, y = 140)
et = entry1.get()
button1 = Button(root, text = "Remove", command=lambda : delete.delFile(et))
button1.place(x=210, y=200)
root.mainloop()
这不是唯一的解决方案,但对我来说是最干净的。您可以将命令设置为调用
get()
的lambda
,但我发现这种模式更难理解,也更难调试。另一个选项是在delFile
内部调用get()
,但它将UI与quizEdit
对象紧密耦合,这可能是可取的,也可能是不可取的 在创建条目大约一毫秒后,您正在调用get()
方法。用户将没有机会输入任何数据。首先,您必须理解@BryanOakley好的,我通过简单地将get()方法作为参数而不是使用变量来修复它。谢谢。
...
def do_delete():
num = entry1.get()
delete.delFile(num)
...
button1 = Button(root, text = "Remove", command=do_delete)
...