首页 > 解决方案 > 当按下按钮时,Tkinter 为 Entry 打印 None

问题描述

当我尝试运行此代码时,它应该打印用户输入,而是每次都打印 None ,即使我为变量赋值。我应该做些什么?我也没有在控制台中收到错误。

from tkinter import *
main_window= Tk()

#labels

Label(main_window, text="Name:").grid(row=0,column=0)
Label(main_window,text="Age:").grid(row=1,column=0)

#text input
name= Entry(main_window,width=30,borderwidth=1).grid(row =0,column=1)
#text input for Class
age= Entry(main_window,width=30,borderwidth=1,).grid(row =1,column=1)

#defines on click function
def on_click():
    print(f"Name = {name}, Age = {age}")  #prints none when clicked submit

#Button
Button(main_window,text="Submit",command =on_click).grid(row=2,column=1)


main_window.mainloop()

这是代码

输出:

Name = None, Age = None

标签: pythontkinter

解决方案


您的代码有一些错误,主要是小部件的命名。

Label部件已命名,因此输出将发送给它们。

Entry部件已命名,因此可以使用该get方法提取它们的内容。

该函数on_click现在显示结果。

import tkinter as tk

main_window = tk.Tk()

labelname = tk.Label(main_window, text="Name:", anchor="nw", justify="left")
labelname.grid(row=0, column=0, sticky="ew")
labelage = tk.Label(main_window, text="Age:", anchor="nw", justify="left")
labelage.grid(row=1, column=0, sticky="ew")

name =  tk.Entry(main_window, width=30)
name.grid(row=2, column=0)

age =  tk.Entry(main_window, width=30)
age.grid(row=3, column=0)

def on_click():
    labelname["text"] = f"Name:  {name.get()}"
    labelage["text"]  = f"Age:   {age.get()}"

tk.Button(main_window, text="Submit", command=on_click).grid(row=4, column=0)

main_window.mainloop()

推荐阅读