tkinter 是 Python 的标准 GUI 库。它基于 Tk 工具包,该工具包最初是为工具命令语言(Tool Command Language,Tcl)设计的。Tk 普及后,被移植到很多其他的脚本语言中,包括 Perl,Ruby 和 Python。结合 Tk 的可移植性与灵活性,以及与系统语言功能集成的脚本语言的简洁性,可以快速开发 GUI 应用程序
对于gui编程我是这样理解的, 我们小时候都玩过积木,只要发挥创意,相同的积木可以堆出各种造型。tkinter的组件也可以看做一个个积木,形状或许不同,其本质都是一样的,就是一个积木,不管它长什么样子,它始终就是积木!我们主要学习他如何使用,如何放置,至于积木如何制作出来的不用管。
创建gui程序的步骤
创建一个 GUI 应用程序需要以下 5 个主要步骤。
# 第一步 导入包
from tkinter import * #导入包
from tkinter import messagebox # 弹出消息框
# 功能:应用按钮控件和弹出对话框控件
# 作者:摘星
# 第二步 创建顶层窗口对象,并设置相关数据
root =Tk() #创建一个主窗口,所有的控件都是放在这里面的
root.title("我的第一个gui窗体") # 标题
root.geometry("600x600+200+100") #控制主窗口的大小和位置(宽x高+距左边位置+据上边位置)
# 第三步 创建相关控件
btn01=Button(root) #创建一个(对象)按钮控件,将对象放进主窗口中
btn01["text"]="开始按钮" #给这个按钮取个名字
# 第四步 确定控件放置位置,并设置单击事件
btn01.pack() # 这东西负责布局,就是控件放在主窗口中的位置,如果没有会看不见
def hy(e):
#这个必须有参数的
'''单击按钮会发生的事情'''
messagebox.showinfo("欢迎","欢迎你进入gui的世界")
btn01.bind("" , hy) #绑定单击事件
第五步,开始事件循环
root.mainloop() #可以理解为开始方法
Tkinter支持16个核心的窗口部件,这个16个核心窗口部件类简要描述如下:
# 功能: 标签按钮的使用
# 作者:摘星
from tkinter import *
root=Tk() # 创建一个主窗口
root.title("标签学习")
root.geometry('500x300')
lan=Label(root,text="你好世界",bg="red",font="华文彩云",width="12",height="2",)
# 说明: bg为背景,font为字体,width为长,height为高,这里的长和高是字符的长和高,比如height=2,就是标签有2个字符这么高
lan.pack() # 设置布局,后面会详细讲
root.mainloop(
简单说明:
Entry是tkinter类中提供的的一个单行文本输入域,用来输入显示一行文本,收集键盘输入(类似 HTML 中的 text)。
from tkinter import *
# 功能:学习使用Entry控件
#作者: 摘星
# 创建主窗口
root=Tk()
root.title("登录")
root.geometry("500x500")
lab1=Label(root,text="用户名:") #标签
lab2=Label(root,text="密码:") #标签
text1=Entry(root,font=('华文彩云',14)) # 明文
text2=Entry(root,font=('华文彩云',14),show='*') # 密文
# 下面是布局,先不要管什么后面会说
lab1.place(x=120,y=150)
lab2.place(x=120,y=175)
text1.place(x=150,y=150)
text2.place(x=150,y=175)
# 得到文本框中的内容
name=text1.get()
woss=text2.get()
print("用户名是:{0},密码是:{1}".format(name,woss)) #这里留下了一个坑,后面会填
#开启事件循环
root.mainloop()
简单说明:
Text是tkinter类中提供的的一个多行文本区域,显示多行文本,可用来收集(或显示)用户输入的文字(类似 HTML 中的 textarea),格式化文本显示,允许你用不同的样式和属性来显示和编辑文本,同时支持内嵌图象和窗口。
from tkinter import * # 使用Tkinter前需要先导入
# 第1步,实例化object,建立窗口window
root = Tk()
# 第2步,给窗口的可视化起名字
root.title('多行文本框')
# 第3步,设定窗口的大小(长 * 宽)
root.geometry('500x300') # 这里的乘是小x
# 第4步,创建并放置一个多行文本框text用以显示,指定height=3为文本框是三个字符高度
t=Text(root,height=3)
t.pack()
# 第5步,主窗口循环显示
root.mainloop()
简单说明:
Menu:菜单条,用来实现下拉和弹出式菜单,点下菜单后弹出的一个选项列表,用户可以从中选择
from tkinter import *
from tkinter import messagebox
# 创建窗口
root=Tk()
root.title("记事本")
root.geometry('500x300')
#建立事件方法
def bj():
'''编辑方法'''
messagebox.showinfo(title='编辑', message='点了编辑菜单')
def bz():
messagebox.showinfo(title='帮助',message='帮助功能正在开发')
def ck():
'''查看方法'''
c=t.get(1.0,END) # 获取文本域输入
messagebox.showinfo(title="查看",message=c)
# 创建一个菜单栏,这就是个容器哈,里面专门放菜单项的
menubar=Menu(root)
#创建菜单项
M1=Menu(menubar) # 项1
M2=Menu(menubar) # 项2
M3=Menu(menubar) # 项3
# 給上面创建的菜单系命名并添加到菜单项中
menubar.add_cascade(label="文件",menu=M1)
# 加入菜单,与上不同哦
menubar.add_command(label="编辑",command=bj)
menubar.add_command(label="帮助",command=bz)
#在文件菜单中加入一些小菜单,打开,保存,新建等等
M1.add_command(label='查看',command=ck)
M1.add_command(label='打开')
M1.add_command(label="保存")
# 完了之后还要显示菜单栏
root.config(menu=menubar)
# 创建一个多行文本框
t=Text(root,height=3)
t.pack()
root.mainloop()
tkinter 有三种布局方式
以下的代码就是创建一个三行三列的表格,其实 grid 就是用表格的形式定位的。这里的参数 row 为行,colum 为列,padx 就是单元格左右间距,pady 就是单元格上下间距,ipadx是单元格内部元素与单元格的左右间距,ipady是单元格内部元素与单元格的上下间距
import tkinter as tk # 使用Tkinter前需要先导入
# 摘星
# 测试tkinter的grid布局
# 第1步,实例化object,建立窗口window
window = tk.Tk()
# 第2步,给窗口的可视化起名字
window.title('My Window')
# 第3步,设定窗口的大小(长 * 宽)
window.geometry('500x300') # 这里的乘是小x
# 第4步,grid 放置方法
for i in range(3):
for j in range(3):
tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10, ipadx=10, ipady=10)
# 第5步,主窗口循环显示
window.mainloop()
我们上面用的pack(), 他会按照上下左右的方式排列.例如
import tkinter as tk # 使用Tkinter前需要先导入
# 作者:摘星
# 功能: 测试pack布局
# 第1步,实例化object,建立窗口window
window = tk.Tk()
# 第2步,给窗口的可视化起名字
window.title('My Window')
# 第3步,设定窗口的大小(长 * 宽)
window.geometry('500x300') # 这里的乘是小x
# 第4步,pack 放置方法
tk.Label(window, text='我是上', fg='red').pack(side='top') # 上
tk.Label(window, text='我是下', fg='red').pack(side='bottom') # 下
tk.Label(window, text='我是左', fg='red').pack(side='left') # 左
tk.Label(window, text='我是右', fg='red').pack(side='right') # 右
# 第5步,主窗口循环显示
window.mainloop()
再接下来我们来看place(), 这个比较容易理解,就是给精确的坐标来定位,如此处给的(50, 100),就是将这个部件放在坐标为(x=50, y=100)的这个位置,
import tkinter as tk # 使用Tkinter前需要先导入
# 测试place布局
# 摘星
# 第1步,实例化object,建立窗口window
window = tk.Tk()
# 第2步,给窗口的可视化起名字
window.title('My Window')
# 第3步,设定窗口的大小(长 * 宽)
window.geometry('500x300') # 这里的乘是小x
# 第4步,place 放置方法(精准的放置到指定坐标点的位置上)
tk.Label(window, text='软件二班', font=('华文彩云', 20), ).place(x=50, y=100, anchor='nw')
# 第5步,主窗口循环显示
window.m
from tkinter import *
from tkinter import messagebox
from tkinter.colorchooser import *
from tkinter.filedialog import *
# 创建窗口
filename=''
root=Tk()
root.title("记事本")
root.geometry('500x300')
#建立事件方法
def xj():
'''新建方法'''
global filename # 声明全局
filename=asksaveasfilename(title="另存为",initialfile="未命名.txt"
,filetypes=[("文本对象","*.txt")]
,defaultextension=".txt")
bc()
def dk():
'''打开文件方法'''
global filename # 声明全局
t.delete("1.0","end")
with askopenfile(title="打开文本文件") as f:
# askopenfile是内部提供的方法
t.insert(INSERT,f.read())
filename=f.name
def bc():
'''保存方法'''
with open(filename,'w')as f:
c=t.get(1.0,END)
f.write(c)
def bj():
'''编辑方法'''
messagebox.showinfo(title='编辑', message='点了编辑菜单')
def bz():
'''帮助方法'''
messagebox.showinfo(title='帮助',message='帮助功能正在开发')
# 创建一个菜单栏,这就是个容器哈,里面专门放菜单项的
menubar=Menu(root)
#创建菜单项
M1=Menu(menubar) # 项1
M2=Menu(menubar) # 项2
M3=Menu(menubar) # 项3
# 給上面创建的菜单系命名并添加到菜单项中
menubar.add_cascade(label="文件",menu=M1)
# 加入菜单,与上不同哦
menubar.add_command(label="编辑",command=bj)
menubar.add_command(label="帮助",command=bz)
#在文件菜单中加入一些小菜单,打开,保存,新建等等
M1.add_command(label='新建',command=xj)
M1.add_command(label='打开',command=dk)
M1.add_command(label="保存",command=bc)
# 完了之后还要显示菜单栏
root.config(menu=menubar)
# 创建一个多行文本框
t=Text(root,height=10)
t.pack()
root.mainloop()