winform程序按钮控件随着窗口的缩小改变大小和位置_实战|python GUI压缩小程序

说到Python,我们常常想到的就是一个小窗口,黑黢黢的cmd窗口运行一下代码。

就像下图:

35667a3ee61cc6db5974c134ae2af753.png

那Python可不可以做出来具有界面的程序呢?就像这样:

1ad0c845bfef9917879514b8d187d936.png

答案是可以的,那我们就要说一下Python GUI了。

GUI就是图形用户接口(GraphicalUser Interface)的简称,是可以进行互动操作,具有一定视觉体验的部分。

它的优势就在于可以互动操作,并且视觉效果比较好。

Python GUI的库

常见的pythonGUI的库有三个,Tkinter,WxPython以及PyQt。

f6148ab35a041c7454f050689a3fee55.png

-Tkinter

·是Python原生库,优势在于不用额外安装其它库,只要有Python就可以运行;

·对于WINDOWS,LINUX,UNIX,MAC OS系统的支持都非常友好,可以良好的运行在绝大多数的平台中;

·Tkinter简单易用,对于小的程序界面来说十分的方便快捷。

-wxPython

·是一个GUI工具箱,可以轻松创建图形用户界面程序;

·它也可以在多平台进行使用,它是一个用Python封装的wxWidgets包(C++包)通过以Python模块的方式来在Python中使用的;

·优势是快捷方便,但是相对于Tkinter来说,需要导入第三方库。

-PyQt

·这个库就比较高级了,它是python语言和QT库成功融合的产物;

·其基于Qt是目前最强大的GUI库之一,具有超过300个类,近6000个函数和方法;

·也是一个多平台的库,可以应用于 Linux、 Windows、Mac os等。

很多人在学习GUI应用的时候,都感觉比较困难,因为GUI和别的不太一样,GUI更多的是基于视觉上的处理,如果我们只是通过文字教程就很难学会它。

那我们今天就通过创建一个GUI的小应用通过制作一个压缩图片的小工具来初步学习GUI的操作,今天选择采用的是Tkinter库。

Tkinter库

我们细说一下Tkinter库,刚才说到了它的优点,包括其是Python原生库不用额外安装、支持多平台等诸多优点,也具备简单易用的优势。

但是,它的缺点也很明显:

f6148ab35a041c7454f050689a3fee55.png

·整个Tkinter的布局是通过代码完成的,写大程序,里面有很多控件,就相当的麻烦了;

·并且GUI工具不能通过拖拽来进行界面的设置,而全部都是用代码,也是遭到广大用户吐槽的点;

·Tkinter模块当中,常用的GUI模块主要功能是具备的,但相对于PYQT模块来说,很多功能被弱化了,有些内容藏的比较深,可能会让人误认为没有这个功能;

·API写的相对比较简单,方法属性寻找起来相对比较困难;

·Tkinter的效率相对来说比较低,主要是针对中大型GUI程序来说,当书写复杂的GUI程序的时候,Tkinter库的效率非常低,耗时就会非常长;

·Tkinter做出来的界面…相对来说是惨不忍睹了,比较丑。

本文还是选择用了Tkinter库进行这个压缩图片的小工具来进行初步的学习,也为后续学习其它GUI操作打下基础。

压缩图片小工具

首先分解一下需求,首先要给图片压缩,其次要用GUI来展示这个界面。那GUI部分就要包括几个部分,第一个,选择图片的按钮,第二个压缩按钮

图片处理的库,这里我选择 PIL库;

from PIL import Image as imgfrom tkinter import *

引入两个库之后,先写出GUI界面;

def GUI_app():
   app = Tk()
   Label(app, text='压缩小程序', font=('Arial',20,'bold')).pack()
      return app

调用了之后得到这个结果:

15bfce3f8bc733b237f8032b35556b25.png

那我们还需要往里面加个可以表示你放入多少个图片的列表,在函数里面增加了。

Listbox(app, name='listbox',bg='#f2f2f2').pack(fill=BOTH, expand=True)

fba99f2ced5b6387aa501a73dccf2ebc.png

之后还缺两个按钮,一个是选择图片的按钮,一个是进行压缩的按钮;

Button(app, text='打开路径').pack()Button(app, text='开始压缩').pack()

fdf6b4a779e01c539d935c0a40cb642a.png

这么看这个程序界面虽然完善了,但是还是有些丑,长宽有点怪想改变为300 * 400的大小,输入下面代码,这里面需要注意的是,这个乘号一定是这个x,不能是*。

app.geometry('300x400')

6a2e51a025b913afe5904cc8565c5143.png

这次看起来就美观一些了。

GUI部分写完了,那就要向里面添加核心代码~

首先是打开路径的代码,这里面我们就要用到下面这行代码,这个代码会引入一个函数,才能打开对应的文件。

from tkinter.filedialog import *

为了方便获取路径,建立下面的字典,这样就可以通过键值对来获取对应的路径和文件名;

info = {'path':[]}

建立函数;

def open_path():
  filename = askopenfilenames()

之后我们要向listbox中添加对应的名字,这样我们就知道放入了哪些图片;

lbox = app.children['listbox'] #找控件
  info['path'] = filenamesif info['path']:for name in filenames:
          lbox.insert(END, name.split('/')[-1])

这个结果就是,在列表中显示出来文件的名字,并且可以找到对应的文件,这样就可以在添加完文件之后,直接点击开始压缩,就可以对文件进行处理了。

37f84a6eb68f6930382df68866871efc.png

那下面来进行压缩部分的代码:

def compress():                                      for filepath in info['path']:                      
      output = '你想输出的文件夹'
      name = filepath.split('/')[-1]                
      image = img.open(filepath)                    
      image.save(output+'压缩'+name, quality=50)

这部分的代码其实很简单,因为这里面放了不止一个文件,所以要用一个循环来嵌套它;

output是保存的文件输出在哪里,name是获取到的文件名,image是要打开哪个文件;

这个代码中save(,quality=压缩百分比)这部分才是真正的核心,这里面为了方便看出来压缩我们设置为50。

但是这里面整个核心都写完了,但是程序并未写完,因为我们要给这两个函数分别引入到那两个对应的button里面去。

我们需要给最开始时候的两个button代码改掉;

Button(app, text='打开路径').pack()Button(app, text='开始压缩').pack()

改为:

Button(app, text='打开路径',command=” open_path”).pack()Button(app, text='开始压缩',command=”compress”).pack()

这样就将函数导入到按钮中了。

首先我们看下文件的大小:

cb3b9854ba029bf45ab7da26dd091bde.png

看下输出的目标文件夹:

7a2ee53cd1ccb2ed2e0bda1a9c4dea5d.png

好,然后我们开始执行这个小程序:

75b8cc7635c422dd7e014b59c11425e1.png

好了,大家可能看到这个大小缩小为大约原来的一半儿了!这个GUI小程序就做好了~每次执行以下就好啦~

但是这里面我们不想和控制台窗口有关联了!想做一个真正的EXE小程序,这时候应该怎么办呢?

首先我们本身要有pyinstaller这个库,(没有的pip一下啦)

然后,找到对应的文件目录,然后在这个目录下进入cmd输入下列代码:

pyinstaller -F -w 文件名.py

等它执行完毕之后,就可以看到在对应的文件夹下面出现dist,里面就有一个可执行程序了 。

bbd54027c7bdc85861c646b4ed65ed70.png

执行一下看看:

779fb22b149c74a46024a2a68608e60f.png

搞定了!(解释一下参数:-F 表示生成单个可执行文件;-w 表示去掉控制台窗口)

好了,这样我们就已经完整的用python做完了一个GUI界面并且打包成了EXE程序。

41cb87d539b097afe05698aa0230167c.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值