pyqt5制作翻译软件+爬虫

VSC+python+mysql,

文章目录

目录

文章目录

前言

一、详细代码

第一个文件Ui_untitled.py

第二个fy_main.py文件:

第三个 :bd_pachong.py

二、登录界面:

总结


前言

通过pyqt5实现了翻译界面的可视化,利用python爬虫实现了翻译,如下图:

 英——>汉

汉——>英

 

 句子翻译:

 

一、详细代码

第一个文件Ui_untitled.py

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'd:\python代码\翻译\untitled.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.QtWidgets import QApplication,QMainWindow,QMessageBox
from PyQt5 import QtCore, QtGui, QtWidgets
from bdpachong import *class Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(900, 741)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(255, 255, 255, 255), stop:1 rgba(255, 255, 255, 255));")self.centralwidget.setObjectName("centralwidget")self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)self.verticalLayout.setContentsMargins(0, 0, 0, 0)self.verticalLayout.setSpacing(1)self.verticalLayout.setObjectName("verticalLayout")self.textEdit = QtWidgets.QTextEdit(self.centralwidget)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.textEdit.sizePolicy().hasHeightForWidth())self.textEdit.setSizePolicy(sizePolicy)self.textEdit.setMaximumSize(QtCore.QSize(16777215, 85))self.textEdit.setSizeIncrement(QtCore.QSize(0, 0))font = QtGui.QFont()font.setPointSize(20)font.setBold(True)font.setWeight(75)font.setKerning(True)self.textEdit.setFont(font)self.textEdit.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.ArrowCursor))self.textEdit.setMouseTracking(False)self.textEdit.setToolTipDuration(-1)self.textEdit.setStyleSheet("background-color: qlineargradient(spread:pad, x1:1, y1:1, x2:1, y2:1, stop:0 rgba(4, 192, 213, 255), stop:1 rgba(255, 255, 255, 255));\n"
"border-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(255, 255, 255, 255), stop:1 rgba(255, 255, 255, 255));")self.textEdit.setFrameShadow(QtWidgets.QFrame.Raised)self.textEdit.setLineWidth(1)self.textEdit.setMidLineWidth(0)self.textEdit.setLineWrapColumnOrWidth(0)self.textEdit.setTabStopWidth(80)self.textEdit.setAcceptRichText(True)self.textEdit.setCursorWidth(1)self.textEdit.setObjectName("textEdit")self.verticalLayout.addWidget(self.textEdit)self.textEdit_2 = QtWidgets.QTextEdit(self.centralwidget)self.textEdit_2.setMaximumSize(QtCore.QSize(16777215, 60))self.textEdit_2.setStyleSheet("background-color: qlineargradient(spread:pad, x1:1, y1:0, x2:1, y2:1, stop:0 rgba(0, 192, 213, 255), stop:1 rgba(190, 255, 255, 255));")self.textEdit_2.setObjectName("textEdit_2")self.verticalLayout.addWidget(self.textEdit_2)self.pushButton = QtWidgets.QPushButton(self.centralwidget)palette = QtGui.QPalette()brush = QtGui.QBrush(QtGui.QColor(147, 221, 221))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(170, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)brush = QtGui.QBrush(QtGui.QColor(170, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)brush = QtGui.QBrush(QtGui.QColor(170, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)brush = QtGui.QBrush(QtGui.QColor(147, 221, 221))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(170, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)brush = QtGui.QBrush(QtGui.QColor(170, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)brush = QtGui.QBrush(QtGui.QColor(170, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(170, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)brush = QtGui.QBrush(QtGui.QColor(170, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)brush = QtGui.QBrush(QtGui.QColor(170, 255, 255))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)self.pushButton.setPalette(palette)font = QtGui.QFont()font.setPointSize(10)font.setBold(True)font.setItalic(False)font.setWeight(75)self.pushButton.setFont(font)self.pushButton.setStyleSheet("background-color: rgb(170, 255, 255);\n"
"border-color: rgb(170, 255, 255);\n"
"")self.pushButton.setObjectName("pushButton")self.verticalLayout.addWidget(self.pushButton)self.label_5 = QtWidgets.QLabel(self.centralwidget)self.label_5.setMaximumSize(QtCore.QSize(16777215, 30))palette = QtGui.QPalette()brush = QtGui.QBrush(QtGui.QColor(186, 186, 186))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(222, 222, 222, 222))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Button, brush)brush = QtGui.QBrush(QtGui.QColor(222, 222, 222, 222))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)brush = QtGui.QBrush(QtGui.QColor(222, 222, 222, 222))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush)brush = QtGui.QBrush(QtGui.QColor(186, 186, 186))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(222, 222, 222, 222))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Button, brush)brush = QtGui.QBrush(QtGui.QColor(222, 222, 222, 222))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)brush = QtGui.QBrush(QtGui.QColor(222, 222, 222, 222))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush)brush = QtGui.QBrush(QtGui.QColor(120, 120, 120))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)brush = QtGui.QBrush(QtGui.QColor(222, 222, 222, 222))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Button, brush)brush = QtGui.QBrush(QtGui.QColor(222, 222, 222, 222))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)brush = QtGui.QBrush(QtGui.QColor(222, 222, 222, 222))brush.setStyle(QtCore.Qt.SolidPattern)palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush)self.label_5.setPalette(palette)font = QtGui.QFont()font.setBold(True)font.setWeight(75)self.label_5.setFont(font)self.label_5.setMouseTracking(False)self.label_5.setStyleSheet("background-color: rgba(222,222,222,222);")self.label_5.setLineWidth(3)self.label_5.setIndent(5)self.label_5.setObjectName("label_5")self.verticalLayout.addWidget(self.label_5)self.textEdit_3 = QtWidgets.QTextEdit(self.centralwidget)self.textEdit_3.setObjectName("textEdit_3")self.verticalLayout.addWidget(self.textEdit_3)self.verticalLayout.setStretch(0, 1)MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 900, 26))self.menubar.setObjectName("menubar")self.menu = QtWidgets.QMenu(self.menubar)self.menu.setObjectName("menu")self.menu_2 = QtWidgets.QMenu(self.menubar)self.menu_2.setObjectName("menu_2")self.menu_3 = QtWidgets.QMenu(self.menubar)self.menu_3.setObjectName("menu_3")self.menu_4 = QtWidgets.QMenu(self.menubar)self.menu_4.setObjectName("menu_4")self.menu_5 = QtWidgets.QMenu(self.menubar)self.menu_5.setObjectName("menu_5")MainWindow.setMenuBar(self.menubar)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.action = QtWidgets.QAction(MainWindow)self.action.setObjectName("action")self.action_2 = QtWidgets.QAction(MainWindow)self.action_2.setObjectName("action_2")self.menu.addAction(self.action)self.menu.addAction(self.action_2)self.menubar.addAction(self.menu.menuAction())self.menubar.addAction(self.menu_2.menuAction())self.menubar.addAction(self.menu_3.menuAction())self.menubar.addAction(self.menu_4.menuAction())self.menubar.addAction(self.menu_5.menuAction())self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.pushButton.setText(_translate("MainWindosetIconTextw", "开 始 翻  译"))self.label_5.setText(_translate("MainWindow", "例句/短语"))self.menu.setTitle(_translate("MainWindow", "菜单"))self.menu_2.setTitle(_translate("MainWindow", "工具"))self.menu_3.setTitle(_translate("MainWindow", "设置"))self.menu_4.setTitle(_translate("MainWindow", "视图"))self.menu_5.setTitle(_translate("MainWindow", "帮助"))self.action.setText(_translate("MainWindow", "收藏"))self.action_2.setText(_translate("MainWindow", "添加入词库"))self.action_2.setIconText(_translate("MainWindow", "添加入词库"))self.pushButton.clicked.connect(self.ksfy)#对用户输入的进行判断def ksfy(self):word=self.textEdit.toPlainText()word=word.replace("\n","").replace("?","").replace("!","").replace(" ","%20").replace(",","")            #防止输入回车导致报错a,b=pacho(word)if len(a)==0 and len(b)==0:QMessageBox.critical(None,'警告','十分抱歉,未能找到您输入对应的翻译\n请重新输入',QMessageBox.Yes)else:s=''for cy in a:s=s+str(cy)+'\n\n'self.textEdit_2.setText(s)s=''for lj in b:s=s+str(lj)+'\n\n'self.textEdit_3.setText(s)

第二个fy_main.py文件:


from PyQt5.QtWidgets import QApplication,QMainWindow
from Ui_untitled import *
import sysfrom Ui_untitled import Ui_MainWindow
if __name__ == "__main__":app = QApplication(sys.argv)win_fy = QMainWindow()fy = Ui_MainWindow()fy.setupUi(win_fy)win_fy.show()sys.exit(app.exec_())

第三个 :bd_pachong.py

from lxml import etree
from matplotlib.pyplot import flag
import requests
def pacho(word):header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36 Edg/102.0.1245.33'}page_url='https://dict.youdao.com/w/'+word+'/#keyfrom=dict2.top'page_text=requests.get(url=page_url,headers=header).texttree=etree.HTML(page_text)# tree1 = html.tostring(tree[0])# #编码'utf-8'# tree2 = HTMLParser().unescape(tree1.decode('utf-8'))# print(tree2)res = Truefor w in word:          #判断是否全是中文if not '\u4e00' <= w <= '\u9fff':res = Falseif word.encode('utf-8').isalpha():  #判断是否全是英文ciyi=tree.xpath('//*[@id="phrsListTab"]/div[2]/ul/li/text()')liju=tree.xpath('//*[@id="collinsResult"]/div/div/div/div/ul/li/div/div/p/text()')return ciyi,lijuelse:  changju=tree.xpath('//*[@id="fanyiToggle"]/div/p[2]/text()')ciyi=tree.xpath('//*[@id="phrsListTab"]/div[2]/ul/p[1]/span/a/text()') liju=tree.xpath('//*[@id="webPhrase"]/p/span/a/text()')dy=tree.xpath('//*[@id="webPhrase"]/p/text()')dy_a=[]for i in dy:    #数据清洗if len(i.replace("\n","").replace(" ",""))==0:continue          dy_a.append(i.replace("\n","").replace(" ",""))for i in range(len(liju)):liju[i]=liju[i]+':'+dy_a[i]         #归并数据if len(liju)==0 and len(ciyi)==0:liju=changjureturn ciyi,lijuif __name__=='__main__':pacho()

二、登录界面:

这的登录界面只需要去看我的另一篇文章,之需要将登录那个板块的代码复制,修改一下素材的路径就可以了,这里就不赘述了。

pyqt5重庆连接二手房数据可视化完整项目_lanzha的博客-CSDN博客


总结

这里只展示了翻译节目的制作,以及爬虫的文件,数据来源与有道。爬虫可以直接作为单个项目是运行。下面是整个完整项目的压缩包

一个可视化界面的翻译项目,可以实现汉译英与英译汉。-Python文档类资源-CSDN文库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/65545.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给 30 岁左右的你三个职场跃迁/改变命运的建议!

见字如面&#xff0c;我是军哥&#xff01; 通过公众号的后台用户画像数据&#xff0c;我发现我的读者在 26 到 32 岁的年龄阶段的人数最多&#xff0c;所以今天来聊一聊这个话题&#xff0c;你一定要看到最后&#xff0c;会让你少走很多弯路&#xff01; 核心观点主要包括三个…

38岁程序员和你分享4个人生经验!

蓝色关注&#xff0c;回复“1”获取知名公司程序员和产品经理职级 这是我的第「123」篇原创文章 见字如面&#xff0c;我是军哥。 我最近一直想写一篇稍微长点的文章&#xff0c;毕竟内容篇幅有时候决定内容广度和深度。 距离我之前写的那篇文章《一位互联网老兵的五次认知升级…

【我命由我不由天】30多岁的大龄程序员,应该如何保持职场竞争力?

公众号后台回复“学习”&#xff0c;获取作者独家秘制精品资料 扫描下方海报二维码&#xff0c;试听课程&#xff1a; &#xff08;课程详细大纲&#xff0c;请参见文末&#xff09; 目录 回首往事&#xff1a;自己竟没有任何核心优势&#xff01;公司遇到危机时&#xff0c;大…

写给互联网人35岁之后的建议

作者介绍 李凯东 某大厂大数据总监&#xff0c;管理经验丰富&#xff1b; 负责数据、用户、搜索、推荐、AI等&#xff1b; 曾有10年连续创业经历&#xff1b; 产研运全能&#xff0c;国内知名比赛获奖无数&#xff1b; “数据人创作者联盟”成员。 又到了春节&#xff0c…

程序员如何跨越35岁危机?这篇给点干货建议!

职场&认知洞察 丨 作者 / findyi 这是findyi公众号的第83篇原创文章 这两天在我的读者群里做了一个职业小调研&#xff0c;发现关注我公众号的70%以上都是程序员。 毕竟程序员吸引程序员&#xff0c;这也算猿粪吧&#xff0c;哈哈。 这个小调研也引发大家对程序员行业的激烈…

35岁是人生分水岭?一定要做这7件事

在网上看到这样的帖子&#xff0c;说的是35岁以上的员工&#xff0c;有人脉的卖保险&#xff0c;没人脉的跑滴滴&#xff0c;实在不行送外卖。招聘时&#xff0c;35岁以下优先。调整时&#xff0c;35岁以上优化。对绝大数人来说&#xff0c;35岁是一道坎&#xff0c;35岁是人生…

32岁大龄女程序员的职场经历总结,分享重回职场的感受

不知不觉已经三十过二&#xff0c;我2016年研究生毕业就来到了苏州一家国企。我对自己并没有清晰的职业规划&#xff0c;还记得来这家公司面试时&#xff0c;面试官问我&#xff0c;为啥选择我们公司。我说因为他是国企又有互联网公司的性质&#xff0c;即稳定又能写代码&#…

麦肯锡:给20、30岁职场年轻人的14条建议!条条珍贵

点击“技术领导力”关注∆ 每天早上8:30推送 来源&#xff1a; 《麦肯锡决断力》 1、 选择工作的标准: 选择有利于自己成长的公司&#xff1b; 选择可以从事国际性工作的公司&#xff1b; 选择可以充分发挥自身能力&#xff0c;创造出价值&#xff0c;并且可以为社会做出贡献…

给还没到35岁中年危机的程序员们一些建议

前言 上周&#xff0c;我一个同学被柔性辞退了&#xff0c;是一个外企&#xff0c;给了n 1的补偿&#xff0c;十来万人民币。他在那家公司干了三年多&#xff0c;毕业十年换过四家单位&#xff0c;都是国企或者外企。他今年三十四岁&#xff0c;年前就知道要走的消息&#xff…

30岁程序员回顾人生、展望未来

活动地址&#xff1a;http://blog.csdn.net/blogdevteam/article/details/42172979 一、回顾毕业以来这么多年走过的路 从2007年7月份走出校门到今天2014年12月份&#xff0c;已经整整7年半了。想想7年半之前的自己&#xff0c;再看看现在的我&#xff0c;这么多年走过的路&a…

作为40岁的IT过来人,我有3个建议想对年轻程序员说!

见字如面&#xff0c;我是军哥&#xff01; 我刚毕业的时候也认为技术可以改变世界&#xff0c;如今 40 岁了&#xff0c;N 多年过去了觉得太可笑了&#xff01; 我总结了三个点&#xff0c;分享给年轻的程序员&#xff0c;请一定要看到最后哦&#xff5e; 1、 大部分公司的程序…

35岁+的大龄程序员:面对“中年危机”,这份书单或许能帮到你

摘要&#xff1a;对于多数程序员来说&#xff0c;40岁之前赚到别人60岁的钱是普遍目标&#xff0c;不过职业的进阶也印证着人生的进阶&#xff0c;所以何时开始思考未来的职业规划&#xff0c;都不算早。 知乎上有个话题叫做“程序员的悲哀是什么&#xff1f;”&#xff0c;有个…

冯唐:我给20、30岁IT职场年轻人的建议

说起冯唐&#xff0c;多数人的印象只停留在“春风十里不如你”、“如何避免成为油腻腻的中年人”上&#xff0c;以为他只是个当代作家。 其实&#xff0c;冯唐曾就职于麦肯锡公司&#xff0c;从事旧时被称为军师、幕僚或师爷的工作。也曾担任华润集团战略管理部总经理、中信资…

2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议

点击“技术领导力”关注∆ 每天早上8:30推送 作者| Mr.K 编辑| Emma 来源| 微信公众号 技术领导力(ID&#xff1a;jishulingdaoli) 前天的推文《冯唐&#xff1a;职场人35岁以后&#xff0c;方法论比经验重要》&#xff0c;收到了不少读者的反馈&#xff0c;觉得挺受启发。其…

如何优化供应商采购系统,提升供应商管理和采购流程效能

随着企业采购向数字化转型的发展&#xff0c;供应商采购系统的使用也越来越广泛。如何优化供应商采购系统&#xff0c;提升供应商管理和采购流程效能&#xff0c;已成为企业面临的重要问题。本文将为大家介绍一些优化供应商采购系统的方法&#xff0c;以提升采购效率和管理水平…

采购工作内容是什么?如何成为一名优秀的采购?

最近在看采购&#xff0c;供应链管理相关的书&#xff0c;梳理下思考的内容&#xff0c;希望大家对采购工作有一些认识。 1、采购工作概述 根据公司销售计划&#xff0c;采买到物美价廉的产品&#xff0c;且在这个过程中搭建并管理供应链&#xff0c;满足日常运转。 02采购的…

如何确保采购过程中的产品质量

在企业采购过程中&#xff0c;确保采购的产品质量是至关重要的。采购的质量直接关系到企业的生产和销售质量&#xff0c;影响企业的形象和利润。为了确保采购过程中的质量&#xff0c;企业需要采取一些措施来保证采购物料和商品的质量&#xff0c;以下是一些有效的方法&#xf…

如何做好采购供应商管理工作?

图为简道云采购全流程管理 首先先简单的说一下供应商管理出现的问题&#xff1a; 供应商合作当单品数很多&#xff0c;很难被淘汰&#xff1b;一线品牌供应商很牛&#xff0c;无账期&#xff0c;必须现付&#xff0c;很难管理&#xff1b;总是缺货&#xff0c;有没有更好当供应…

在采购管理过程中使用技术有什么好处?

采购过程不总是简单直接的&#xff0c;人工采购过程非常耗费人力和时间&#xff0c;并且涉及大量文书工作。另一方面&#xff0c;当你在采购过程中使用技术时&#xff0c;比如使用SRM采购管理系统&#xff0c;会节省很多时间&#xff0c;使整个过程变得更加简单和轻松。 在讨…

Midjourney入门必看课程

课程介绍: 本课程适合零基础同学以及希望使用AI提升工作效率的设计师同学。这是一个可以让你从0到1&#xff0c;从小白到熟悉AI绘画工具&#xff0c;最后能够熟练应用生成自己绘画作品的课程。在我们的课程里&#xff0c;你将学会如何使用midjourney等各种AI绘画软件与chatgpt…