如何获取输入小部件以保存我输入的内容? Python Tkinter

时间:2016-09-17 14:12:12

标签: python button tkinter widget tkinter-entry

我想创建一个输入个人详细信息的条目小部件,但是我想将这些细节保存为变量,因此我可以将它们写在txt文件中。

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:另外,如果不是太多,我如何制作一个按钮继续下一行代码呢?

3 个答案:

答案 0 :(得分:1)

这还没有得到回答,所以这里有一大堆代码可以满足您的要求。

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

它不是很优雅,但它完全符合您的要求,只需对您的版本进行最少量的更改。

如果您运行它,并在输入字段中输入12345,请点击{我添加了{1}}按钮,然后打印submit params,您得到:

list

如果由于某种原因您不希望在提交后关闭窗口,请省略>>> params ['1', '2', '4', '3', '5'] 并从那里取出。

请注意,root.destroy()作为getInput参数没有括号,因此仅在单击按钮时调用它,而不是在执行此行时调用。

最后,我不确定你的上一个问题是什么意思,'我怎样才能按下按钮继续下一行代码'。最后添加的Button内容确保(除其他外)代码的其余部分在框关闭之前不会执行(它还会启动循环收集事件并确保事件得到处理) 。因此,一旦单击mainloop()并关闭窗口,其余代码就会被执行。如果您在submit行之前或之后添加print('hi')语句,则会进一步了解这一点。如果你之前添加它,字符串将与窗口的开口“同时”打印;如果你把它放在后面,它会在窗户关闭后打印出来。 (有关mainloop()的其他信息,请查看堆栈herehere中的广泛讨论。

答案 1 :(得分:1)

为了在 tkinter 中接受用户的输入,我总是使用以下代码,结果万无一失 -

from tkinter import *
root=Tk()
Label(root,text='Your input prompt').pack()
t1=Text(root, height=2, width=8)
t1.pack()

现在是主要部分:

def value(t):
    x=t.get('1.0','end-1c')
    return x

显然,您需要在文本框中输入值后触发此操作,大概是使用显示“提交”或“确认”或其他内容的按钮。

def submit():
    a=value(t1)
    print(a)
Button(root, text='Submit', command=submit).pack()

一些注意事项:

  1. 文本小部件中的高度和宽度是可选的。
  2. 注意小部件是 TEXT,而不是 ENTRY。我还没有看到该代码适用于 entry。
  3. get "end-1c" 中的值是删除 tkinter 自己添加的额外换行符。
  4. 您显然可以使用 grid 代替 pack()。

希望你觉得这有用

答案 2 :(得分:0)

条目窗口小部件有get方法,可用于在需要时获取值。你的"保存"函数只需要在写入文件之前调用此函数。

例如:

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