Python中的Tkinter(Python的GUI编程)

简介:

什么是GUI呢?
GUI是Graphical User Interface的首字母简写,翻译过来就是图像用户接口,简单理解就是,咋们window系统中窗口以及各种按钮、输入框、菜单栏等。
例如下图,开发GUI的目的就是为了让用户更好的使用软件和计算机。
在这里插入图片描述

学过java的小伙伴们应该都知道java里面的GUI编程,java中使用swing或者awt库。Python的GUI编程和java的基本一致,Python中使用Tkinter库中的那些组件,比如说:Label(标签)、Entry(输入框)、Button(按钮)、Text(文本框)来实现GUI编程。
这项技术已经不断被淘汰,但是学习总得学习一下的啦,接下来就使用真实案例和代码来学习一下吧。

主要内容:

1.标签label和按钮button的使用

# coding:utf-8

# 导入tkinter库,并且重命名为tk
import tkinter as tk

# 通过tk创建窗口
window = tk.Tk()
# 给窗口起个标题
window.title("新的窗口")
# 设定窗口的尺寸
window.geometry("1000x500")

# 创建组件中字符串变量,在组件里面使用
var = tk.StringVar()
# 设定标签,第一个参数是该组件的父组件,其他参数设定具体属性
l = tk.Label(window, textvariable=var, bg="red", font=("Arial", 12), width=15,
             height=2)
# 防止标签
l.pack()

on_hit = False
def hit():
    global on_hit
    # 默认最初没有点
    if on_hit == False:
        on_hit = True
        # 通过set方法设定组件中的变量
        var.set("你点击我了")
    else:
        on_hit = False
        var.set("")

# 创建按钮,并通过command进行点击后的函数处理
b = tk.Button(window, text="hit me", width=15, height=2, command=hit)
# 放置按钮
b.pack()

# 让窗口保持不断更新
window.mainloop()


效果图:
在这里插入图片描述

2.输入框entry的使用

# coding:utf-8
import tkinter as tk
"""
    entry和text控件的使用
"""

# 获取上窗口
window = tk.Tk()
# 设定窗口的名称
window.title("小把戏")
# 设定窗口的尺寸
window.geometry("1000x500")

# 设定输入框
entry = tk.Entry(window, show=None)
# 放置输入框
entry.pack()

# 末尾插入
def insert_end():
    e_content = entry.get()
    t.insert("end", e_content)


# 插入点进行插入
def insert_point():
    e_content = entry.get()
    t.insert("insert", e_content)


# 设定按钮1,最末尾进行插入
b1 = tk.Button(window, text="end insert", command=insert_end)
# 设定按钮2,在插入点进行插入
b2 = tk.Button(window, text="point insert", command=insert_point)


# 放置按钮1
b1.pack()
# 放置按钮2
b2.pack()

# 设定显示框
t = tk.Text()
# 放置位置
t.pack()


# 让窗口循环起来,保持不断的更新
window.mainloop()

效果图:
在这里插入图片描述

3.列表Listbox的使用

# coding:utf-8
import tkinter as tk
"""
    列表的使用
"""

# 获取窗口
window = tk.Tk()
# 设定窗口的名称
window.title("列表的使用")
# 设定窗口的尺寸
window.geometry("1000x500")

var1 = tk.StringVar()
# 创建标签
l = tk.Label(window, textvariable=var1, bg="yellow", width=15, height=2)
# 放置标签
l.pack()


def job():
    # 获取现在鼠标点击项的内容
    v = lb.get(lb.curselection())
    # 设定标签内容
    var1.set(v)


# 创建按钮
b = tk.Button(window, text="你给我上去", command=job)

# 放置按钮
b.pack()

var2 = tk.StringVar()
var2.set(("清华大学", "北京大学", "复旦大学", "交通大学"))
# 创建列表盒子
lb =tk.Listbox(window, listvariable=var2)
list_item = [1, 2, 3, 4]
# 循环插入
for m in list_item:
    lb.insert("end", m)

lb.insert(1, "first")
lb.insert(2, "second")
lb.delete(2)
lb.pack()

# 循环窗口
window.mainloop()

效果图:
在这里插入图片描述

4. 单选按钮Radiobutton的使用

# coding:utf-8
import tkinter as tk
"""
    使用单选按钮
"""

window = tk.Tk()
window.title("抽奖系统")
window.geometry("1000x500")


# tkinter中的变量都是这样的
var = tk.StringVar()
# 使用标签显示单选之后的结果
l = tk.Label(window, text=" ", bg="green", width=30, height=2)
# 放置标签
l.pack()

def job():
    l.config(text = "恭喜您抽到了" + var.get())


# 创建单选按钮A
rb1 = tk.Radiobutton(window, text="礼物A", variable=var, value="MacBook", command=job)
rb1.pack()

# 创建单选按钮B
rb2 = tk.Radiobutton(window, text="礼物B", variable=var, value="iphone", command=job)
rb2.pack()

# 创建单选按钮C
rb3 = tk.Radiobutton(window, text="礼物C", variable=var, value="ipad", command=job)
rb3.pack()


# 循环起来
window.mainloop()

效果图:
在这里插入图片描述

5.尺度scale的使用

# coding:utf-8
import tkinter as tk
"""
    scale的使用
"""

# 获取窗口
window = tk.Tk()
# 设置窗口的标题
window.title("调节音量")
# 设置窗口的尺寸
window.geometry("1000x500")



# 设置标签
l = tk.Label(window, bg="yellow", width=30, height=2, text="")
# 放置标签
l.pack()

# scale部件,默认会将自己的值作为参数进行传递
def job(v):
    l.config(text="现在的音量是" + v)

# 定义一个scale,设定其长度,具体起始点,水平方向,精度等
scale = tk.Scale(window, length=500, orient=tk.HORIZONTAL,from_ = 0,to=100,
                 tickinterval=10, resolution=0.01, showvalue=1, command=job)
# 放置scale
scale.pack()



# 让窗口循环起来
window.mainloop()

效果图:
在这里插入图片描述

6.多选按钮Checkbutton的使用

# coding:utf-8
import tkinter as tk

"""
    多选按钮的使用
"""

# 创建窗口
window = tk.Tk()

# 设置窗口的标题
window.title("练习多选按钮")
# 设置窗口的尺寸
window.geometry("1000x500")

# 组件中的整数变量写法
var1 = tk.IntVar()
var2 = tk.IntVar()
# 标签
l = tk.Label(window, bg="yellow", text="", width=20, height=2)
# 放置标签
l.pack()

def job():
    if var1.get() == 1 and var2.get() == 0:
        l.config(text="I only love C++")
    elif var1.get() == 0 and var2.get() == 1:
        l.config(text="I only love Python")
    elif var1.get() == 0 and var2.get() == 0:
        l.config(text="I don't love either")
    else:
        l.config(text="I both love them")


# 多选按钮
cb1 = tk.Checkbutton(window, text="C++", variable=var1, onvalue=1, offvalue=0, command=job)
cb2 = tk.Checkbutton(window, text="Python", variable=var2, onvalue=1, offvalue=0, command=job)
cb1.pack()
cb2.pack()



# 循环
window.mainloop()

效果图:
在这里插入图片描述

7.画布canvas的使用

# coding:utf-8
import tkinter as tk

"""
    画布的使用
"""

# 创建窗口
window = tk.Tk()
# 设定窗口的标题
window.title("画布的使用")
# 设定画布的尺寸
window.geometry("1000x500")

# 创建画布
canvas = tk.Canvas(window, bg="blue", height=400, width=700)
# 加载图片文件
image_file = tk.PhotoImage(file="F:\\研究生0年级\\learnAI\\a.png")
# 将图片放在画布中的具体位置
image = canvas.create_image(10, 10, anchor="nw", image = image_file)


# 画布中画各种形状
x0, y0, x1, y1 = 50, 50 ,80, 80
# 画线
line = canvas.create_line(x0, y0, x1, y1)
# 圆型
circular = canvas.create_oval(x0, y0, x1, y1, fill="red")
# 扇形
arc = canvas.create_arc(x0+30, y0+30, x1+30, y1+30, start=0, extent=120)
# 正方形,边长为20
rect = canvas.create_rectangle(100, 30, 100+20, 30+20)

canvas.pack()

# 移动函数
def move():
    canvas.move(rect, 0, 20)

# 按钮
b = tk.Button(window, text="移动", command=move)
b.pack()
# 循环起来
window.mainloop()

效果图:
在这里插入图片描述

8.菜单栏menubar的使用

# coding:utf-8
import tkinter as tk
"""
    menubar菜单栏
"""

# 获取窗口
window = tk.Tk()
# 设定窗口名称
window.title("菜单栏的使用")
# 设定窗口的大小
window.geometry("1000x500")

# 放一个标签
l = tk.Label(window, text="", width=50, height=5, bg="yellow")
l.pack()

counter = 0
def job():
    global counter
    l.config(text="do %d" %counter)
    counter += 1


# 获取菜单栏
menubar = tk.Menu(window)

# 菜单1之文件菜单
filemenu = tk.Menu(menubar, tearoff=0)
# 使用菜单栏将文件菜单添加进去
menubar.add_cascade(label="文件", menu=filemenu)
filemenu.add_command(label="新建", command=job)
filemenu.add_command(label="打开", command=job)
filemenu.add_command(label="保存", command=job)
# 分割线
filemenu.add_separator()
# 退出
filemenu.add_command(label="退出", command=window.quit)

# 菜单2之大学
universitymenu = tk.Menu(menubar, tearoff=0)
# 使用菜单栏将菜单2添加进去
menubar.add_cascade(label="大学", menu=universitymenu)
universitymenu.add_command(label="清华大学", command=job)
universitymenu.add_command(label="北京大学", command=job)
universitymenu.add_command(label="浙江大学", command=job)


# 创建二级菜单,文件菜单是一级菜单,所以是父组件
second_menu = tk.Menu(filemenu)
# 文件菜单父组件将二级菜单进行添加
filemenu.add_cascade(label="导入", menu=second_menu, underline=0)
# 二级菜单中放具体项
second_menu.add_command(label="你好",command=job)



# 将创建的菜单栏,修改进原窗口中
window.config(menu=menubar)
# 循环起来
window.mainloop()

效果图:
在这里插入图片描述

9. 框架frame的使用

# coding:utf-8
import tkinter as tk
"""
    框架frame的使用
"""

# 创建窗口
window = tk.Tk()
# 设定窗口的标题
window.title("其实就是划分区域呗")
# 设定窗口的尺寸
window.geometry("1000x500")

# 先创建标签,并放置
l = tk.Label(text="on the window").pack()
# 窗口里面的大框架
frm = tk.Frame(window)
# 放置这个框架
frm.pack()


# 左侧框架
frm1 = tk.Frame(frm,)
# 将框架放置到左侧
frm1.pack(side="left")

# 右侧框架
frm2 = tk.Frame(frm,)
# 将框架放置到右侧
frm2.pack(side="right")

# 划分好区域之后,进行分区域放标签
tk.Label(frm1, text="左侧标签1").pack()
tk.Label(frm1, text="左侧标签2").pack()
tk.Label(frm2, text="右侧标签").pack()



# 使窗口循环起来
window.mainloop()

效果图:
在这里插入图片描述

10. 弹窗messagebox的使用

# coding:utf-8
import tkinter as tk
import tkinter.messagebox
from tkinter import messagebox
"""
    弹窗的使用
"""

# 获取窗口
window = tk.Tk()
# 设置窗口标题
window.title("弹窗的使用")
# 设置窗口的大小
window.geometry("1000x500")

def job():
    # 弹窗展示信息
    tkinter.messagebox.showinfo(title="Hi", message='hahahah')
    # warning
    # tkinter.messagebox.showwarning(title="warining", message="警告")
    # error
    # tkinter.messagebox.showerror(title="error", message="错误")
    # 询问框,返回yes或者no
    # print(tk.messagebox.askquestion(title="询问yes或no", message="Are you OK?"))
    # 询问框,返回True或者FALSE
    # print(tk.messagebox.askyesno(title="询问true或false", message="Do you love me?"))
    # 询问确认还是取消,返回true和false
    # print(tk.messagebox.askokcancel(title="购物", message="确定要购买吗?"))
    # 询问重试还是取消,返回true和false
    # print(tk.messagebox.askretrycancel(title="爱", message="你爱我吗?"))


b = tk.Button(window, text="点我试试", command=job).pack()


# 循环起来
window.mainloop()

效果图:
在这里插入图片描述

11.组件的三种放置方式

(1)pack
# coding:utf-8
import tkinter as tk
"""
    pack、gird、place三种放置方式
"""


# 获取窗口
window = tk.Tk()
# 设定窗口的标题
window.title("放置组件的三种方法")
# 设定窗口尺寸
window.geometry("1000x500")

tk.Label(window, text="上面").pack(side="top")
tk.Label(window, text="下面").pack(side="bottom")
tk.Label(window, text="左面").pack(side="left")
tk.Label(window, text="右面").pack(side="right")



# 循环起来
window.mainloop()

效果图:
在这里插入图片描述

(2)grid
# coding:utf-8
import tkinter as tk
"""
    pack、grid、place三种放置方式
"""


# 获取窗口
window = tk.Tk()
# 设定窗口的标题
window.title("放置组件的三种方法")
# 设定窗口尺寸
window.geometry("1000x500")

for i in range(4):
    for j in range(3):
        # padx和pady是用来扩展每个方格的大小
        tk.Label(window, text="love").grid(row=i, column=j, padx=50, pady=50)




# 循环起来
window.mainloop()

效果图:
在这里插入图片描述

(3)place
# coding:utf-8
import tkinter as tk
"""
    pack、grid、place三种放置方式
"""


# 获取窗口
window = tk.Tk()
# 设定窗口的标题
window.title("放置组件的三种方法")
# 设定窗口尺寸
window.geometry("1000x500")

# 以最西北方向为坐标原点,在具体的xy坐标位置,放置
tk.Label(window, text="啊啊啊啊").place(x=100, y=100, anchor="nw")

# 循环起来
window.mainloop()

效果图:
在这里插入图片描述

附录:以上内容参考自——莫烦Python,有用的话,记得点赞+收藏+关注!本文有问题的地方也恳请指正!!!下一篇将介绍如何使用tkinter做一个真实案例。

猜你喜欢

转载自blog.csdn.net/Elon15/article/details/125384165