python中通常我们写程序,显示结果和操作都是在终端区,如果要想实现一个有显示界面的程序那该怎样实现呢?python中有好几个库都可以实现,这个系列我们一起来学习如何使用python自带的tkinter库来实现。
今天这课将学习Entry和Text窗口部件,Entry单行文本输入框,Text多行文本输入框。文本框通常用来获取我们输入的一个内容。
比如下面这个反馈表单就用到这样的两个部件。
下面我们就来模拟一个类似用户提交反馈的情况。用户输入内容后,点击提交后,会弹出一个消息框,将用户的信息显示出来。
1.创建一个Entry部件
代码:
from tkinter import *
#创建一个主窗口
root = Tk()
# 创建 宽200高200的窗口 x是小写的英文字符
root.geometry('200x200')
label1=Label(root,text="联系方式")
# anchor 表示标签放在的位置,默认center,这里设置靠左
# N S W E 对应 北 南 西(左) 东(右)
label1.pack(anchor=W)
entry = Entry(root)
# 和label1一样的原理
entry.pack(anchor=W)
# 程序一直循环,直到我们关闭窗口
root.mainloop()
效果图:
2.创建一个Text部件
代码:
from tkinter import *
#创建一个主窗口
root = Tk()
# 创建 宽200高200的窗口 x是小写的英文字符
root.geometry('200x200')
label1=Label(root,text="联系方式")
# anchor 表示标签放在的位置,默认center,这里设置靠左
# N S W E 对应 北 南 西(左) 东(右)
label1.pack(anchor=W)
entry = Entry(root)
# 和label1一样的原理
entry.pack(anchor=W)
label2 = Label(root, text="反馈内容")
# anchor 表示标签放在的位置,默认center,这里设置靠左
# N S W E 对应 北 南 西(左) 东(右)
label2.pack(anchor=W)
# Text默认高度是占用剩余的所有空间的,
# 这里指定height=5为文本框是5个字符高度
text = Text(root, height=5)
# 和label1一样的原理
text.pack(anchor=W)
# 程序一直循环,直到我们关闭窗口
root.mainloop()
效果图:
3.添加按钮美化一下
前面看上去贴的边缘太近了,不是很美观,下面通过添加一个边距更改一下。
代码:
from tkinter import *
#创建一个主窗口
root = Tk()
# 创建 宽200高250的窗口 x是小写的英文字符
root.geometry('200x250')
label1=Label(root,text="联系方式")
# anchor 表示标签放在的位置,默认center,这里设置靠左
# N S W E 对应 北 南 西(左) 东(右)
label1.pack(anchor=W,padx=10,pady=10)
entry = Entry(root, width=180)
# 和label1一样的原理
entry.pack(anchor=W, padx=10,)
label2 = Label(root, text="反馈内容")
# anchor 表示标签放在的位置,默认center,这里设置靠左
# N S W E 对应 北 南 西(左) 东(右)
label2.pack(anchor=W, padx=10, pady=10)
# Text默认高度是占用剩余的所有空间的,
# 这里指定height=5为文本框是5个字符高度
text = Text(root, width=180, height=5)
# 和label1一样的原理
text.pack(anchor=W, padx=10,)
button =Button(root,text="提交",width=8,height=1)
button.pack(anchor=E, padx=10,pady=10)
# 程序一直循环,直到我们关闭窗口
root.mainloop()
效果图:
解释:
这里代码更改了一下,窗口高度调成250,padx表示部件离左右的距离,pady表示离上下的距离,width表示部件的宽度,这里可以根据自己的需要来调整。
4.实现功能
代码:
from tkinter import *
import tkinter.messagebox
#创建一个主窗口
root = Tk()
# 创建 宽200高250的窗口 x是小写的英文字符
root.geometry('200x250')
label1=Label(root,text="联系方式")
# anchor 表示标签放在的位置,默认center,这里设置靠左
# N S W E 对应 北 南 西(左) 东(右)
label1.pack(anchor=W,padx=10,pady=10)
entry = Entry(root, width=180)
# 和label1一样的原理
entry.pack(anchor=W, padx=10,)
label2 = Label(root, text="反馈内容")
# anchor 表示标签放在的位置,默认center,这里设置靠左
# N S W E 对应 北 南 西(左) 东(右)
label2.pack(anchor=W, padx=10, pady=10)
# Text默认高度是占用剩余的所有空间的,
# 这里指定height=5为文本框是5个字符高度
text = Text(root, width=180, height=5)
# 和label1一样的原理
text.pack(anchor=W, padx=10,)
# 定义一个发送消息的方法
def send_info():
# 获取entry单行文本框内容
entry_text=entry.get()
# 获取text多行文本框的内容,从第一个字符到最后一个字符
text_text = text.get('1.0',END)
# 如果点击确定,choice=True,点击cancel返回False
choice=tkinter.messagebox.askokcancel('提示','确定发送吗?')
if choice:
tkinter.messagebox.showinfo(
'提示', '反馈成功'+'你的反馈内容是:'+text_text+'反馈人联系方式:'+entry_text)
else:
tkinter.messagebox.showinfo(
'提示', '反馈失败'+'你已取消反馈')
# 给按钮绑定一个发送消息的方法
button = Button(root, text="提交", width=8, height=1, command=send_info)
button.pack(anchor=E, padx=10,pady=10)
# 程序一直循环,直到我们关闭窗口
root.mainloop()
点击提交:
确定反馈:
取消反馈: