[英]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.