Python TKinter奇怪的行为

时间:2019-03-17 16:50:53

标签: python python-3.x tkinter tkinter-entry

我在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中,单线将按预期工作。

1 个答案:

答案 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'类