Python GUI之tkinter库教程

tkinter的简介

tkinter 是 Python 的标准 GUI 库。它基于 Tk 工具包,该工具包最初是为工具命令语言(Tool Command Language,Tcl)设计的。Tk 普及后,被移植到很多其他的脚本语言中,包括 Perl,Ruby 和 Python。结合 Tk 的可移植性与灵活性,以及与系统语言功能集成的脚本语言的简洁性,可以快速开发 GUI 应用程序

对于gui编程我是这样理解的, 我们小时候都玩过积木,只要发挥创意,相同的积木可以堆出各种造型。tkinter的组件也可以看做一个个积木,形状或许不同,其本质都是一样的,就是一个积木,不管它长什么样子,它始终就是积木!我们主要学习他如何使用,如何放置,至于积木如何制作出来的不用管。

GUI编程步骤

创建gui程序的步骤
创建一个 GUI 应用程序需要以下 5 个主要步骤。

  1. 导入 tkinter 模块(import tkinter)
  2. 创建一个顶层窗口对象(调用 Tk()函数),用于容纳整个 GUI 应用。
  3. 在顶层窗口对象上构建所有的 GUI 控件(按钮、标签、文本框、消息框)
  4. 通过底层应用代码将这些 GUI 控件连接起来并确定控件的放置位置
  5. 进入主事件循环(调用 mainloop()函数)
# 第一步 导入包
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("<Button-1>", hy) #绑定单击事件


第五步,开始事件循环
root.mainloop() #可以理解为开始方法

tkinter常用控件

tkinter常用模块说明

在这里插入图片描述

常用控件的介绍

Tkinter支持16个核心的窗口部件,这个16个核心窗口部件类简要描述如下:

  • Button:一个简单的按钮,用来执行一个命令或别的操作
  • Canvas:组织图形。这个部件可以用来绘制图表和图,创建图形编辑器,实现定制窗口部件。
  • Checkbutton:代表一个变量,它有两个不同的值。点击这个按钮将会在这两个值间切换。
  • Entry:文本输入域。
  • Frame:一个容器窗口部件。帧可以有边框和背景,当创建一个应用程序或dialog(对话)版面时,帧被用来组织其它的窗口部件。
  • Label:显示一个文本或图象。
  • Listbox:显示供选方案的一个列表。listbox能够被配置来得到radiobutton或checklist的行为。
  • Menu:菜单条。用来实现下拉和弹出式菜单。
  • Menubutton:菜单按钮。用来实现下拉式菜单。
  • Message:显示一文本。类似label窗口部件,但是能够自动地调整文本到给定的宽度或比率
  • Radiobutton:代表一个变量,它可以有多个值中的一个。点击它将为这个变量设置值,并且清除与这同一变量相关的其它radiobutton。
  • Scale:允许你通过滑块来设置一数字值。
  • Scrollbar:为配合使用canvas, entry, listbox, and text窗口部件的标准滚动条。
  • Text:格式化文本显示。允许你用不同的样式和属性来显示和编辑文本。同时支持内嵌图象和窗口。
  • Toplevel:一个容器窗口部件,作为一个单独的、最上面的窗口显示。
  • messageBox:消息框,用于显示你应用程序的消息框。(Python2中为tkMessagebox)
常用控件使用案例
1、创建主窗口及Label部件(标签)创建使用
# 功能: 标签按钮的使用
# 作者:摘星
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(
2、Entry控件的使用

简单说明:

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()

3、Text控件的使用

简单说明:  
  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()
4、 Menu窗口部件

简单说明:

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布局管理器

tkinter 有三种布局方式

1、grid布局(方格布局)

以下的代码就是创建一个三行三列的表格,其实 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()
2、Pack布局

我们上面用的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()
3、Place布局

再接下来我们来看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

tkinter综合案例——记事本

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()

猜你喜欢

转载自blog.csdn.net/weixin_45795349/article/details/106871411