Python-tkinter开发学习 笔记
教程地址,感谢!
目录:
课时一
GUI:用户交互界面
kinter 介绍
是python自带的gui库,对图形图像处理库tk的封装
自带用着方便,跨平台,够用。
其他gui:pythonwin,wxpython,pyQT等等。
导入tkinter 库:import tkinter
查询官方帮助:help(tkinter)
概念介绍
- 组件:组成界面的构成内容就是组件。按钮,文本输入框,滚动条,列表,菜单等等。
- 窗口:一个软件的矩形区域。
最简单的界面
# 导入模块
import tkinter
# 创建主窗口对象
root = tkinter.T=Tk() # 实例化主体,类
# 将主窗口加入消息循环
root.mainloop()
实现简单的模块
# 导入模块
import tkinter
# 创建主窗口对象
root = tkinter.Tk() # 实例化主体,类
# 设置窗口的大小
root.minsize(300, 300) # 设置窗口的最小大小为200*200px
# 加入一个按钮的组件
# 先创建一个按钮组件
btn = tkinter.Button(root, text = '这是按钮的文本')
# root 表示将这个按钮放在哪里 (只是在内存中创建了,并没有摆放)
# 摆放按钮(最简单的)
btn.pack()
# 将主窗口加入消息循环
root.mainloop()
组件的摆放方式
- pack()方式 --> 方位摆放方法(上下左右)(不推荐使用)
a. 上(top),下(bottom),左(left),右(right) - grid()方式 --> 网格摆放方法(网格坐标)
a. 把界面变成网格,对网格横纵坐标编号.告诉坐标就可以把组件放在具体地方.
b. 适合做格子类的东西,计算器 颜色选择框等. - place()方式 --> 定位摆放方法(具体像素)
a. 也有横纵坐标单位是像素.告诉离上边有多远,离左边有多远 即可确定位置 .
b. 适合软件拖放的架构
pack()方式例子
# pack()方式:
import tkinter
root = tkinter.Tk()
---
# 创建组件
btn1 = tkinter.Button(root, text = '按钮1')
btn1.pack(sidel = 'top') # side表示放,后面值是上下左右,默认是top
# 如果是多个组件 上摞的 不好用.
# ipadx, ipady : 设置组件的内部间距.
btn1.pack(ipadx = 20, ipady = 20) # 横轴纵轴各增加20像素的空间.
# padx, pady 表示距离左右上下组件的间距 单位也是px
# fill 填充
btn1.pack(fill = 'x') # 水平方向的最大位置(一整行).
btn1.pack(fill = 'y') # 垂直方向的最大位置(一整列)但是摆放方式必须是左和右.
btn.pack(fill =
# expand 设置side是否失效.
btn1.pack(expand = 'yes') # 按钮会在中间,占用了所有组件的空间
root.mainloop()
gird() 方式例子
# 网格没有具体大小,取决于当前组件 最大组件的大小!
import tkinter
root = tkinter.Tk()
root.minsize(500, 500)
btn1 = tkinter.Button(root, text = '按钮1')
btn1.grid() # 不设置,默认行列为0
btn1.grid(row = 0, column = 0) # 和上面一个意思
btn2 = tkinter.Button(root, text = '按钮2')
btn2.grid(row = 1, column = 0) # 行1列0
btn3 = tkinter.Button(root, text = '按钮3')
btn3.grid(row = 0, column = 1) # 行0列1
'''
如果想跨行跨列 有如下两个参数:
rowspan: 设置跨行数量
cloumnspan: 设置跨列数量
'''
btn0 = tkinter.Button(root, text = '按钮0')
btn0.grid(row = 2, column = 0, columnspan = 2, ipadx
= 20) #要设置组件的大小
btnd = tkinter.Button(root, text = ' = ')
btnd.grid(row = 0, column = 2, rowspan = 2, ipady
= 20)
root.mainloop()
place方式例子
# 两组属性,不可混合使用!!!
# 绝对定位布局
import tkinter
root = tkinter.Tk()
root.minsize(500, 500)
btn1 = tkinter.Button(root, text = '按钮1')
btn1.place(x = 100, y = 20, width = 50, height = 50)
# 如果不设置组件位置会什么也不出现,但不报错,因为组件没有定位所以显示在看不到的地方了
# x:设置距离左上角的水平长度,y:设置距离左上角的垂直高度.
# width:设置组件所占据的宽度,height:设置组件所占的高度.
# 这种布局方式拉动主窗口,所有的组件都不会动!因为是绝对定位布局,设置多少就是多少!
# 这里所有的单位都是像素
# 相对定位布局。
# 好处是可以随界面变化而变化。
# relx:设置距离左上角的水平长度的百分比,rely:设置距离左上角的垂直高度的百分比.
# relwidth:设置组件所占据的宽度的百分比,relheight:设置组件所占的高度的百分比.
import tkinter
root = tkinter.Tk()
root.minsize(500, 500)
btn1 = tkinter.Button(root, text = '按钮1')
btn1.place(relx = 0.2, rely = 0.1, relwidth = 0.1, relheight = 0.1)
# relx:当前组件左边占整个宽度的百分比,高度同理。
# relwidth:设置当前宽度占整体宽度的10%,高度同理。
# 以上设置都是相对于界面宽度和高度的百分比,可以根据界面的大小而改变(取值是0到1)
root.mainloop()
课时二
官方文档可以搜索 python tkinter 去官网查询.
基本(标准)属性介绍
有tkinter.xxx 这个类的属性,可以选择,也可以自己写参数.
外形尺寸
import tkinter
root = tkinter.Tk()
root.minsize(500, 500) # 所有属性尽量只用默认像素或者其他字符类的值.
btn1 = tkinter.Button(root, text = '尺寸')
btn1.pack(ipadx = 100, ipady = 200) # 尺寸的绝大部分尺寸的默认单位是像素
root.mainloop()
坐标系
btn1 = tkinter.Button(root, text = '坐标系')
btn1.place(x = 100, y = 50) # 设置坐标系.
颜色
btn1 = tkinter.Button(root, text = '颜色', bg = 'blue')
# bg:按钮的背景色.
# 可以使用颜色单词
# 使用hex颜色模式(例子:#ff0000)(#红色绿色蓝色)(也就是十六进制颜色)
btn1.pack()
字体属性
btn1 = tkinter.Button(root, text = '字体', font = ('黑体',40,'bold','italic'))
# 字体设置以元祖出现,分别是 字体,字号,黑体,斜体等等.
btn1.pack()
锚点
btn1 = tkinter.Button(root, text = '锚点', anchor = 'nw')
# 锚点就是方向的代名词
# 按照上北下南左东右西 写简写值就可以.
btn1.pack(ipadx = 20, iapdy = 20)
三维效果
btn1 = tkinter.Button(root, text = '三维效果', relief = 'ridge')
# 有几种效果:flat, raised, sunken, groove, ridge
# relief关键字 = 值(字符串)即可
# 也可以用 tkinter.FLAT 替代参数.
btn1.pack(ipadx = 20, iapdy = 20)
位图
btn1 = tkinter.Button(root, text = '位图', bitmap = 'error')
# 内置的位图图标库
# bitmap 属性.
# error gray75 gray50 gray25 gray12 hourglass info guesthead question waring
# 也可以使用自己的位图文件, .xbm(x位图)格式的文件都可以用,代替标准位图名称,使用字符串@ 后跟.xbm文件的路径名.
btn1.pack(ipadx = 20, iapdy = 20)
鼠标
# 用的比较少,可以自定义鼠标的各种状态,库里自带,也可以去文档中查询
btn1 = tkinter.Button(root, text = '鼠标', cursor = 'heart')
btn1.pack(ipadx = 20, iapdy = 20)
# 如果要设置整个主窗口
root['cursor'] = 'start'
图片
# 有两种
# 第一种bmp格式和位图意思一样.很少用 略
# 第二种 PhotoImage类
# 支持.gif和.pgm和.ppm格式
# 将图片设置为图像推向
long = tkinter.PhotoImage(file = 'long.gif')
btn1 = tkinter.Button(root, text = '图片', image = long)
btn1.pack()
设置界面大小,几何字符串
imoprt tkinter
root = tkinter.Tk()
root.geometry('300x400') # 几何字符串
常用组件
Frame 框架
功能:用来承载放置其他GUI元素,就是一个容器。用来进行区域划分
# 外部的代码都是重复的省略
frame1 = tkinter.Frame(root, bg = 'black', width = 100, height = 200)
frame1.pack()
frame2 = tkinter.Frame(roott, bg = 'black' , width = 100, height = 200))
frame2.pack()
# 正常情况下是看不到这两个容器的 因为容器是虚拟的,为了方便可以加一个背景颜色就看到了
# 设定背景颜色后 看到很小的两个点 是因为虚拟容器的大小是根据它里面的内容决定的
# 我们可以用width和height参数设定容器的大小.
# 下面展示如何在框架中放入内容
# 假设要摆放按钮
btn1 = tkinter.Button(frame1, text = '按钮1')
btn1.pack(side = 'left')
btn2 = tkinter.Button(frame1, text = '按钮2')
btn2.pack(side = 'left')
btn3 = tkinter.Button(frame1, text = '按钮3')
btn3.pack(side = 'left')
# 背景会根据元素的大小调整,所以背景被覆盖了,可以在pack的时候用padx属性设置边框 就可以显示出来了
# 放到框架2 里面是一样的效果
# 但是这样依然不要用pack方式摆放东西!
Label 标签
功能:用于显示不可编辑的文本或图标,就是界面上‘死’的东西(文字或图片)
# 外部的代码都是重复的省略
label = tkinter.Label(root, text = '这是一个标签') # 摆放文字 各种通用属性都可以用.但是一样用的少.
Button 按钮
功能:点击时执行一个动作
案例:
import tkinter
root = tkinter.Tk()
root.geometry('300x300') # 设置界面大小,用几何字符串设置
btn1 = tkinter.Button(root,)
# root: 表示放的父组件未知子
# bg: 背景色
# text: 文本内容
# fg: 前景色
# font: 字体 (元祖方式 看上面)
# command: 单击按钮时要调用的函数或方法.
# width 和 height 是使用4字符大小,不推荐用
# justify: 设置多行文本的对其方式.left right 等
# state: 状态,按钮能不能点! 用于控制!(active, disabled, normal)
# bd: 边框粗细.单位像素
# 其他去文档里查
btn1.pack()
Entry 单行文本输入框
# 外部的代码都是重复的省略
username = tkinter.Entry(root)
username.pack()
# 默认20个字符
# 可以自定义 用width属性设置,注意单位是字符.
# 通用设置都是一样的
# 如果用密码要掩码的话这样写
password = tkinter.Entry(root, show = '*')
# show属性用来显示你输入的内容.做安全用
# Entry 可以用state状态 控制是否可以输入,或者展示用.'disabled'表示关闭
password.pack()
功能:显示一行文本,可以输入的单行文本
Text 多行文本
功能:显示多行文本,可以输入的多行文本
Checkbutton 复选框
功能:选择框,允许用户选择或不选择一个选项
import tkinter
root = tkinter.Tk()
root.geometry('500x500')
checkbutton = tkinter.Checkbutton(root,text = '要显示的文本') # text 文字是固定的可以这么写
checkbutton.pack()
# 如果字要改变
# 设置显示内容tkinter变量
text = tkinter.StringVar() # 创建变量
text.set('同意此价格') # 设置变量(设置用set,如果想要获取用get)
result = tkinter.Intvar()
checkbutton = tkinter.Checkbutton(root,textvariable = text, variable = result, command = func)
checkbutton.pack()
# vaiable默认是整形,设置复选框勾选与否的值.
# 设置操作checkbutton的方法(也就是勾选后会出发的行为.)
def func():
print(result.get)
# 如果要自定义勾选或者不勾选的值 可以加`onvalue`和`offalue`也就是说得勾选和勾选的值
result = tkinter.Intvar()
checkbutton.pack()
root.mainloop()
Radiobuution 单选框
功能:允许用户从多个选项中选取一个,就是很多选项只能选择一个(小圆点)。
Canvas 画布
功能:提供绘图功能,(直线,椭圆,多边形,矩形)可以包含图形或位图。
import tkinter
root = tkinter.Tk()
root.geometry('500x500')
canvas = tkinter.Canvas(root, bg = 'white') #新建一个画布,把它放入主窗口中,并设置背景为白色.
canvas.pack()
# 在画布中绘制一个长方形,用矩形工具
canvas.create_rectangle(20, 20, 100, 100, fill = 'red', outline = 'yellow')
# 前面数字参数中,前d两个参数表示开始矩形左上角点的位置(横轴,纵轴),后面两个参数表示矩形右下角的距离0轴(初始位置的)距离.
# fill 给画出的模块填充颜色
# outline 边框颜色
root.mainloop()
Listbox 列表框(盒子)
功能:一个选项列表,用户可以从中选择。同时展示多个数据.
# 外部的代码都是重复的省略
# 设置listbox的内容
names = ('吕洋', '任真', '吕恒一')
# 将上面数据转换为tkinter的字符串变量.
students = tkinter.StringVar(value = names)
listbox = tkinter.Listbox(root, listvariable = students)
listbox.pack()
Menu 菜单
功能:点下菜单按钮后弹出一个选项列表,用户可以从中选择。
# 1. 创建主菜单
bigmenu = tkinter.Menu(root)
# 2. 创建子菜单
filemenu = tkinter.Menu(bigmenu, , tearoff = 0))
# tearoff = 0 关闭菜单飘出来的功能
# 子菜单可以添加功能
filemenu.add_commadn(label = '打开文件', command = 一个函数)
filemenu.add_separator() # 在菜单中加入恒线的功能.
# 3. 将子菜单加入主菜单
bigmenu.add_cascade(label = '文件', menu = filemenu)
# 4. 将主菜单加入界面
root.config(menu) # 在主菜单里配置一个主菜单
Menubutton 菜单按钮
功能:用来包含菜单的组件(有下拉式,叠层式等等。)按钮点击弹出菜单栏.
# 重复的主窗口内容略
menbutton = tkinter.Menubutton(root, text = '选择内容')
menubutton.pack()
# 先建立一个菜单
menu = tkinter.Menu(menubuttion)
# 添加选项
# 设置变量
sex = tkinter.StringVar()
men.add_radiobutton(label = '男', variable = sex)
men.add_radiobutton(label = '男', variable = sex)
# 将菜单配置到组件
menubutton.config(menu = menu)
OptionMenu 设置菜单
功能:类似下拉列表的效果
# 重复框架内容略
# 创建一个变量用来接收结果
restult = tkinter.StringVar()
result.set('请选择一个问题') # 设置默认显示的值
optionmenu - tkinter.OptionMenu(root, restult, '这是一个问题', '这是二个问题', '这是很多问题.')
Message 消息框
功能:类似于标签,单是可以显示多行文本
Scale 进度条
功能:线性"滑块"组件,可设定起始值和结束值,会显示当前位置的精确值.
Scrollbar 滚动条
功能:对其支持的组件(文本域,画布,列表框,文本框)提供滚动功能.
Toplevel 顶层组件
功能:类似框架为其他空间提供但单独的容器.比如点设置新弹出来一个设置界面 就用到这个.
Spinbox 输入空间
功能:与Entry类似,但是可以指定输入范围值.只能输入指定类型的内容.(数字,小数,文本之类的.)
PanedWindow 窗口布局管理
功能:是一个窗口布局管理的插件,可以包含一个或者多个子控件.
LabelFrame 容器控件
功能:是一个简单的容器控件.常用用于复杂窗口布局,例如设置界面内容太多可以把相关内容的设置装在一起.然后写上说明.
# 外部的代码都是重复的省略
labelframe = tkinter.LabelFrame(root, text = '常规设置')
labelframe.pack()
# pack内可以用ipadx设置大小
# 也是虚拟框架 要把组件放进去才显示.
btn1 = tkinter.Button(labelframe, text = '按钮1')
btn1.pack()
btn2 = tkinter.Button(labelframe, text = '按钮1')
btn2.pack()
messagebox 消息框
功能:用于显示你应用程序的消息框.消息框有很多种(消息选择框,文件存储框等),可以以后用的时候慢慢查询.
Python-tkinter开发学习 笔记的更多相关文章
- python web开发学习笔记一:javascript基础
一.认识js: 能进入到软件所实习是我的最大的收获,也是我的荣幸,我相信努力付出一定能够换回收获. 项目最先开始的是接触到web前端的一些内容,我们需要利用flask搭建应该有的框架.我有一些pyth ...
- Python Flask 开发学习笔记
Flask学习 安装pipenv虚拟环境 pip Install pipenv 运行pipenv pipenv --version 进入虚拟容器 pipenv install 安装flask pipe ...
- python网络爬虫学习笔记
python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...
- 【前端】移动端Web开发学习笔记【2】 & flex布局
上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...
- 【前端】移动端Web开发学习笔记【1】
下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...
- 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址
驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...
- android开发学习笔记000
使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...
- 高性能Cordova App开发学习笔记
高性能Cordova App开发学习笔记 文件结构 添加插件 构建准备 各个www的作用,prepare命令会将hello\www的内容会拷贝到platform下的wwww目录,知道该改哪里了吧?如果 ...
- Rest API 开发 学习笔记(转)
Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...
- Requests:Python HTTP Module学习笔记(一)(转)
Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...
随机推荐
- ThinkPHP 5.0.x、5.1.x、5.2.x 全版本远程命令执行漏洞
ThinkPHP 5.0.x.5.1.x.5.2.x 全版本远程代码执行漏洞 作者:SoulCat. 来源:CSDN 原文:https://blog.csdn.net/csacs/article/de ...
- Jmeter(一) Jmeter基本使用
1.下载安装 官方网站 https://jmeter.apache.org/download_jmeter.cgi 选择下载即可 2.基本使用 下载解压后,目录如下: 进入到bin目录, 双击jmet ...
- adb devices命令链接设备失败 解决办法
使用adb devices命令链接设备失败 1,检查adb的环境配置是否存在问题 参见我的博客(sdk配置):https://www.cnblogs.com/changpuyi/p/9459025.h ...
- Navicat Premium 12 安装与破解,Navicat Premium通用的数据库管理工具
本文转自:https://blog.csdn.net/WYpersist/article/details/86530973 Navicat Premium 是一套数据库开发工具,让你从单一应用程序中同 ...
- ELK 索引生命周期管理
kibana 索引配置 管理索引 点击设置 --- Elasticsearch 的 Index management 可以查看 elk 生成的所有索引 (设置,Elasticsearch ,管理) 配 ...
- JAVA调用系统命令:python、shell等
实际项目开发场景中,可能会用到java项目调用系统命令的需求,如调用python或者shell脚本 可以参考如下例子,例子来源于ambari源码: \ambari\ambari-server\src\ ...
- Udp客户端与服务通讯
使用UDP与服务端通讯时候,同样需要先启用udp服务端监控,当服务端启动成功,在启动客户端 首先UDP服务端类,代码如下: public class UdpServerTest { public vo ...
- 中控考勤机使用 zkemkeeper SDK订阅考勤数据事件失效解决方式
问题 前同事编写的对中控考勤机数据集成项目当中,打卡数据不能实时进行上传到平台当中,一直靠定时全量上传来同步数据. 阅读代码后,发现代码中有实时上传数据的逻辑,但是运行一段时间后,中控zkemkeep ...
- C# vb .net图像合成-多图片叠加合成
在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码 ...
- 使用poi调整字体格式、添加单元格注释、自动调整列宽
1 创建新的工作铺 import java.io.FileOutputStream; import org.apache.poi.hssf.usermodel.HSSFCell; import org ...