2016-09-17 69 views
1

我想创建一个输入个人详细信息的输入窗口小部件,但是我想将这些详细信息保存为变量,因此我可以将它们写入txt文件中。我如何获得一个入口小部件来保存我输入的内容? Python Tkinter

from tkinter import * 
root = Tk() 
Label(root, text = "Childs First name").grid(row = 0, sticky = W) 
Label(root, text = "Childs Surname").grid(row = 1, sticky = W) 
Label(root, text = "Childs Year of Birth").grid(row = 2, sticky = W) 
Label(root, text = "Childs Month of Birth").grid(row = 3, sticky = W) 
Label(root, text = "Childs Day of Birth").grid(row = 4, sticky = W) 

Fname = Entry(root) 
Sname = Entry(root) 
x = Entry(root) 
y = Entry(root) 
z = Entry(root) 


Fname.grid(row = 0, column = 1) 
Sname.grid(row = 1, column = 1) 
x.grid(row = 3, column = 1) 
y.grid(row = 2, column = 1) 
z.grid(row = 4, column = 1) 

Fname = Fname.get 
Sname = Sname.get 
x = x.get 
y = y.get 
z = z.get 
mainloop() 

我的代码工作得很好,但它并不保存我输入的内容,更不用说将它保存在一个变量中。我显然缺少大量代码,但我不知道代码是什么。

P.S:另外,如果它不是太多,我将如何让一个按钮继续到下一行代码?

回答

0

条目窗口小部件有一个get方法,可用于在需要时获取值。在写入文件之前,您的“保存”功能只需调用此函数即可。

例如:

def save(): 
    x_value = x.get() 
    y_value = y.get() 
    z_value = z.get() 
    ... 
+0

谢谢!因此,如果我输入print(x),它会打印我输入的内容 – user6842389

+0

@ user6842389:不,您必须打印'x_value'。 'x'是一个小部件,而不是小部件中的值。 –

+0

好吧,但是,我将如何访问x_value,因为它在函数中,并且我想在函数 – user6842389

0

这并没有得到答复尚未所以这里的代码完全块,做您要求什么。

from tkinter import * 

root = Tk() 
Label(root, text = "Childs First name").grid(row = 0, sticky = W) 
Label(root, text = "Childs Surname").grid(row = 1, sticky = W) 
Label(root, text = "Childs Year of Birth").grid(row = 2, sticky = W) 
Label(root, text = "Childs Month of Birth").grid(row = 3, sticky = W) 
Label(root, text = "Childs Day of Birth").grid(row = 4, sticky = W) 

Fname = Entry(root) 
Sname = Entry(root) 
x = Entry(root) 
y = Entry(root) 
z = Entry(root) 


Fname.grid(row = 0, column = 1) 
Sname.grid(row = 1, column = 1) 
x.grid(row = 3, column = 1) 
y.grid(row = 2, column = 1) 
z.grid(row = 4, column = 1) 

def getInput(): 

    a = Fname.get() 
    b = Sname.get() 
    c = x.get() 
    d = y.get() 
    e = z.get() 
    root.destroy() 

    global params 
    params = [a,b,c,d,e] 


Button(root, text = "submit", 
      command = getInput).grid(row = 5, sticky = W) 
mainloop() 

这不是很优雅,但它确实如你所要求的与您的版本的最小量的变化。

如果你运行它,输入1234,并5您输入字段,然后点击submit按钮我添加,并打印paramslist,您可以:

>>> params 
['1', '2', '4', '3', '5'] 

如果由于某种原因,您不希望窗口在提交后关闭,请省略root.destroy()并从此处取出。

请注意,getInput作为参数Button没有括号,因此只有在单击按钮时才会调用它,而不是在执行此行时调用它。

最后,我不确定你最后一个问题是什么意思,'我将如何让一个按钮继续下一行代码'。最后添加的mainloop()确保(除其他事项外)代码的其余部分在框关闭之前不会执行(它也会启动收集事件并确保事件得到处理的循环)。所以一旦你点击submit并关闭窗口,其余的代码就会被执行。如果您在mainloop()行之前或之后添加print('hi')语句,您将会进一步了解这一点。如果之前添加了该字符串,该字符串将在打开窗口的同时打印出来;如果你把它放在后面,它会在窗口关闭后打印出来。 (有关mainloop()的更多信息,请参阅堆栈herehere的详细讨论)

相关问题