Python tk:将输入项存储在变量中

Python tk:将输入项存储在变量中,python,tkinter,Python,Tkinter,我曾尝试使用TK搜索如何从输入保存变量,但找不到任何方法 这是我使用的代码的更清晰版本: from tkinter import * from tkinter import ttk main=Tk() main.title("Test") book = [] class test1: def __init__(self): self.name = "" self.tel = "" new1 = test1()

我曾尝试使用TK搜索如何从输入保存变量,但找不到任何方法

这是我使用的代码的更清晰版本:

from tkinter import *
from tkinter import ttk

main=Tk()
main.title("Test")
book = []

class test1:
        def __init__(self):
                self.name = ""
                self.tel = ""

new1 = test1()

def salva(argm):
        argm.name = str(nome.get())
        argm.tel = str(telefono.get())

def nuovo_ordine():
        tutto = Toplevel()
        scheda = ttk.Frame(tutto,padding="10 10 10 10")
        scheda.rowconfigure(0, weight=1)
        scheda.columnconfigure(0, weight=1)
        scheda.grid(column=0,row=0,sticky=(N,W,E,S))
        global nome
        global telefono
        global new1
        nome = StringVar()
        telefono = StringVar()
        ttk.Label(scheda,text="Telefono").grid(column=1,row=2)
        ttk.Label(scheda,text="Nome").grid(column=1,row=1)
        tel1 = ttk.Entry(scheda,textvariable=telefono).grid(column=2,row=2)
        nome1 = ttk.Entry(scheda,textvariable=nome).grid(column=2,row=1)
        salva_tasto=Button(scheda,text="Salva",command=salva(new1)).grid(column=1,row=4)
        fine_tasto=Button(scheda,text="Fine",command=tutto.destroy).grid(column=3,row=4)

def stampa(argm2):
        print (argm2.name)
        print (argm2.tel)

dentro = ttk.Frame(main,padding="10 10 10 10")
dentro.rowconfigure(0, weight=1)
dentro.columnconfigure(0, weight=1)
dentro.grid(column=0,row=0,sticky=(N,W,E,S))
nuovo=Button(dentro,text="Aggiungi Ordine", command=nuovo_ordine,     width=16).grid(column=1,row=2)
stampa=Button(dentro,text="Stampa Ordini",command=stampa(new1),    width=16).grid(column=2,row=3)
chiudi=Button(dentro,text="Chiudi",command=main.destroy, width=16).grid(column=3,row=4)
main.mainloop()
问题是,它似乎无法将输入存储在变量中,而如果我尝试: 打印(telefono.get()) 我得到了正确的值

提前谢谢

salva_tasto=Button(scheda,text="Salva",command=salva(new1)).grid(column=1,row=4)
如果在
命令
中指定函数的参数,则必须将其包装在lambda中,以便不会立即调用

salva_tasto=Button(scheda,text="Salva",command= lambda *args: salva(new1)).grid(column=1,row=4)
顺便说一句,尝试将小部件分配给变量,并将其
网格
打包
放在同一行上,这是一个常见的错误。如果您想将salva_tasto作为一个按钮,而不是
grid
返回的任何内容,您应该这样做

salva_tasto=Button(scheda,text="Salva",command= lambda *args: salva(new1))
salva_tasto.grid(column=1,row=4)


编辑:您还存在命名问题。您有一个函数
stampa
,但您用
stampa=Button覆盖该名称(…
。您应该将其中一个变量的名称更改为其他名称。

首先:感谢您的回答!但是使用lambda没有帮助,我仍然会因为打印而变为空白…此外,*args代表什么?您是否也包装了
command=stampa(new1)
在lambda中?每个使用括号的命令都需要一个lambda。
*args
是一个参数。我把它放进去是因为我记不起调用命令时传递给命令的参数有多少,
*args
防止任何“太多参数”错误。尝试一下,你可以在不使用
*args
的情况下执行普通的
lambda:
。是的,我尝试过了,现在得到的是:TypeError:“NoneType”对象与stampa(new1)命令不相关,同时,我注意到如果我定义self.tel=“aaa”,没有lambda它会在我启动程序后立即打印出来。我刚刚注意到我自己-请参阅我的帖子的编辑。
stampa
既是一个函数的名称,也是一个按钮。