1.1 使用python开发虚拟环境
课程目标
本章内容
- 了解编程
- 掌握python的基本应用
- 学会python的基本语法
本节目标
- 了解编程
- 掌握python的安装
- 掌握Anaconda的安装
编程是什么?
利用操作计算机。让计算机帮助我们完成具体任务的一种技能成为编程。
python是什么?
python是编程语言,本课介绍python编程语言。
为什么选择python?
因为:,类似于英语,常用于爬虫和数据分析。
安装python
进官网https://www.python.com搜索安装
安装时检查:Add Python 3.7 PATH 【目的:将python添加到环境变量中Windows系统中:软件位于环境变量中
Anaconda集成了python除了常用的三大库,还提供conda这个强大的工具。
安装anaconda
进官网https://www.anaconda.com搜索安装
安装过程可参考安装教程
conda使用
conda操作
- 查看版本:conda --version 【conda 4.5.12】
- 更新:conda updata conda 查看这台计算机安装了多少虚拟环境 conda info --envs:目前本机只有base 可单独创建安装auto/autopy36/crawler/csdn/envpy创建环境的目的:在环境中运行程序不会影响本机系统,保持系统环境清洁,减少依赖冲突
- 创建环境:conda create -n <env_name> python=x.x【本机新建环境csdn:conda create -n csdn python=3.7】
- 删除环境:conda remove -n <env_name> --all
- 激活环境:activate <env_name> 【激活csdn:Windows无需添加系统conda<在mac需要在前面添加conda>,直接敲击activate即可】
- 退出环境:deactivate
1.2 python零基入门【变量与常用操作符】
课程目标
-
了解操作符
-
了解变量
操作符
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-4c1Txi8N-1642314999459)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629540780969.png)]
变量
变量:赋值给变量N或其他,相当于N是一个盒子,可以随意赋值
操作符:数学操作符,其他地方可参考
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-3beSP9uB-1642314999460)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629540964243.png)]
试运行:打开python:输入控制台activate csdn 确定后输入python即可】
常量:
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-m7QUHZ8f-1642314999461)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629541247240.png)]
变量:相当于一个盒子2.0是浮点型,2是整形,如果需要整形数据,需要整形
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-jRBajjlY-1642314999462)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629541352783.png)]
总结
- 理解表达式
- 理解了变量
- 掌握;使用额常用操作符
1.3 python零基础入门【循环与判断】
课程目标
- 了解循环
- 了解判断
循环while/for
**循环:**想重复做什么?
比如网站上传一万张图片怎么办?
python中的循环:while/for
**使用while:**循环输出100次 I love you!
i=0 while i<100: print('I love you !//前空四格或一个tab键,通过空格控制句子的从属关系 i = 1
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-f7xyFQS9-1642314999463)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629542730552.png)]
:循环输出100次 I love you!
for i in range(100): print('I love you !')
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-qJ7807Iy-1642314999464)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629542528142.png)]
判断if
判断:**想重复做什么?
比如网站上传一万张图片怎么办?
**比较操作符:**小于、大于等于号条件确定为真实True,不成立为假False】
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-CNTlxozW-1642314999466)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629632544033.png)]
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-jW6sUomm-1642314999467)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629632638272.png)]
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-8S4UJ80C-1642314999468)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629632919265.png)]
pip安装包
**试运行:**激活环境csdn:activate csdn,安装ipython包【ipython与交互式学习包相比,它是一个交互式学习包python更加方便,】
pip install ipython //pip帮助下载相应相应包的安装工具,pip专门下载ipython第三方库【别人已经开发好的工具,可以直接拿来使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n0asdw3B-1642314999468)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629633823059.png)]
【注意:第二个print需要往回敲四格,因为第二个print是输出判断false的值】
总结
- 学习了python中的循环
- 学习了python中的判断
1.4 python零基础入门【常见容器类型】
本节目标
- 了解列表基本特性
- 了解元组基本特性
- 了解集合基本特性
- 了解字典基本特性
列表
什么是列表?
列表是python中内置的基本结构,它有括起,,其中元素是。
:append按照单个元素放入
:extend拼接的按照每一个新的元素放进新列表
的形式取出元素,如取出1~3元素,需要按照list[0:3],非list[0:2]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N2Kj0u2a-1642314999469)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629635479202.png)]
**试运行:**使用ipython,是一个增强型的python包,比python的交互性好
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PLetL8Yu-1642314999470)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629639102199.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e5qAFNS6-1642314999474)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629639224392.png)]
元组
什么是元组?
元组以
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RlWhAX22-1642314999475)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629866598540.png)]
集合
什么是集合?
集合是一个无序的不重复元素序列,它以
添加元素:.add()
删除元素:.remove()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-awy1TAl8-1642314999476)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629866844045.png)]
字典
什么是字典?
字典是另一种可变容器模型,且可存储任意类型对象。字典的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RfTdNKLp-1642314999477)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629867223367.png)]
字典的使用:
更新字典:dict[‘Age’]=8
添加字典:dict[‘School’]=“RUNOOB”
删除键是‘Name’的条目:del dict[‘Name’]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-adPii0iZ-1642314999478)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629867266226.png)]
本节总结
- 学习了列表基本特性
- 学习了元组基本特性
- 学习了集合基本特性
- 学习了字典基本特性
1.5 python零基础入门[使用函数]
本节目标
- 理解函数
- 理解默认参数
函数
什么是函数?
原因很简单,可以简化重复的逻辑,让代码更加
函数封装步骤:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hak6uIod-1642314999479)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629867864678.png)]
函数的形式
-
定义函数的关键字
-
函数的参数
-
函数返回关键字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6zBejLFJ-1642314999479)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629867946669.png)]
试运行:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6hvjXNit-1642314999480)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629868155408.png)]
函数编辑好之后可以进行对函数的调用,简化代码的同时可以有效减少代码冗余。
使用函数
with:创建了一个上下文管理器,?with这个上下文管理器会自动关闭,无需手动关闭,并不占用硬盘内存。
open:将硬盘中的文件读入进入的一个方法。
as:把读入进来的文件转换[创建]为一个变量f的方法。
f.read:将D:1.txt读入进来
with open(r'D:1.txt') as f:res1 = f.read() #with创建了一个上下文管理器,open这个方法将硬盘中的文件读入进入python,利用as方法转换为一个变量f,再通过f.read方法将D:1.txt读入进来
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MphZWfSc-1642314999481)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629869452787.png)]
调用函数
- 定义函数
- 调用函数
#定义函数
def reader(path)
with open(path) as f
res = f.read()
return res
#使用函数读取多个文件
res1 = reader(r'D:1.txt)
res2 = reader(r'D:2.txt)
res3 = reader(r'D:3.txt)
总结
- 学习了函数
- 掌握了函数的基本应用
1.6 python零基础入门【线程与进程】
本节目标
- 了解线程
- 了解进程
- 了解线程与进程的关系
直观了解线程和进程
CPU就像工厂
计算机的CPU就像一个不断运行的工厂,给整个城市(计算机)提供能量(算力)。
**进程:**进程就像一个车间
与常见工厂不同,在CPU这个工厂中,
**线程:**线程就像车间内的工人
车间内的工人相互合作,共同完成车间的任务,这些功能就是线程。
**单线程:**当然一个车间【进程】也可以只有一个线程,但至少有一个线程。
线程与进程
简单总结:单核CPU单位时间内只可执行一个进程,而一个进程至少一个线程构成。常见的有四核跟八核CPU,同时可运行4/8个进程。
多线程多进程优势
使用多线程和多进程处理一个任务就相当于有多个人帮你处理同一件事情,速度更快,效率更高。
使用多线程
python中使用多线程:调用线程库即可
多个线程执行的时候可以调用多个线程或者线程池
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XB1LZXXi-1642314999481)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629871428090.png)]
import threading #调用线程库,threaing穿越、线程的一个意思
t = threading.thread(targe=longtime,name='longtime_thread')
#使用threaing.thread这个类(括号)将我们使用线程处理的方法longtime传入我们的目标targe,它的名字用name这个参数命名,通过这种方式创建一个线程来执行我们的longtime方法,再通过t.start()方法启用线程。
使用进程
#使用进程
from multiprocessing import Process
if __name__=='__main__':
#开启一个进程使用longtime
p=Process(targe=longtime)#使用Process这个类创建一个进程,利用targe方法【目标】传入我们要处理的longtime函数,即调用Process进程处理longtime函数
p.start()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NuPJlWX8-1642314999482)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629876038055.png)]
总结
- 掌握线程的基本使用
- 掌握进程的基本使用
1.7 python零基础入门【抽象之类】
本节目标
- 了解面向对象编程
- 了解类与实例
- 了解继承与多态
面向对象
什么是面向对象?
面向对象编程不是叫你面向着你的男女朋友这种对象来编程程序,而是一种
面向对象的程序设计将计算机中的程序视为一组对象的集合,每个对象都可以接收其他对象传递的信息并进行处理。
计算机程序的执行就是一系列消息在各个对象之间的传递。
C语言是面向执行的。
抽象之类
在python中,所有数据类型都可以视为对象,而自定义的对象数据类型就是面向对象中的类(Class)的概念。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aO0zP4HU-1642314999483)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629877011595.png)]
Class People(object):#定义一个名为people的类,继承一个object【继承一个副类】[使用旧版的python继不继承object都可以,python3.6 3.7需要继承这个object这个基本类]
def __init__(self,name,age)#__init__魔术方法,是一个抽象方法,并且也是一个初始化方法,在这里是初始化people这个类,当我们的类进行实例化的时候这个方法会被自动调用,这个方法对程序员来说是透明的。是python中内置的一个方法。 、
def talk(self):#people类中的一个方法
实例化使用
python本身自动去使用__init__方法完成类的实体化
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QSal5Gs8-1642314999484)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629879480449.png)]
继承/重写
子类继承父类,子类可以重写父类。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-We2Q4VVh-1642314999484)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629879591520.png)]
继承的好处
- 子类获得了父类的全部功能,子类可以重写父类的方法,覆盖父类的方法。
- 子类可以在父类基础上新增自己的功能或修改父类的功能。
多态
最后定义一个hello方法,传入people,调用people的talk,此people只是一个参数,通过people参数里面的talk方法执行。
多态就是直接将不同角色传递给hello即可。
多态的好处就是:当我们需要传入Student.Teacher…时,我们只需要接收people类型就可以了,因为Student、Teacher…都是People类型,然后,按照People类型进行操作即可。
不需要重写写逻辑,可以直接对其父类进行操作,简化代码,避免冗余。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fTAwFms1-1642314999485)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629879894805.png)]
总结
- 理解 了面向对象编程
- 理解了类与实例
- 理解了继承与多态
1.8 python零基础入门【错误与异常处理】
- 为什么会报错
- 如何捕捉错误
- 如何处理错误
错误
人不是神,无法预计到所有的情况,人的思维总是存在漏洞的,所以人编写出的程序也常会存在漏洞的,当系统越大时,存在漏洞的可能性越大,这些漏洞最终的结果就是让程序报错。
Bug
bug直译就是虫子。
1947年9月9日,一名美国的科学家格蕾丝.霍普和他的同伴在对Mark 弍计算机进行研究的时候发现,一只飞蛾粘在一个继电器上,导致计算机无法正常工作,当他们把飞蛾移除之后,计算机又恢复了正常运转。
错误捕捉
python中可以通过try…except…语句来捕捉
错误捕捉之后程序会正常执行或者 关闭,若没有捕捉就会出现异常或系统以崩溃状态结束。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mCgZWBJz-1642314999485)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629881957856.png)]
常见错误类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uVAnKBRz-1642314999486)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629882130578.png)]
处理异常
通过traceback这个方法,在报错的时候通过traceback.print_exc()将错误打印到本地,traceback是python自带的一个库。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z0RSmEhp-1642314999487)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629882187534.png)]
总结
- 程序报错的本质是人不完美
- 程序报错后的处理方式
1.9 python零基础入门【使用生成表达式】
本节目标
- 掌握生成表达式的用法
生成表达式
python中有多种生成表达式,其语法相近,但获得的结构却截然不同。
列表生成表达式
用
如果需要打印偶数:则加一个判断,如下
l = [i for i in range(10) if i%2 == 0 ]#i%2 ==0返回值为value则打印
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mIyUKcvJ-1642314999488)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629882799867.png)]
字典生产表达式
用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lbgLI333-1642314999488)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629883761830.png)]
比较【列表/字典】
观察列表生成式和字典生成式,前者用中括号,后者用大括号。
d = {
i:'二两' for i in range(10)}#后者可以更改
print(d)
#打印为
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j2VRpxCy-1642314999489)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629884095795.png)]
生产器表达式
使用
好处:占用内存固定,不管读取数据的内存多大,都可以切割成很小的数据读完整个数据。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HjOEgTVQ-1642314999490)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629884346525.png)]
总结
- 掌握生成表达式的用法
1.10 python零基础入门【装饰器的门道】
本节目标
- 掌握普通装饰器的写法
- 掌握带参数的装饰器
- 掌握类型装饰器
装饰器
什么是装饰器?为什么使用装饰器?
装饰器是python中的一种函数,他可以它可以让被他装饰的函数在不修改任何代码的情况下添加额外的功能。
简单装饰器
装饰器只是一种函数。
def log(func): #定义一个log方法,这个方法其实就是一个装饰器,这个方法的参数是func
调用/使用装饰器的方式
@log #使用用@+装饰器名称,并且放在被装饰的方法上面
def func():
print('I am a function')
func()
装饰器内部定义一个方法wrapper【可以随便取,通过一个*和两个**表示这个方法可以接收任何的参数】,输入对应我们需要执行的逻辑,之后调用我们被装饰的参数func【即传入我们的func】,之后把执行后的参数传递给func,最后返回wrapper方法的指向地址【未被调用】
之后直接调用func()即可得到一个包含装饰器的function。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dToJkMdT-1642314999491)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629885499179.png)]
运行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-umhDK6MB-1642314999492)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629886559355.png)]
装饰器的本质
装饰器的本质是调用函数。
log(fun) ==>wrapper 这是地址
log(fun)() ==>wrapper() 这是结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NxUPpsqG-1642314999492)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629886634571.png)]
接收任意参数
通过一个*和两个**表示这个方法【只要前面有新号】可以接收任何的参数是python中的一个语法堂
一个*号是元组,两个**号是字典
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4TlhRogU-1642314999493)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629886926408.png)]
试运行结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Jxe3SEf-1642314999494)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629887213421.png)]
带参数的装饰器
带参数的装饰器中包装了两个方法。【其实就是三层方法】
装饰器其实也就是一个方法,带参数的装饰器就是这个方法传入了参数。
通过参数可以控制装饰器内部的一个逻辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nLhsur7q-1642314999494)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1629889629642.png)]
试运行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PTzzNhoQ-1642314999495)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1630039998834.png)]
类装饰器
类装饰器使用__call__[前后有两条下划线]方法:包含一个初始方法,本质是调用了类方法,是一种隐藏式调用【即使用类装饰器的时候系统会调用初始方法,将func传给类,之后就获得对应方法的一个内存地址或者指针。接着使用方法的时候__call__就会被调用,从而实现类装饰器的效果】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zj2yNI4K-1642314999495)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1630040101927.png)]
总结
- 掌握普通装饰器的写法
- 掌握带参数的装饰器
- 掌握类装饰器
1.11 python零基础入门【自动去除图片背景】
本节目标
编写自动去除图片背景的代码
效果
给代码一张图片,让其自动实现抠图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JeoIHSPa-1642314999496)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1630040980113.png)]
实现抠图效果
无需编写以一个自动抠图的算法,直接使用他人提供的服务【即使用现成的算法】
获取removebg的key
进入其官网:https://www.remove.bg/zh
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iW890Xwf-1642314999497)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1630041131031.png)]
进入其官网:如何实现自动上传图片完成抠图并且下载呢?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G0A6L8Bb-1642314999497)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1630041242886.png)]
使用removebg服务完成自动抠图:
1.完成removebg的注册;
2.打开我们的账户获取key,key原本是隐藏的;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gIsaLNmr-1642314999499)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1630042603956.png)]
打开编辑器开始编写程序
会不会很复杂?
原理是有些复杂,但是使用超级简单。
原理:removebg所提供的的服务是通过深度学习的方式训练出的模型,这个模型可以实现为人物抠图的效果。
首先先使用pip安装我们需要使用的removebg这个库,安装OK之后导入类RemoveBg,并且实例化它,并且把获得的key放入括号内,“error.log”如果报错直接自动将错误写入这个文件。
将除去背景的图片传入,就会自动将去除图片背景的图片下载本地。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tnQqXnKK-1642314999499)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1630042882067.png)]
去除多张图片的背景
编写一个循环即可实现
1.给予其一个路径path
2.用对应的os库,并且将路径的所有内容打印出来并且赋值给pic,每一次都拼接出完整图片的途径os.path.join(path,pic)然后调用remove_background_from_img_file这个方法将图片背景去除
3.就完成了整个文件夹的图片去除
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-139LE5N9-1642314999500)(C:\Users\HP\AppData\Roaming\Typora\typora-user-images\1630043350322.png)]
如今淘宝也实现了抠图,但是是收费的。
总结
- 编写自动去除图片背景的代码
1.12 python零基础入门【为图片背景去除程序添加操作界面】
本节目标
- 了解Tkinter
- 为图片背景去除程序添加操作界面
Tkinter
Tkinter是python的标准Tk GUI工具包的接口,他可以在大多数的Unix平台下使用,同样可以应用在Windows和Macinosh系统里。Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台。
简单说其就是一个编写界面的工具。
如何使用Tkinter
打开code命令:win+cmd→activate csdn→code .
安装removebg包命令:激活环境→pip install removebg
打开文件或编辑好的程序:cd 路径
试运行:
F:\csdn\自动去除图片背景\remove_img.py
from removebg import RemoveBg
rmbg = RemoveBg("Vko61fVUW4KAdZPh7dM5maBM","error.log")
#引号内是获取的API
def remove_bg(img_path):
rmbg.remove_background_from_img_file(img_path)
#去除图片背景
编写主程序:
#window系统中文件中.py使用另一个.py文件的引用
#sys.path.append(‘F:\csdn\自动去除图片背景\remove_img.py’)
import os
from tkinter import Tk,Menu,Label,Button
from tkinter.filedialog import askopenfilenames
from tkinter.messagebox import showinfo
from remove_bg import remove_bg#导入remove_bg方法
#优化,创建一个线程运行remove_bg方法
from threading import Thread
IMGPATH = ''
class GUI(object):#[定义一个类GUI,专门用来实例化需要处理的图片]
def __init__(self,window):#【初始化一个window,就是Tk window 的一个实例,window = Tk()】
self.window = window
self.window.title('去除图片背景')
self.window.geometry('300*200')
menubar = Menu(self.window)#【设置菜单栏,实例化的菜单栏,把窗口的权限传给菜单的方法】
#定义空菜单
filemenu = Menu(menubar,tearoff=0)
filemenu.add_command(label='帮助',command=self.helpme)
filemenu.add_separator()
#显示
self.l =Label(window,text='')#同样需要窗口,且默认为空
self.l.pack(padx=5,pady=10)#固定窗口位置
#选择图片
#【定义按钮,command表示当我们选择图片时需要调用***方法的路径】
btn1 = Button(window,text='选择图片',width=15,height=2,
command=self.get_img)
btn1.pack()
#生成图片
self.send_btn =Button(window,text='去除背景',width=15,height=2,
command=self.gen_img)
self.send_btn.pack()
def helpme(self):
showerror('帮助','请关注***联系作者本人')
def get_img(self):
global IMGPATH
#选择文件
#【askopenfilenames方法也是Tk内置的方法,调用打开文件选择框的方法
# tkinter.filedialog对话框里面有个文件选择对话框askopenfilenames
# 打开之后我们有个文件选择的参数:filetypes即制定选择文件的类型
# 作用:过滤文件选择】
filenames = askopenfilenames(filetypes=(("speg img","*.jpeg"),("jpg img","*.jpg"),
("png img","*.png")))
#【选择多个文件,通过列表生成器的方式将多个文件读入进fnlist
# 读完之后进行一个拆分处理,之后赋值给全局变量IMGPATH】
#【待会点击生成图片的时候我们在全局变量中去取所选择图片的具体路径
# 】
if len(filenames)>0:
fnlist = [fn for fn in filenames]
fnstr = '\n'.join(fnlist)#拆分处理
self.l.config(text=fnstr)
IMGPATH = fnlist
else:
self.l.config(text='目前没有选择任何文件')
#【待会点击生成图片的时候我们在全局变量中去取所选择图片的具体路径
# 】
def gen_img(self):
global IMGPATH
respathlist = []
for imgpath in IMGPATH:
filepath,tempfilename = os.path.split(imgpath)
filename,extension = os.path.splitext(tempfilename)
#防止程序卡死,创建一个Thread
remove_bg(imgpath)#调用remove_bg方法
respathlist.append(imgpath)
respath =''.join(respathlist)
#将所有文件扣完图之后就会提示以下文字
showinfo('完成生成',f'图片处理完成,路径为:{
respath}')
if __name__=='__main__':
#创建窗口
window = Tk()
GUI(window)
#显示窗口,必须在所有控件后
#主循环【调用无限循环mainloop这个方法创建一个主循环】,
# 由于分辨率的原因,需要设置无限循环,无则会一闪而过
window.mainloop()
题外
Import [your_module] could not be resolved Pylance(reportMissingImports)解决方案)
在VS Code中编写python文件时,import自定义module报错 “could not be resolved Pylance(reportMissingImports)”。 这是因为 Pylance未找到自定义模块的地址,可以通过在settings.json文件中添加extraPaths来解决:
1.通过
"python.analysis.extraPaths": [
"./7_yolov5-master", // 自定义模块的相对路径,可多个,可绝对路径
"./1_hidden",
]
- 使用Ctrl+S保存后,重新打开.py文件,这时自定义的模块就被Pylance找到并导入成功了。