当前位置:网站首页>用tkinter做一个简单图形界面
用tkinter做一个简单图形界面
2022-07-06 16:59:00 【一只大鸽子】
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()
导入:tkinter
创建主窗口: root_window =tk.Tk()
设置窗口属性(标题、大小):
root_window.title(‘Hello,world’)
root_window.geometry(‘450x300’)
开启主循环
root_window.mainloop()
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()
我们主要用到了三种组件,tk.Label 、tk.Entry和tk.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
并且通过command=calculate 将calculate方法和点击按钮绑定。
B = tk.Button(root_window, text="计算",command=calculate)
完整代码:
# -*- 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()
除了通过.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)

当然,如果你觉得字体太小,也可以在font参数设置,font是一个三元组( family, size, style),分别是(字体,大小,格式)。
tk.Label(root_window, text="请输入身高",font=("Courier", 24, "italic"),height=3).grid(row=0,column=0)

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()
边栏推荐
- Stm32f407 ------- SPI communication
- Mujoco produces analog video
- 48页数字政府智慧政务一网通办解决方案
- Alexnet experiment encounters: loss Nan, train ACC 0.100, test ACC 0.100
- On February 19, 2021ccf award ceremony will be held, "why in Hengdian?"
- Matlab learning notes
- 【vulnhub】presidential1
- X.509 certificate based on go language
- JS import excel & Export Excel
- 基于SSM框架的文章管理系统
猜你喜欢

threejs图片变形放大全屏动画js特效
![[2022 the finest in the whole network] how to test the interface test generally? Process and steps of interface test](/img/8d/b59cf466031f36eb50d4d06aa5fbe4.jpg)
[2022 the finest in the whole network] how to test the interface test generally? Process and steps of interface test

Alexnet experiment encounters: loss Nan, train ACC 0.100, test ACC 0.100

How can computers ensure data security in the quantum era? The United States announced four alternative encryption algorithms

How to judge whether an element in an array contains all attribute values of an object

学习光线跟踪一样的自3D表征Ego3RT

如何判断一个数组中的元素包含一个对象的所有属性值

基于GO语言实现的X.509证书

Data analysis course notes (III) array shape and calculation, numpy storage / reading data, indexing, slicing and splicing

Service asynchronous communication
随机推荐
Matlab learning notes
Interface master v3.9, API low code development tool, build your interface service platform immediately
System activity monitor ISTAT menus 6.61 (1185) Chinese repair
Advanced learning of MySQL -- basics -- multi table query -- external connection
Markov decision process
Leecode brush questions record sword finger offer 11 Rotate the minimum number of the array
Mujoco produces analog video
stm32F407-------DAC数模转换
工程师如何对待开源 --- 一个老工程师的肺腑之言
What can the interactive slide screen demonstration bring to the enterprise exhibition hall
Web project com mysql. cj. jdbc. Driver and com mysql. jdbc. Driver differences
Advanced learning of MySQL -- basics -- multi table query -- subquery
深度学习之线性代数
深度学习之环境配置 jupyter notebook
How to use vector_ How to use vector pointer
37 pages Digital Village revitalization intelligent agriculture Comprehensive Planning and Construction Scheme
学习光线跟踪一样的自3D表征Ego3RT
Jenkins' user credentials plug-in installation
@TableId can‘t more than one in Class: “com.example.CloseContactSearcher.entity.Activity“.
2022/2/11 summary