如果条目为空则显示 MessageBox
Show MessageBox if Entry empty
有人能告诉我我做错了什么吗?!我正在尝试在 Python 3 中使用 tkinter 创建 GUI。如果用户单击按钮,同时条目为空,我想显示 messageBox。 在我的代码下方我用过。
正确知道我有这个错误:
if len(self.entryBox.get()) == 0:
AttributeError: 'NoneType' object has no attribute 'get'
我也尝试使用它 if self.entryBox is None:
但在那种情况下,我在 运行 项目之后立即看到 messageBox 现在是正确的。我真的很困惑。
代码:
from tkinter import *
class Application(Frame):
def __init__(self, master):
super(Application, self).__init__(master)
self.grid()
self.widgets()
def widgets(self):
self.entryBox = Entry(self).grid()
Button(self, text="Submit", command=self.search()).grid()
def search(self):
if len(self.entryBox.get()) == 0:
tkinter.messagebox.showinfo("Warning!", "Box is empty! Write something")
else:
do_something()
# main
root = Tk()
root.title("Title")
app = Application(root)
root.mainloop()
行self.entryBox = Entry(self).grid()
会将.grid()
的结果赋值给self.entryBox
。相反,试试这个:
self.entryBox = Entry(self)
self.entryBox.grid()
通过执行 Button(self, text="Submit", command=self.search()).grid()
你会遇到类似的问题,因为你 运行 一次 search
方法然后将该方法的结果绑定到 command
参数。相反,这应该有效(注意缺少 ()
:
Button(self, text="Submit", command=self.search).grid()
原因是调用函数后立即调用按钮,将行替换为
Button(self, text="Submit", command=lambda: self.search()).grid()
这对我来说很好
from tkinter import *
import tkinter as tk
class Application(Frame):
def __init__(self, master):
super(Application, self).__init__(master)
self.grid()
self.widgets()
def widgets(self):
self.entryBox = tk.Entry(self)
self.entryBox.grid()
print(self.entryBox.get())
Button(self, text="Submit", command=lambda: self.search()).grid()
print(self.entryBox)
def search(self):
print(self.entryBox.get())
if len(self.entryBox.get()) == 0:
tk.messagebox.showinfo("Warning!", "Box is empty! Write something")
else:
do_something()
# main
root = Tk()
root.title("Title")
app = Application(root)
root.mainloop()
我认为有两个问题:
(1) self.entryBox
密码
self.entryBox = Entry(self).grid()
将使 self.entryBox 成为 grid() 的 return 值 ,而不是 Entry 小部件对象。将该行更改为
self.entryBox = Entry(self)
self.entryBox.grid()
(2) 绑定命令到按钮
当您将回调函数绑定到按钮时,您必须传递函数本身。变化
Button(self, text="Submit", command=self.search()).grid()
至
Button(self, text="Submit", command=self.search).grid()
。此外,如果将 Button 设置为属性,
self.button = Button(self, text="Submit", command=self.search)
self.button.grid()
您可以通过其他方法控制按钮。
下面的例子在我的电脑上运行。
# -----
# from tkinter import *
from Tkinter import *
import tkMessageBox
# -----
class Application(Frame, object):
def __init__(self, master):
super(Application, self).__init__(master)
self.grid()
self.widgets()
def widgets(self):
#self.entryBox = Entry(self).grid()
self.entryBox = Entry(self)
self.entryBox.grid()
self.button = Button(self, text="Submit", command=self.search)
self.button.grid()
def search(self):
if len(self.entryBox.get()) == 0:
# -----
# messagebox.showinfo("Warning!", "Box is empty! Write something")
tkMessageBox.showinfo("Warning!", "Box is empty! Write something")
# -----
else:
# do_something()
# -----
# print(self.entryBox.get())
print self.entryBox.get()
# -----
# main
root = Tk()
root.title("Title")
app = Application(root)
root.mainloop()
(我现在没有python 3,所以我将一些行修改为python 2样式。)
有人能告诉我我做错了什么吗?!我正在尝试在 Python 3 中使用 tkinter 创建 GUI。如果用户单击按钮,同时条目为空,我想显示 messageBox。 在我的代码下方我用过。
正确知道我有这个错误:
if len(self.entryBox.get()) == 0:
AttributeError: 'NoneType' object has no attribute 'get'
我也尝试使用它 if self.entryBox is None:
但在那种情况下,我在 运行 项目之后立即看到 messageBox 现在是正确的。我真的很困惑。
代码:
from tkinter import *
class Application(Frame):
def __init__(self, master):
super(Application, self).__init__(master)
self.grid()
self.widgets()
def widgets(self):
self.entryBox = Entry(self).grid()
Button(self, text="Submit", command=self.search()).grid()
def search(self):
if len(self.entryBox.get()) == 0:
tkinter.messagebox.showinfo("Warning!", "Box is empty! Write something")
else:
do_something()
# main
root = Tk()
root.title("Title")
app = Application(root)
root.mainloop()
行
self.entryBox = Entry(self).grid()
会将.grid()
的结果赋值给self.entryBox
。相反,试试这个:self.entryBox = Entry(self) self.entryBox.grid()
通过执行
Button(self, text="Submit", command=self.search()).grid()
你会遇到类似的问题,因为你 运行 一次search
方法然后将该方法的结果绑定到command
参数。相反,这应该有效(注意缺少()
:Button(self, text="Submit", command=self.search).grid()
原因是调用函数后立即调用按钮,将行替换为
Button(self, text="Submit", command=lambda: self.search()).grid()
这对我来说很好
from tkinter import *
import tkinter as tk
class Application(Frame):
def __init__(self, master):
super(Application, self).__init__(master)
self.grid()
self.widgets()
def widgets(self):
self.entryBox = tk.Entry(self)
self.entryBox.grid()
print(self.entryBox.get())
Button(self, text="Submit", command=lambda: self.search()).grid()
print(self.entryBox)
def search(self):
print(self.entryBox.get())
if len(self.entryBox.get()) == 0:
tk.messagebox.showinfo("Warning!", "Box is empty! Write something")
else:
do_something()
# main
root = Tk()
root.title("Title")
app = Application(root)
root.mainloop()
我认为有两个问题:
(1) self.entryBox
密码
self.entryBox = Entry(self).grid()
将使 self.entryBox 成为 grid() 的 return 值 ,而不是 Entry 小部件对象。将该行更改为
self.entryBox = Entry(self)
self.entryBox.grid()
(2) 绑定命令到按钮
当您将回调函数绑定到按钮时,您必须传递函数本身。变化
Button(self, text="Submit", command=self.search()).grid()
至
Button(self, text="Submit", command=self.search).grid()
。此外,如果将 Button 设置为属性,
self.button = Button(self, text="Submit", command=self.search)
self.button.grid()
您可以通过其他方法控制按钮。
下面的例子在我的电脑上运行。
# -----
# from tkinter import *
from Tkinter import *
import tkMessageBox
# -----
class Application(Frame, object):
def __init__(self, master):
super(Application, self).__init__(master)
self.grid()
self.widgets()
def widgets(self):
#self.entryBox = Entry(self).grid()
self.entryBox = Entry(self)
self.entryBox.grid()
self.button = Button(self, text="Submit", command=self.search)
self.button.grid()
def search(self):
if len(self.entryBox.get()) == 0:
# -----
# messagebox.showinfo("Warning!", "Box is empty! Write something")
tkMessageBox.showinfo("Warning!", "Box is empty! Write something")
# -----
else:
# do_something()
# -----
# print(self.entryBox.get())
print self.entryBox.get()
# -----
# main
root = Tk()
root.title("Title")
app = Application(root)
root.mainloop()
(我现在没有python 3,所以我将一些行修改为python 2样式。)