我在Python中安装了以下代码(已安装v3.7):
import datetime
import tkinter as tk
class Person:
def __init__(self, name, birthdate):
self.name = name
self.birthdate = birthdate
def age(self):
today = datetime.date.today()
age = today.year - self.birthdate.year
return age
window = tk.Tk() # Create frame
window.geometry("400x400") # Create frame geometry
window.title("Age Calculator App") # Set title of the frame
# Add Labels
year_label = tk.Label(master=window, text="Year").grid(column=0, row=1)
month_label = tk.Label(master=window, text="Month").grid(column=0, row=2)
day_label = tk.Label(master=window, text="Day").grid(column=0, row=3)
# Add Entries
year_entry = tk.Entry()
year_entry.grid(column=1, row=1)
month_entry = tk.Entry()
month_entry.grid(column=1, row=2)
day_entry = tk.Entry()
day_entry.grid(column=1, row=3)
def calculate_age():
print(year_entry.get())
print(month_entry.get())
print(day_entry.get())
print("Button was clicked!!")
calculate_button = tk.Button(text="Calculate now", command=calculate_age).grid(column=1, row=4) # Add calculate button
该代码可以正常运行,并且可以按预期运行,但是,如果我更改这些行:
# Add Entries
year_entry = tk.Entry()
year_entry.grid(column=1, row=1)
month_entry = tk.Entry()
month_entry.grid(column=1, row=2)
day_entry = tk.Entry()
day_entry.grid(column=1, row=3)
并使它们像这样一线:
# Add Entries
year_entry = tk.Entry().grid(column=1, row=1)
month_entry = tk.Entry().grid(column=1, row=2)
day_entry = tk.Entry().grid(column=1, row=3)
我收到以下错误:
Tkinter回调Traceback中的异常(最近一次调用最后一次):
在调用中的文件“ Python / lib / tkinter / init .py”,行1705 返回self.func(* args)文件“ person_class.py”,第42行,在 计算年龄 print(year_entry.get())AttributeError:'NoneType'对象没有属性'get'
这怎么可能?这不是单行可行,而不是必须将条目分成不同的行吗?
有人可以解释一下为什么会发生这种奇怪的行为吗?在Python 3.x中声明内容时,我该如何更好地利用单行代码?
请注意,我是Python的初学者。在Java或Groovy中,单线将按预期工作。
答案 0 :(得分:-1)
由于我的原因,tkinter失去了对该对象的引用
尝试
# Add Labels
year_label = tk.Label(master=window, text="Year")
year_label.grid(column=0, row=1)
month_label = tk.Label(master=window, text="Month")
month_label.grid(column=0, row=2)
day_label = tk.Label(master=window, text="Day")
day_label.grid(column=0, row=3)
# Add Entries
year_entry = tk.Entry()
year_entry.grid(column=1, row=1)
month_entry = tk.Entry().grid(column=1, row=2)
day_entry = tk.Entry().grid(column=1, row=3)
def calculate_age():
print(type(year_entry))
print(type(month_entry))
return
返回
符合line_entry的'NoneType'类
不是year_entry的'tkinter.Entry'类