Python窗体输入、展示并存储数据

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文件中

  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值