• 用tkinter做一个简单图形界面


    tkinter简介

    tkinter是Python自带的一个GUI包。优缺点非常明显:

    优点:简单、快速、无需安装

    缺点:界面复古,缺少对一些复杂功能的支持

    (注意,Python2的tkinter名称为Tkinter,我们不讨论它)

    启动tkinter

    在命令行输入

    python -m tkinter

    就会弹出一个tkinter窗口:
    在这里插入图片描述

    最上面首先是版本是8.6,点击click me!貌似什么都不会发生,点击QUIT就可以退出。

    下面介绍tkinter的简单用法,更多的可以去GUI是什么 (biancheng.net)

    Python GUI 编程(Tkinter) | 菜鸟教程 (runoob.com)Tkinter 8.5 reference: a GUI for Python (tkdocs.com)学习。

    tkinter HelloWorld

    使用tkinter创建一个窗口,标题名称为Hello,world。

    # -*- coding:utf-8 -*-
    import tkinter as tk
    # 调用Tk()创建主窗口
    root_window =tk.Tk()
    # 给主窗口起一个名字,也就是窗口的名字
    root_window.title('Hello,world')
    #设置窗口大小 450x300
    root_window.geometry('450x300')
    #开启主循环,让窗口处于显示状态
    root_window.mainloop()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 导入:tkinter

    2. 创建主窗口: root_window =tk.Tk()

    3. 设置窗口属性(标题、大小):

    root_window.title(‘Hello,world’)

    root_window.geometry(‘450x300’)

    1. 开启主循环

       root_window.mainloop()
      
      • 1

    tkiner 身高计算器

    现在我们来做一个有功能的tkinter程序。

    最终效果如下:我们输入身高,点击计算。然后程序通过计算,得到我们的身高并显示出来。

    在这里插入图片描述

    那么我们在上面Helloworld程序的基础上开始制作。首先,我们把窗口名改成“身高计算器”。

    root_window.title('身高计算器')

    在这里插入图片描述

    然后我们要把按钮,提示信息放上去。

    # root_window.geometry('450x300')下面添加...
    # 设置完窗口后,添加组件
    tk.Label(root_window, text="请输入身高").pack()
    
    cms= StringVar()
    tk.Entry(root_window, width=7, textvariable=cms).pack()
    
    tk.Label(root_window, text="cm").pack()
    tk.Label(root_window, text="你的身高是").pack()
    
    result = StringVar()
    tk.Label(root_window, textvariable=result).pack()
    
    tk.Label(root_window, text="cm").pack()
    
    B = tk.Button(root_window, text="计算")
    B.pack()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    我们主要用到了三种组件,tk.Labeltk.Entrytk.Button,分别表示文本标签、输入框、按钮。创建完组件后需要调用.pack()方法放置,否则不会出现在界面上。

    说明:以这个tk.Label为例。参数需要传入它的父容器(这里是root_window),文字内容(text=“请输入身高”)。然后调用.pack()方法将它放在窗口上。

    tk.Label(root_window, text="请输入身高").pack()

    这个我们也可以让Label的文字是一个变量。下面我们先创建一个变量result = StringVar(),然后将result作为tk.Label的参数。

    result = StringVar() tk.Label(root_window, textvariable=result).pack()
    在这里插入图片描述

    但是点击计算后,并不会有动作,我们还需要将点击按钮和功能绑定。

    我们定义函数calculate来实现功能,先获取输入的数据(cmt.get()),再设置输出文本的数据(result.set())。

    def calculate(*args):
        try:
            value = float(cms.get())
            result.set(value)
        except ValueError:
            pass
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    并且通过command=calculate 将calculate方法和点击按钮绑定。

    B = tk.Button(root_window, text="计算",command=calculate)
    
    • 1

    完整代码:

    # -*- coding:utf-8 -*-
    import tkinter as tk
    from tkinter import *
    
    # 调用Tk()创建主窗口
    root_window = tk.Tk()
    # 给主窗口起一个名字,也就是窗口的名字
    root_window.title('身高计算器')
    # 设置窗口大小 450x300
    root_window.geometry('450x300')
    
    # root_window.geometry('450x300')下面添加...
    # 设置完窗口后,添加组件
    tk.Label(root_window, text="请输入身高").pack()
    
    cms = StringVar()
    tk.Entry(root_window, width=7, textvariable=cms).pack()
    
    tk.Label(root_window, text="cm").pack()
    tk.Label(root_window, text="你的身高是").pack()
    
    result = StringVar()
    tk.Label(root_window, textvariable=result).pack()
    
    tk.Label(root_window, text="cm").pack()
    
    
    def calculate(*args):
        try:
            value = float(cms.get())
            result.set(value)
        except ValueError:
            pass
    
    
    B = tk.Button(root_window, text="计算", command=calculate)
    B.pack()
    
    # 开启主循环,让窗口处于显示状态
    root_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

    除了通过.pack()放置组件,另一种更灵活的方式是.grid(row=r,column=0)方式。这种方式将界面作为网格,然后在网格上放置组件。

    # 设置完窗口后,添加组件
    tk.Label(root_window, text="请输入身高",).grid(row=0,column=0)
    
    cms = StringVar()
    tk.Entry(root_window, width=7, textvariable=cms).grid(row=0,column=1)
    
    tk.Label(root_window, text="cm").grid(row=0,column=2)
    tk.Label(root_window, text="你的身高是").grid(row=1,column=0)
    
    result = StringVar()
    tk.Label(root_window, textvariable=result).grid(row=1,column=1)
    
    tk.Label(root_window, text="cm").grid(row=1,column=2)
    
    
    def calculate(*args):
        try:
            value = float(cms.get())
            result.set(value)
        except ValueError:
            pass
    
    
    B = tk.Button(root_window, text="计算", command=calculate)
    B.grid(row=3,column=3)
    
    • 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

    在这里插入图片描述

    当然,如果你觉得字体太小,也可以在font参数设置,font是一个三元组( family, size, style),分别是(字体,大小,格式)。

    tk.Label(root_window, text="请输入身高",font=("Courier", 24, "italic"),height=3).grid(row=0,column=0)
    
    • 1

    在这里插入图片描述

    tkinter BMI计算器

    稍作修改,我们就可以做出一个BMI计算器:

    在这里插入图片描述

    代码:

    # -*- coding:utf-8 -*-
    import tkinter as tk
    from tkinter import *
    
    # 调用Tk()创建主窗口
    root_window = tk.Tk()
    # 给主窗口起一个名字,也就是窗口的名字
    root_window.title('BMI计算器')
    # 设置窗口大小 450x300
    root_window.geometry('450x300')
    
    # root_window.geometry('450x300')下面添加...
    # 设置完窗口后,添加组件
    tk.Label(root_window, text="请输入身高cm",height=3).grid(row=0,column=0)
    cms = StringVar()
    tk.Entry(root_window, width=7, textvariable=cms).grid(row=0,column=1)
    tk.Label(root_window, text="cm").grid(row=0,column=2)
    
    tk.Label(root_window, text="请输体重kg",height=3).grid(row=1,column=0)
    kg = StringVar()
    tk.Entry(root_window, width=7, textvariable=kg).grid(row=1,column=1)
    tk.Label(root_window, text="kg").grid(row=1,column=2)
    
    
    tk.Label(root_window, text="你BMI是").grid(row=2,column=0)
    result = StringVar()
    tk.Label(root_window, textvariable=result).grid(row=2,column=1)
    
    
    
    def calculate(*args):
        try:
            cm_ = float(cms.get())
            kg_ = float(kg.get())
            value_ =  kg_ /  ((cm_/100) **2)
            value_ = value_.__round__(3)
            result.set(value_)
        except ValueError:
            pass
    
    
    B = tk.Button(root_window, text="计算", command=calculate)
    B.grid(row=3,column=3)
    
    # 开启主循环,让窗口处于显示状态
    root_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
  • 相关阅读:
    [python]常用配置读取方法
    工厂综合能源管理系统
    【Linux操作系统教程】用户管理与权限管理你真的懂了吗(三)
    .net 温故知新【17】:Asp.Net Core WebAPI 中间件
    深度学习中的图像融合:图像融合论文阅读与实战
    如何应对数据安全四大挑战?亚马逊云科技打出“组合拳”
    W2311294-万宾科技可燃气体监测仪怎么进行数据监测
    你觉得ACID别扭吗?已经习惯了的ACID,原来是为了凑单词缩写?
    函数对象使用
    hive表向es集群同步数据20230830
  • 原文地址:https://blog.csdn.net/qq_41068877/article/details/125642982