教程地址,感谢!

目录:

课时一

GUI:用户交互界面


kinter 介绍

是python自带的gui库,对图形图像处理库tk的封装

自带用着方便,跨平台,够用。

其他gui:pythonwin,wxpython,pyQT等等。

导入tkinter 库:import tkinter

查询官方帮助:help(tkinter)

概念介绍

  1. 组件:组成界面的构成内容就是组件。按钮,文本输入框,滚动条,列表,菜单等等。
  2. 窗口:一个软件的矩形区域。

最简单的界面

# 导入模块
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()

组件的摆放方式

  1. pack()方式 --> 方位摆放方法(上下左右)(不推荐使用)

    a. 上(top),下(bottom),左(left),右(right)
  2. grid()方式 --> 网格摆放方法(网格坐标)

    a. 把界面变成网格,对网格横纵坐标编号.告诉坐标就可以把组件放在具体地方.

    b. 适合做格子类的东西,计算器 颜色选择框等.
  3. 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开发学习 笔记的更多相关文章

  1. python web开发学习笔记一:javascript基础

    一.认识js: 能进入到软件所实习是我的最大的收获,也是我的荣幸,我相信努力付出一定能够换回收获. 项目最先开始的是接触到web前端的一些内容,我们需要利用flask搭建应该有的框架.我有一些pyth ...

  2. Python Flask 开发学习笔记

    Flask学习 安装pipenv虚拟环境 pip Install pipenv 运行pipenv pipenv --version 进入虚拟容器 pipenv install 安装flask pipe ...

  3. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  4. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  5. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  6. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  7. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

  8. 高性能Cordova App开发学习笔记

    高性能Cordova App开发学习笔记 文件结构 添加插件 构建准备 各个www的作用,prepare命令会将hello\www的内容会拷贝到platform下的wwww目录,知道该改哪里了吧?如果 ...

  9. Rest API 开发 学习笔记(转)

    Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...

  10. Requests:Python HTTP Module学习笔记(一)(转)

    Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...

随机推荐

  1. 在OpenShift 3.11环境开启多网络平面

    1.整体架构 Multus CNI是OpenShift的容器网络接口(CNI)插件,可将多个网络接口附加到Pod. 通常,在OpenShift中,每个Pod仅具有一个网络接口(除了回送),Multus ...

  2. Session丢失的原因及解决办法

    Asp.net 默认配置下,Session莫名丢失的原因及解决办法: 正常操作情况下Session会无故丢失.因为程序是在不停的被操作,排除Session超时的可能.另外,Session超时时间被设定 ...

  3. VUE 同一页面路由参数变化,视图不刷新的解决方案

    1.监听路由处理 watch: { $route(to, from) { // 逻辑 // 重新调用数据接口 } }, 2.beforeRouteUpdate导航守卫 路由更新时触发 beforeRo ...

  4. php 按照字典序排序 微信卡券签名算法用到

    代码 <?php $data=array("api_ticket"=>"IpK_1T69hDhZkLQTlwsAXzJqxGE_7RuU_tjnx8rWC9f ...

  5. Jenkins+gitlab+msbuild

    配置gitlab 这里会生成一个token在页面上方,一定要复制出来.存在别的地方. jenkins配置gitlab 在jenkins服务器上安装vs,目的是使用它的msbuild,如果项目中还用到了 ...

  6. IntelliJ IDEA 删除自定义的 Maven 框架依赖

    IntelliJ IDEA 删除自定义的 Maven 框架依赖 IntelliJ Idea中添加Maven Archetype,但是IntelliJ Idea中并没有提供删除的方法. windows中 ...

  7. 虚拟机CentOS克隆

    1.什么是克隆 就是以某虚拟机为母版,复制出一个一模一样的虚拟机出来,包括里面的数据 2.创建克隆 正常选择通过快照创建克隆(只能是关机状态下的克隆) 1.选择关机状态下的快照,然后点击克隆 2.点击 ...

  8. sqlite 安装与编译

    本文简述了SQLite的概念,并详细描述了SQLite在Linux和Windows平台下的编译方法 关于 SQLite SQLite是一个进程内的库,实现了自给自足的.无服务器的.零配置的.事务性的 ...

  9. Go操作ini文件

    除了采用json,yaml等格式之外,常用的配置文件还有ini格式的. cfg, err := ini.Load(fyPath + "\\ServerSystem.ini") // ...

  10. 记CentOS 发布.NET Core 2.0

    centos 7.x sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo -e & ...