当前位置: 首页 > 后端技术 > Python

过年了,让我们用PyQt5生成一对春联吧...

时间:2023-03-26 15:27:28 Python

限于篇幅,完整源码的获取方式在文末。【阅读全文】需求说明:通过在界面输入上、下、横批次的春联,生成春联图片,最终保存春联图片。必要时也可以印制春联。实现过程:实现思路是先下载春联背景图片,然后下载每个汉字的文字图片,将文字图片粘贴到春联背景上。所以这里提供一个春联图片的三方获取地址。http://xufive.sdysit.com/tk春联生成指CSDN博客平台。网络数据获取相关模块importio#pythonIO处理模块fromPILimportImage#图像处理模块importrequests#网络请求模块UI相关模块fromPyQt5.QtWidgetsimport*fromPyQt5.QtCoreimport*fromPyQt5.QtGuiimport*themestylemodule引用自QCandyUiimportCandyWindow应用运行相关模块importsysimportosUI界面主代码显示definit_ui(self):self.setWindowTitle('春联生成器')self.setWindowIcon(QIcon('春联.ico'))vbox_main=QVBoxLayout()self.image_label=QLabel()self.image_label.setScaledContents(True)self.image_label.setMaximumSize(650,150)self.image_label.setPixmap(QPixmap('Horizo??ntalbatchdemo.jpg'))hbox=QHBoxLayout()self.brower=QTextBrowser()self.brower.setFont(QFont('宋体',8))self.brower.setReadOnly(True)self.brower.setPlaceholderText('信息显示区')self.brower.ensureCursorVisible()form=QFormLayout()自己。up_label=QLabel()self.up_label.setText('设置上行链路')self.up_text=QLineEdit()self.up_text.setPlaceholderText('请输入上联')self.down_label=QLabel()self.down_label.setText('设置下联')self.down_text=QLineEdit()self.down_text.setPlaceholderText('请输入下联')self.h_label=QLabel()self.h_label.setText('设置横向')self.h_text=QLineEdit()self.h_text.setPlaceholderText('请输入横向')self.thread_=WorkThread(self)self.thread_.trigger.connect(self.update_log)self.thread_.finished.connect(self.finished)self.save_path=QLineEdit()self.save_path.setReadOnly(True)self.save_btn=QPushButton()self.save_btn.setText('存储路径')self.save_btn.clicked.connect(self.save_btn_click)form.addRow(self.up_label,self.up_text)form.addRow(self.down_label,self.down_text)form.addRow(self.h_label,self.h_text)form.addRow(self.save_path,self.save_btn)vbox=QVBoxLayout()self.start_btn=QPushButton()self.start_btn.setText('开始生成对联')self.start_btn.clicked.connect(self.start_btn_click)vbox.addLayout(form)vbox.addWidget(self.start_btn)hbox.addWidget(self.brower)hbox.addLayout(vbox)vbox_main.addWidget(self.image_label)vbox_main.addLayout(hbox)self.setLayout(vbox_main)槽函数applicationdefupdate_log(self,text):'''槽函数:将内容写入文本浏览器:paramtext::return:'''cursor=self.brower.textCursor()cursor.movePosition(QTextCursor.End)self.brower.append(text)self.brower.setTextCursor(cursor)self.brower.ensureCursorVisible()defsave_btn_click(self):dicr=QFileDialog.getExistingDirectory(self,'选择文件夹',os.getcwd())self.save_path.setText(dicr)defstart_btn_click(self):self.start_btn.setEnabled(False)self.thread_.start()deffinished(self,finished):如果finished为True:self.start_btn.setEnabled(True)h_image=self.save_path.text().strip()+'/horizo??ntalbatch.jpg'ifos.path.isfile(h_image):self.image_label.setPixmap(QPixmap(h_image))自我。update_log('由于上下联不易预览,请使用图片查看器进行预览,目前只支持横向批量图片预览...')春联文字获取主题代码defrun(self):up_text=self.parent.up_text.text()。strip()down_text=self.parent.down_text.text().strip()h_text=self.parent.h_text.text().strip()save_path=self.parent.save_path.text().strip()如果up_text==''ordown_text==''orh_text==''orsave_path=='':self.trigger.emit('参数设置不允许为空,请重新设置!')self。完成的。emit(True)else:text=up_text+''+down_textself.generate_image(text,layout='V',pre=0.75,out_file=save_path+'/UpandDown.jpg')self.generate_image(h_text,布局='H',pre=0.75,out_file=save_path+'/horizo??ntalbatch.jpg')self.finished.emit(True)文字图片获取部分defget_word_image(self,ch='bg',pre=1.0):'''单文图片下载函数:paramch:默认网络请求参数'bg':parampre:单文对象:return:图片对象'''res=io.BytesIO(requests.post(url='http://xufive.sdysit.com/tk',data={'ch':ch}).content)image=Image.open(res)w,h=image.sizew,h=int(w*float(pre)),int(h*float(pre))returnimage.resize((w,h))#单个文字的形状是正方形,所以长度,宽度一致完整源码获取方式:公众号回复“春联生成器”我是【Python集中营】,很高兴看到最后,我是一个专注于Python知识的公众号分享,希望能得到你的关注~【上期推荐】记录一下python中前十%占位符对应的格式...PyQt5UI做一个豆瓣电影信息查看器,初识QThread多线程...PyQt5最小化到托盘,升级小闹钟……pyi打包的exe文件nstaller太大,使用pipenv轻松解决!PyQt5小工具:Excel数据分组聚合器...