Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从条目窗口小部件保存变量_Python_Tkinter - Fatal编程技术网

Python 从条目窗口小部件保存变量

Python 从条目窗口小部件保存变量,python,tkinter,Python,Tkinter,我想将此输入框的文本输入保存到列表中,然后进行打印。我不能让它在按下按钮时保存输入,它只打印占位符变量 names = [] from tkinter import* class Trip: def __init__(self, parent): E_name = "q" self.En_name = "g" self.En_name = str(self.En_name) self.go = Frame(par

我想将此输入框的文本输入保存到列表中,然后进行打印。我不能让它在按下按钮时保存输入,它只打印占位符变量

 names = []

 from tkinter import*

 class Trip:
     def __init__(self, parent):
        E_name = "q"
        self.En_name = "g"
        self.En_name = str(self.En_name)
        self.go = Frame(parent, width = 500, height = 450, bg = "snow", pady = 30, padx = 10)
        self.go.grid(row = 1, column = 0)
        self.go.grid_propagate(0) # to reserve space required for frame
        self.tet = Frame(parent, width = 500, height = 450, bg = "snow")

        name = Label(self.go, text = "Name:", bg = "snow")
        name.grid(row = 1, column = 0, sticky = E)
        self.E_name = Entry(self.go, width = 40, textvariable = self.En_name)
        self.E_name.grid(row = 1, column = 1, sticky = W, pady = 4)


        menuButton = Button(self.go, text = "Continue", command = self.breakeverything)
        menuButton.grid(row = 8, column = 1, pady = 4)

     def breakeverything(self):
        names.append(self.En_name)
        print (names[0])
        self.E_name.delete(0, "end")

 #main routine
 if __name__ == "__main__":
    root = Tk()
    root.title("Traveller Details")
    play = Trip(root)
    root.geometry("500x450+0+0")
    root.mainloop()

textvariable
应该是
tkinter.StringVar()
,而不是原始字符串。您的应用程序看起来很简单,甚至不需要它。取出
self.En_name
,取出
textvariable
,只需在
breakearthing()
中检索
条目
小部件的当前值(该名称不再是合适的名称):


我还建议将
names
移动到
Trip.\uuuu init\uuuu
中,并使用
self.names=[]
将其作为实例变量。这将使跟踪作用域变得更容易。

您错误地使用了
textvariable
(您必须使用一个特殊的Tkinter变量,例如
StringVar
),但您根本不需要使用它。只需保存对小部件的引用,然后在需要值时调用
get
方法:

self.E_name = Entry(self.go, width = 40)
...
print("you entered: " + self.E_name.get())
如果坚持使用
textvariable
,请使用
StringVar
,然后调用
get
方法:

self.En_name = StringVar()
self.E_name = Entry(..., textvariable=self.En_name)
...
print("you entered: " + self.En_name.get())

对不起,我找到了更好的办法!太复杂了,何不问问真人@阿兰·琼斯:有什么复杂的?您只需更改两行代码。必须在小部件或相关变量上调用
get
方法。这就是它的工作原理。没有其他方法可以从小部件中获取数据。
self.En_name = StringVar()
self.E_name = Entry(..., textvariable=self.En_name)
...
print("you entered: " + self.En_name.get())