Python窗体输入、展示并存储数据
利用python的tkinter进行窗体开发,可以实现输入框,以及利用get函数获取输入框的数据,并将这些数据存储到本地,如果利用数据库,也可以把窗体获取的数据导入到数据库中. 在代码的review中,不难发现,输入窗口是重复的代码,只不过对应的输入内容不一样,因此,这里可以抽象出来一个函数来操作
def content_input(component, text):
input_string = Label(component, text=text)
input_string.pack()
string_text = StringVar()
output = Entry(component, textvariable=string_text)
string_text.set(" ")
output.pack()
return string_text
由于我们希望获得输入框内容,因此需要返回输入框,最后通过get()方法获得输入框的内容.
如之前所说,我们需要对记录进行文件写入操作,并且和button绑定,因此,可以定义一个写入函数
def get_click(name, age, gender):
string = str("名字:%s 年龄: %s 性别: %s " % (name, age, gender))
print("名字:%s 年龄: %s 性别:%s " % (name, age, gender))
messagebox.showinfo(title='aaa', message=string)
with open('测试数据写入.txt', 'a') as f:
f.write("%s\t%s\t%s\n" % (name, age, gender))
这里不难发现,相比之前的版本来说,我们的函数似乎多了输入的参数,当我们输入的时候,而Button里面的command一般对应的是函数名称.如果使用如下方式设置按钮
Button(root, text="点击确定",
command=get_click(inputting_name.get(), inputting_age.get(), inputting_gender.get()), ).pack()
输入框会卡顿,这是因为command一般来说输入的是函数名称, 当需要输入参数的时候,使用lambda表达式即可解决
Button(root, text="点击确定",
command=lambda : get_click(inputting_name.get(), inputting_age.get(), inputting_gender.get()), ).pack()
Button(root, text="点击结束", command=exit).pack()
最终我们的代码如下:
from tkinter import *
import tkinter.messagebox as messagebox
def content_input(component, text):
input_string = Label(component, text=text)
input_string.pack()
string_text = StringVar()
output = Entry(component, textvariable=string_text)
string_text.set(" ")
output.pack()
return string_text
def get_click(name, age, gender):
# name = inputting_name.get()
# age = inputting_age.get()
# gender = inputting_gender.get()
string = str("名字:%s 年龄: %s 性别: %s " % (name, age, gender))
print("名字:%s 年龄: %s 性别:%s " % (name, age, gender))
messagebox.showinfo(title='aaa', message=string)
with open('测试数据写入.txt', 'a') as f:
f.write("%s\t%s\t%s\n" % (name, age, gender))
root = Tk()
root.title("信息输入器")
root.geometry('300x300')
inputting_name = StringVar()
inputting_age = StringVar()
inputting_gender = StringVar()
'''
由于需要获取文本框内的内容,如果直接使用return的结果,得到的会是空,也就是string_text.set(" ")这一步带来的操作
所以我们需要定义一个StringVar的变量来获取返回的文本框,同时使用get的时候能获取到文本框的内容
'''
inputting_name = content_input(root, "请输入姓名: ")
inputting_age = content_input(root, "输入年龄: ")
inputting_gender = content_input(root, "输入性别: ")
# print("输入的年龄是" + input_gender)
Button(root, text="点击确定",
command=lambda : get_click(inputting_name.get(), inputting_age.get(), inputting_gender.get()), ).pack()
Button(root, text="点击结束", command=exit).pack()
if __name__ == '__main__':
root.mainloop()
这里只是做一个简单的文本写入的测试,实际上输入情况也缺乏检查,比如当我们在年龄文本框输入Andie,也就是错误输入名字了,也会写入到本地文件里面. 所以如果更严格一点,其实可以做一些输入检测.
以下是原本的代码
from tkinter import *
import tkinter.messagebox as messagebox
root = Tk()
root.title("信息输入框")
root.geometry('300x300')
input1 = Label(root,text = "输入姓名:")
input1.pack()
name_text = StringVar()
name = Entry(root,textvariable = name_text)
name_text.set(" ")
name.pack()
input2 = Label(root,text = "输入年龄:")
input2.pack()
age_text = StringVar()
age = Entry(root,textvariable = age_text)
age_text.set(" ")
age.pack()
input3 = Label(root,text = "输入性别:")
input3.pack()
gender_text = StringVar()
gender = Entry(root,textvariable = gender_text)
gender_text.set(" ")
gender.pack()
def get_click():
name = name_text.get()
age = age_text.get()
gender = gender_text.get()
string = str("名字:%s 年龄: %s 性别: %s " %(name, age, gender))
print("名字:%s 年龄:åç %s 性别:%s " %(name, age, gender))
messagebox.showinfo(title='aaa', message = string)
with open('测试数据写入.txt','a') as f:
f.write("%s\t%s\t%s\n"%(name , age, gender))
Button(root,text = "点击确定",command = get_click,).pack()
Button(root,text = "点击结束",command = exit).pack()
root.mainloop()
以上即利用Entry建立输入框,并给输入框命名,get函数读取到输入框的值,利用write函数将数据写入到本地的txt文件中