【问题标题】:Tkinter prints None for Entry, when button is pressed当按下按钮时,Tkinter 为 Entry 打印 None
【发布时间】:2021-08-14 20:34:15
【问题描述】:

当我尝试运行此代码时,它应该打印用户输入,而是每次都打印 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

【问题讨论】:

  • 在我链接的问题中,如果您使用:variable = Widget(...).grid(...)variable 将是None,并且您必须将其拆分为 2 行。你也有同样的问题。
  • 我试过了,但现在它显示:` Name = .!entry Age = .!entry `
  • @TheLizzard 但正如我最近发现的那样,您可以轻松地使用海象运算符将它们放在一行中(Python3.8+),如下所示:(variable := Widget(...)).grid(...) 然后您可以使用variable,它不会不要None(我建议吗?不是在一般代码中,但可以很容易地用于列表推导或其他循环,否则如果你使用它创建所有内容,阅读它们可能会有点困难)
  • @Matiiss 我不建议这样做,原因有两个:很难跟踪所有这些括号和 PEP 8 建议中的 79/80 个字符。

标签: python tkinter


【解决方案1】:

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

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()

【讨论】:

  • 请看PEP 8
  • 运行我的解决方案并告诉我它不起作用。
  • 它确实有效,但您的代码看起来不如它应该的那么好。我可以重写你的代码in only 1 line。它仍然可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多