python教程分享python实战之PyQt5实现漫画脸

目录
  • 最终效果
  • 前言
  • 1.pyqt5的安装。
  • 2.qt designer 布局的使用。
  • 3.百度智能云api的调用。
  • 4.调控界面的控件。
  • 5.最终成果
  • 6.总结

最终效果


python教程分享python实战之PyQt5实现漫画脸

前言

这是最近在学qt这个东西,然后又学会了调用api,然后就想了用pyqt5做一个gui界面,后期也可以打包分享给其他人使用,所以就最近就写了一个简便的gui界面,有点不好看,大家凑合看一下,主要是学思路的哈!

1.pyqt5的安装。

1.pyqt5库的安装。

pyqt5的安装有两个办法。

1:pip install —xxx(库名)

2:把这三个库都下载。


python教程分享python实战之PyQt5实现漫画脸

 3:配置qt designer


python教程分享python实战之PyQt5实现漫画脸

name:我们自己给这个tool起的名字

program:填入designer.exe的路径,每个人路径不同,找到自己计算机上的 路径输进去。一般来说是在site-packagesqtdesignerdesigner.exe这里。

working directory:填入$projectfiledir$,表示文件所在的项目路径

4:配置转化工具pyuic


python教程分享python实战之PyQt5实现漫画脸

name:自己起的名字

program:python.exe所在的位置,一般在pythonpython38-32python.exe这里

arguements:填入-m pyqt5.uic.pyuic $filename$ -o $filenamewithoutextension$.py

是将.ui文件转化成.py文件的语句。

2.qt designer 布局的使用。

1:打开这个设计师


python教程分享python实战之PyQt5实现漫画脸

2:创建一个窗口


python教程分享python实战之PyQt5实现漫画脸

 3:设计界面,用鼠标拖动左边的控件。


python教程分享python实战之PyQt5实现漫画脸

   界面设计完成后点左上角的保存就可以,因为我这个就是一个简单的界面我就没有设置布局之类的,如果有强迫症的小伙伴可以去设置布局哦,在csdn中都有资料的哦。

4:ui转化为py


python教程分享python实战之PyQt5实现漫画脸

 qrctopy这个我说一下,因为这个gui界面没有用到图片就没有qrc转化py,qrc这个就是把图片py文件才能在使用ui转化的py,否则就不可以显示你在qtdesigners 上面设计的图片。

5:在python上面运行转化后的py文件


python教程分享python实战之PyQt5实现漫画脸

一般转化过来的py文件里面,类都是没有初始化的,这个后面有一个坑,就是文件窗口调用的时候,你得初始化继承qt中的类才能继续使用文件窗口那个功能,小伙伴如果有什么不理解,可以等会看完整的代码就明白了。

6:我们现在运行py文件就可以看见下面这个gui界面,所以第一步算是完成了。


python教程分享python实战之PyQt5实现漫画脸

3.百度智能云api的调用。

接下来我们来调用百度智能云的api  。

1.首先我们先打开 百度智能云。

2.


python教程分享python实战之PyQt5实现漫画脸

 然后我们找到这个图像特效


python教程分享python实战之PyQt5实现漫画脸

 我么可以查看这个调用方法,然后去获取免费的调用机会。


python教程分享python实战之PyQt5实现漫画脸

主要是获取到这个ak 和sk,调用的时候需要用到这个东西。如果吊用还不是很懂的话,可以仔细看看官方的调用文档,接下来话不多说,直接上代码。

  import requests, base64        # 这个函数的操作是为了获取access_token参数  def get_access_token():      url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[ak]&client_secret=[sk]'         res = requests.post(url)      res = res.json()      # print(res)      access_token = res['access_token']      return access_token        def img2cartoon(path):          request_url = "https://aip.baidubce.com/rest/2.0/image-process/v1/selfie_anime"      # 二进制方式打开图片文件          f = open(path, 'rb')          img1 = base64.b64encode(f.read())             params = {"image":img1}          access_token = get_access_token()          request_url = request_url + "?access_token=" + access_token          headers = {'content-type': 'application/x-www-form-urlencoded'}          response = requests.post(request_url, data=params, headers=headers)          print(response.json())                # 对响应结果进行处理          if response:              # 打开一个文件              f = open(path, 'wb')              # 获取动漫头像              anime = response.json()['image']              # 对返回的头像进行解码              anime = base64.b64decode(anime)              # 将头像写入文件当中              f.write(anime)              f.close()        if __name__ == '__main__':            img2cartoon()

 调用成功后,我们的这个第二步就成功了。

4.调控界面的控件。

接下来我们来给界面的布局建立信号和槽

1.界面一共有三个标签,两个按键,一个输入表格。


python教程分享python实战之PyQt5实现漫画脸

 查看图片我们是直接打开窗口选择文件然后在输入表格上面显示,就是文件窗口我们如果要使用的话,我们得给类初始化,并继承qt中的类,才能正常使用其中的qt调用窗口函数。

  class ui_mainwindow(qtwidgets.qmainwindow):      def __init__(self):          super(ui_mainwindow, self).__init__()

然后我们分别给按键调用函数功能。

          self.pushbutton.clicked.connect(self.xians)          self.pushbutton_2.clicked.connect(self.zh)

可能还有一些小伙伴没有看明白,我们直接上源码吧

  # -*- coding: utf-8 -*-     # form implementation generated from reading ui file 'six.ui'  #  # created by: pyqt5 ui code generator 5.15.4  #  # warning: any manual changes made to this file will be lost when pyuic5 is  # run again.  do not edit this file unless you know what you are doing.        from pyqt5 import qtcore, qtgui, qtwidgets  import os,sys  from pyqt5.qtwidgets import *     class ui_mainwindow(qtwidgets.qmainwindow):      def __init__(self):          super(ui_mainwindow, self).__init__()      def setupui(self, mainwindow):          mainwindow.setobjectname("mainwindow")          mainwindow.resize(1062, 652)          self.centralwidget = qtwidgets.qwidget(mainwindow)          self.centralwidget.setobjectname("centralwidget")          self.label = qtwidgets.qlabel(self.centralwidget)          self.label.setgeometry(qtcore.qrect(40, 10, 471, 451))          self.label.setobjectname("label")          self.label_2 = qtwidgets.qlabel(self.centralwidget)          self.label_2.setgeometry(qtcore.qrect(570, 10, 431, 451))          self.label_2.setobjectname("label_2")          self.pushbutton = qtwidgets.qpushbutton(self.centralwidget)          self.pushbutton.setgeometry(qtcore.qrect(150, 530, 151, 41))          self.pushbutton.setstylesheet("font: 16pt "仿宋";")          self.pushbutton.setobjectname("pushbutton")          self.pushbutton_2 = qtwidgets.qpushbutton(self.centralwidget)          self.pushbutton_2.setgeometry(qtcore.qrect(740, 530, 151, 41))          self.pushbutton_2.setstylesheet("font: 16pt "仿宋";")          self.pushbutton_2.setobjectname("pushbutton_2")          self.widget = qtwidgets.qwidget(self.centralwidget)          self.widget.setgeometry(qtcore.qrect(350, 200, 110, 17))          self.widget.setobjectname("widget")          self.horizontallayout = qtwidgets.qhboxlayout(self.widget)          self.horizontallayout.setcontentsmargins(0, 0, 0, 0)          self.horizontallayout.setobjectname("horizontallayout")          self.widget1 = qtwidgets.qwidget(self.centralwidget)          self.widget1.setgeometry(qtcore.qrect(340, 490, 371, 41))          self.widget1.setobjectname("widget1")          self.horizontallayout_2 = qtwidgets.qhboxlayout(self.widget1)          self.horizontallayout_2.setcontentsmargins(0, 0, 0, 0)          self.horizontallayout_2.setobjectname("horizontallayout_2")          self.label_3 = qtwidgets.qlabel(self.widget1)          self.label_3.setstylesheet("font: 12pt "隶书";")          self.label_3.setobjectname("label_3")          self.horizontallayout_2.addwidget(self.label_3)          self.lineedit = qtwidgets.qlineedit(self.widget1)          self.lineedit.setobjectname("lineedit")          self.horizontallayout_2.addwidget(self.lineedit)          mainwindow.setcentralwidget(self.centralwidget)          self.menubar = qtwidgets.qmenubar(mainwindow)          self.menubar.setgeometry(qtcore.qrect(0, 0, 1062, 26))          self.menubar.setobjectname("menubar")          mainwindow.setmenubar(self.menubar)          self.statusbar = qtwidgets.qstatusbar(mainwindow)          self.statusbar.setobjectname("statusbar")          mainwindow.setstatusbar(self.statusbar)             self.retranslateui(mainwindow)          qtcore.qmetaobject.connectslotsbyname(mainwindow)         def retranslateui(self, mainwindow):          _translate = qtcore.qcoreapplication.translate          mainwindow.setwindowtitle(_translate("mainwindow", "漫画脸生成"))          self.label.settext(_translate("mainwindow", "原图"))          self.label_2.settext(_translate("mainwindow", "漫画脸"))          self.pushbutton.settext(_translate("mainwindow", "查看原图:"))          self.pushbutton_2.settext(_translate("mainwindow", "生成漫画脸"))          self.label_3.settext(_translate("mainwindow", "图片地址:"))          self.pushbutton.clicked.connect(self.xians)          self.pushbutton_2.clicked.connect(self.zh)         def xians(self):              self.cwd = os.getcwd()              print(type(self.cwd))              filename_choose = qfiledialog.getopenfilename(self, "文件打开",                                                            # 起始路径                                                            self.cwd,                                                            "all files (*);;text files (*.txt)")  # 设置文件扩展名过滤,用双分号间隔                 if filename_choose[0] == "":                  print("n取消选择")                  return              self.lineedit.settext(filename_choose[0])              if os.path.isfile(self.lineedit.text()) == true:                     png = qtgui.qpixmap(self.lineedit.text())                  self.label.setpixmap(png)                  self.label.setscaledcontents(true)              else:                  self.messagedialog()                 pass                           def messagedialog(self):              mag_box = qtwidgets.qmessagebox(qtwidgets.qmessagebox.warning, '警告', '文件异常!')              mag_box.exec_()      def zh(self):          import apics #这个就是调用api接口那个函数          path = self.lineedit.text()          path = path.replace('', '\')          apics.img2cartoon(path)          png = qtgui.qpixmap(self.lineedit.text())          self.label_2.setpixmap(png)          self.label_2.setscaledcontents(true)          pass     if __name__ == '__main__':         app = qtwidgets.qapplication(sys.argv)      mainwindow = qtwidgets.qmainwindow()      ui = ui_mainwindow()      ui.setupui(mainwindow)      mainwindow.show()      sys.exit(app.exec_())

5.最终成果


python教程分享python实战之PyQt5实现漫画脸

6.总结

到此这篇关于python实战之pyqt5实现漫画脸的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。

需要了解更多python教程分享python实战之PyQt5实现漫画脸,都可以关注python教程分享栏目—XD中文网(www.xdcnz.com)

本文链接:https://xdcnz.com/7434.html