簡體   English   中英

按下按鈕時,Tkinter 打印 None for Entry

[英]Tkinter prints None for Entry, when button is pressed

當我嘗試運行這段代碼時,它應該打印用戶輸入,但它每次都打印 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()

這是守則

Output:

Name = None, Age = None

您的代碼有一些錯誤,主要是小部件的命名。

Label小部件已命名,因此 output 將發送給它們。

Entry小部件已命名,因此可以使用get方法提取它們的內容。

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

這是因為您將 put.grid 放在同一行。 總是盡量把布局類型寫在下一行。這樣以后會省去很多麻煩。

試試下面的修改代碼。

from tkinter import *
from tkinter import ttk

main_window= Tk()

#labels
main_window.geometry("750x250")

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

#text input
my_name= ttk.Entry(main_window,width=30)
my_name.grid(row =0,column=1)
#text input for Class
my_age= ttk.Entry(main_window,width=30)
my_age.grid(row =1,column=1)

#defines on click function
def on_click():
    name = my_name.get()
    age = my_age.get()
    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()

如果你沒有得到,因為你在一行中操作了所有內容。 你也不能用warlus做。 你需要拆分它。

改變這個:

name= Entry(main_window,width=30,borderwidth=1).grid(row =0,column=1)
age= Entry(main_window,width=30,borderwidth=1,).grid(row =1,column=1)

到:

name= Entry(main_window,width=30,borderwidth=1)
name.grid(row =0,column=1)
 
age= Entry(main_window,width=30,borderwidth=1,)
age.grid(row =1,column=1)

還使用了 f-string 和get()

def on_click():
    print(f"Name = {name.get()}, Age = {age.get()}")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM