• 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()
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

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

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

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

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

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

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

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

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

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

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

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

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

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

    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()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

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

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

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

    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()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

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

    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()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

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

    (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()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

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

    (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()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

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

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

  • 相关阅读:
    springboot项目如何打包成.sh脚本形式运行|assemly插件打包自定义脚本参数
    The-MIFARE-Hack-1 -mifare技术
    分享43个职场必备excel函数!(内含详细案例解析及教程参考)
    JavaScript 的发展历史
    JVisualVM 中线程状态(运行/休眠/等待/驻留/监视)解析
    使用 v-for 指令和数组来实现在 Uni-app 中动态增减表单项并渲染多个数据
    CTFHUB JWT(Json Web Token)
    rabbitmq-java-client源码结构设计与分析
    flask bootstrap页面json格式化
    MAVEN学习笔记
  • 原文地址:https://blog.csdn.net/Elon15/article/details/125384165