效果图:
分析:
1.图形用户界面
2.读写文本文件
GUI编程:
1.定义(P67):
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。用户通过窗口、按键、菜单等图形对象向计算机等电子设备发出指令,其接收指令后,通过图形反馈操作的结果。
2.Tkinter模块:
Python 的标准 GUI 库。Python 使用Tkinter可以快速的创建GUI应用程序。由于Tkinter是内置到 python 的安装包中,只要安装好Python之后就能导入Tkinter模块,而且 IDLE 也是用Tkinter编写而成,对于简单的图形界面Tkinter还是能应付自如。
3.tkinter的使用:
(1)模块的导入:from tkinter import * :
(2)使用:
1.创建主窗口:root=Tk() 【root是一个主窗口对象】
2.创建若干个控件:控件对象=控件(root,控件参数设置)
3.将控件显示出来:控件对象.pack() 【pack显示方式】
4.让主窗口持续显示:root.mainloop()
(3)窗口及控件介绍:
1.主窗口Tk[所有控件都需要附着在界面上]:
介绍:主窗口是所有控件附着的基础,所有控件都需要附着在界面上,如果程序中没有指定控件附着的窗口,将默认附着到主窗口Tk中,如果程序中没有定义Tk,那么将自动创建一个
常见属性【想要初始化主窗口的属性需要使用 主窗口对象.属性(“参数”) :
title:窗口标题
geometry:窗口大小,大写格式是”宽度x高度+x位置+y位置”【注意不是*是x】,其中x,y将左上角作为(0,0)
resizable(width=False, height=False) 窗体宽高是否可被拉伸
2.按钮Button:
介绍:按钮
常用参数设置【可在创建按钮的时指定,也可创建后使用:按钮对象.config()】
text:按钮上的文本显示
font:字体,使用元组来指定一个字体
background[可缩写为bg]:背景色,取值可未英文颜色字符串,或者RGB值
command:当按下按钮时调用的方法
relief:边框的装饰["flat", "raised", "sunken", "solid", "ridge", "groove"]
3.Entry:
介绍:单行文本输入域。
参数设置:可以参考按钮Button
textvariable属性:
varin=StringVar() #创建一个string类型的对象
Entry(root,textvariable=varin).pack() #使用textvariable将变量与Entry绑定
varin.get() #获取文本框中值
varin.set() #文本框中显示值
Tkinter 支持将很多 GUI 组件与变量进行双向绑定,执行双向绑定后编程非常方便:如果程序改变变量的值,GUI 组件的显示内容或值会随之改变。当 GUI 组件的内容发生改变时(比如用户输入),变量的值也会随之改变。
为了让 Tkinter 组件与变量进行双向绑定,只要为这些组件指定 variable(通常绑定组件的 value)、textvariable(通常绑定组件显示的文本)等属性即可。
但这种双向绑定有一个限制,就是 Tkinter不允许将组件和普通变量进行绑定,只能和 tkinter 包下 Variable 类的子类进行绑定。该类包含如下几个子类:
ShringVar():用于包装str 值的变量。
IntVar():用于包装整型值的变量。
DoubleVar():用于包装浮点值的变量。
BooleanVar():用于包装bool值的变量。
对于 Variable 变量而言,如果要设置其保存的变量值,则使用它的 set() 方法;如果要得到其保存的变量值,则使用它的 get() 方法。
4.Text:
介绍:多行文本输入域。
参数设置:可以参考按钮Button
text.delete(0.0,END) # 清空文本框内容
text.insert(END,“增加的内容”) #将外部内容增加到Text中显示
5.框架Frame:
介绍:一个容器窗口部件。可以有边框和背景。Frame默认是没有大小的,设置高度和宽度,而当加了控件到Frame后它会“缩水”【这里缩水是因为Frame自动缩小到刚好能包裹控件】,需要在显示的时候强制设置大小比如pack(fill=X),这是强制填充水平方向,又或者使用 Frame对象.pack_propagate(0),这个函数可以使得设置的高度和宽度生效。
frm = Frame(root) #无大小,自动缩小到刚好能包裹控件
Label(frm, text='输入密码:', font=('Arial', 10)).pack()
6.控件的布局(定位):
A.用pack方法定位控件
pack()方法的side参数,用来指定控件在容器中的排列方式,参数值可以为TOP,BOTTOM,LEFT和RIGHT。
B.用grid()方法定位控件
grid()方法以表格的行列方式对控件进行定位,控件所在的行列位置由row和column两个参数决定,前者代码行数,后者代表列数。
C.用place()方法定位控件
此方法通过参数x,y来定位控件左上角在容器中和坐标,因此是一种控件的绝对定位方式。
4.示例:旅行线路添加界面设计
代码示例:
from tkinter import *
r=Tk()
entry_file = Entry(r,width=40) # 创建一个文本输入框,用来设置文件路径
entry_file.pack(side=TOP) # 放置该输入框
frm=Frame(r)
frm.pack()
btn_1 = Button(frm, text='添加线路') # 创建按钮用于打开文件
btn_2 = Button(frm, text='查询线路') # 创建按钮用于保存文件
# 放置按钮
btn_1.pack(side=LEFT)
btn_2.pack(side=RIGHT)
读写文本文件:
1.文件(P69):文件是存储在外存储设备中的相关数据的集合。
2.Python写入文本文件:
第一步:通过python的open()函数来创建文件对象。所谓文件对象,就是一个提供存取文件的接口,它并非实际的文件。当打开文件之后,必须通过文件对象执行读和写的操作。
open(file,mode)
file:以字符串来指定想要打开文件的路径和文件名
mode:以字符串指定打开文件的存取模式
第二步:使用文件对象所提供的write()方法将文字写入文件。
第三步:关闭文件close()
代码示例:
c=open("旅行线路.txt","w")
b=c.write(“盐城-南京-上海-杭州-盐城”)
c.close()
3.Python读取文本文件:
第一步:利用open()打开指定的文件
第二步:利用read()、readline()、readlines()方法读取文件
第三步:调用clos()方法关闭文件
(1)read()方法:从当前位置读取到指定字符数之后停止。
(2)readline()方法:整行读取。
(3)readlines()方法:一次读取文件的所有行,再以列表类型返回所有行。
示例:
4.旅行线路添加:
from tkinter import *
root=Tk()
root.title("添加线路")
root.geometry("600x100")
root.resizable(0,0)
var=StringVar()
def intomap():
c=open("旅行线路.txt","a+")
c.write(var.get()+"\n")
c.close
Label(root,text="请输入线路",font=("Arial",10)).pack()
Entry(root,textvariable=var,width=550).pack()
Button(root,text="添加线路",command=intomap,relief="solid",width=10).pack()
root.mainloop()
5.制作文本编辑器:
from tkinter import * # 导入tkinter库
r = Tk() # 创建窗口
r.title('文本编辑器') # 设置标题
def do_open():
# 打开文件
file_path = entry_file.get() # 文件路径
c=open(file_path,"r",encoding="utf-8")
#text.insert(END,c.read())
content=c.read() #一次性读取文件内容,对大文件不宜使用
c.close()
text.delete(0.0,END) # 清空文本框内容
text.insert(END,content)
def do_save():
content = text.get(0.0,END) # 获取文本框内容
file_path = entry_file.get() # 文件路径
c=open(file_path,"w+")
c.write(content) # 写入数据到文件中
frm=Frame(r)
frm.pack()
entry_file = Entry(frm,width=40) # 创建一个文本输入框,用来设置文件路径
entry_file.pack(side=LEFT) # 放置该输入框
btn_open = Button(frm, text='打开',command=do_open) # 创建按钮用于打开文件
btn_save = Button(frm, text='保存',command=do_save) # 创建按钮用于保存文件
# 放置按钮
btn_open.pack(side=LEFT)
btn_save.pack(side=LEFT)
# 创建多行文本框,用于编辑文件
text = Text(r)
text.pack()
r.mainloop() # 进入消息循环