用PyQt5生成春联效果的代码是什么
Admin 2022-09-06 群英技术资讯 427 次浏览
需求说明:
通过在界面上输入春联的上、下批和横批汉字从而生成春联图像,最后将春联图片保存。有实际需要的还可以将春联打印。
实现过程:
实现思路是先下载好春联的背景图片,再下载每个汉字的文字图片将文字图片粘贴到春联背景上。所以这里有用了一个春联图片的三方获取地址。
http://xufive.sdysit.com/tk
春联生成部分参考了 CSDN 博客平台。
网络数据获取相关模块
import io # python IO 处理模块 from PIL import Image # 图像处理模块 import requests # 网络请求模块
UI 相关模块
from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import *
主题样式模块引用
from QCandyUi import CandyWindow
应用操作相关模块
import sys import os
UI界面主要代码展示
def init_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('横批演示.jpg')) hbox = QHBoxLayout() self.brower = QTextBrowser() self.brower.setFont(QFont('宋体', 8)) self.brower.setReadOnly(True) self.brower.setPlaceholderText('信息展示区域') self.brower.ensureCursorVisible() form = QFormLayout() self.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)
槽函数的应用
def update_log(self, text): ''' 槽函数:向文本浏览器中写入内容 :param text: :return: ''' cursor = self.brower.textCursor() cursor.movePosition(QTextCursor.End) self.brower.append(text) self.brower.setTextCursor(cursor) self.brower.ensureCursorVisible() def save_btn_click(self): dicr = QFileDialog.getExistingDirectory(self, '选择文件夹', os.getcwd()) self.save_path.setText(dicr) def start_btn_click(self): self.start_btn.setEnabled(False) self.thread_.start() def finished(self, finished): if finished is True: self.start_btn.setEnabled(True) h_image = self.save_path.text().strip() + '/横批.jpg' if os.path.isfile(h_image): self.image_label.setPixmap(QPixmap(h_image)) self.update_log('由于上下联不好预览,请使用图片查看器预览,目前仅支持横批图片预览...')
春联文字获取主题代码
def run(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() if up_text == '' or down_text == '' or h_text == '' or save_path == '': self.trigger.emit('参数设置不允许为空,请设置好后重新开始!') self.finished.emit(True) else: text = up_text + ' ' + down_text self.generate_image(text, layout='V', pre=0.75, out_file=save_path + '/上下联.jpg') self.generate_image(h_text, layout='H', pre=0.75, out_file=save_path + '/横批.jpg') self.finished.emit(True)
文字图片获取部分
def get_word_image(self, ch='bg', pre=1.0): ''' 单文字图片下载函数 :param ch: 默认网络请求参数'bg' :param pre: 单个文字对象 :return: 图像对象 ''' res = io.BytesIO(requests.post(url='http://xufive.sdysit.com/tk', data={'ch': ch}).content) image = Image.open(res) w, h = image.size w, h = int(w * float(pre)), int(h * float(pre)) return image.resize((w, h)) # 单个文字的形状是正方形,所以这里的长、宽都是一致的
效果图
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章介绍了python实现模拟数字的魔术游戏,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
大家好,本篇文章主要讲的是python3基础之集合set详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
本文我们来聊一聊Python的整数,我们知道Python的整数是不会溢出的,换句话说,它可以计算无穷大的数,只要你的内存足够,它就能计算。但问题是,Python底层又是C实现的,那么它是怎么做到整数不溢出的呢?本文就来详细说说
内容介绍一、整理数据二、修改点的样式三、呈现半透明的状态四、点呈现多彩的颜色五、让点的大小不一六、侧边呈现颜色卡七、改变集中性一、整理数据importpandasaspdcnbodf=pd.r
这篇文章主要介绍了Python基础学习函数+模块+类,这是基础学习的第三篇内容,小编已把前两篇链接放在下面,需要学习的同学可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008