利用PyQt5生成过年春联

需求说明:

通过在界面上输入春联的上、下批和横批汉字从而生成春联图像,最后将春联图片保存。有实际需要的还可以将春联打印。

实现过程:

实现思路是先下载好春联的背景图片,再下载每个汉字的文字图片将文字图片粘贴到春联背景上。所以这里有用了一个春联图片的三方获取地址。

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))  # 单个文字的形状是正方形,所以这里的长、宽都是一致的

效果图

到此这篇关于利用PyQt5生成过年春联的文章就介绍到这了,更多相关PyQt5春联内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • PyQt5 实现百度图片下载器GUI界面

    通过 Pyqt5 实现一个界面化的下载器,在通过网络请求实现各种类型的图片的下载.可以通过界面上输入不同图片的关键字从而实现下载图片并将下载好的图片保存到自定义的文件路径中. 在介绍代码块内容之前,先来看一下需要用到的三方的 python 库. from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * import os from scripy_images import ScripyIm

  • 利用PyQT5日期控件制作一个小日历

    目录 介绍 主要代码 补充 介绍 日历的制作比较简单,因为pyqt5已经自带了相关的日期控件,只需要明白如何调用再加上比较个性化的功能,这个日历的小控件就制作完成了. 日历实现代码量不多,具体效果如下图 主要代码 在制作过程中使用到的python模块包说明: from PyQt5.QtWidgets import * # 窗口组件 from PyQt5.QtCore import * # 核心组件.日历组件就是在这个库 import sys # 操作系统处理库 在小日历的制作过程中只使用了一个槽

  • 利用Python代码制作过年春联

    目录 一.春联一 1.效果展示 2.代码展示 二.春联二 1.环境准备 2.效果展示 3.代码 一.春联一 1.效果展示 2.代码展示 index.html <!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <title>css3春联切换</title> <link rel="stylesheet&qu

  • 基于PyQT5制作一个二维码生成器

    个性化二维码的exe桌面应用的获取方式我放在文章最后面了,注意查收.通过执行打包后的exe应用程序可以直接运行生成个性化二维码. 开始之前先来看一下通过二维码生成器是如何生成个性化二维码的. 其中使用的python包和之前的GUI应用制作使用的模块是一样的. # -*- coding:utf-8 -*- import os import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore im

  • 利用PyQt5制作一个豆瓣电影信息查看器

    制作一个查看器可以查看豆瓣前100名电影的信息,当然这个爬取信息比较简单.所以重点放在 QThread 多线程的应用上面. QThread 子线程是 PyQt5 自带的一个线程使用,因为如果使用 PyQt5 的主线程去做所有的事情.如果处理速度太慢的情况下主线程就会直接出现卡死状态. 网络信息提取的相关模块有下面这些,主要是一个获取 Html 信息,另一个解析 Html5 的页面信息. import requests # 网络请求库 from bs4 import BeautifulSoup #

  • Python利用PyQT5设置闹钟功能

    通过PyQt5实现设置一个小闹钟的功能,到了设置的时间后可以响起一段音乐来提醒. 导入UI界面组件相关的模块 from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtGui import * 导入应用操作相关的模块 import sys from PyQt5.QtMultimedia import * 初始化函数 init_ui() 函数,PyQt5 界面布局使用了三种,分别是垂直化布局.水平化布局.栅格布局.

  • 利用PyQt5生成过年春联

    需求说明: 通过在界面上输入春联的上.下批和横批汉字从而生成春联图像,最后将春联图片保存.有实际需要的还可以将春联打印. 实现过程: 实现思路是先下载好春联的背景图片,再下载每个汉字的文字图片将文字图片粘贴到春联背景上.所以这里有用了一个春联图片的三方获取地址. http://xufive.sdysit.com/tk 春联生成部分参考了 CSDN 博客平台. 网络数据获取相关模块 import io # python IO 处理模块 from PIL import Image # 图像处理模块

  • 如何利用PyQt5制作一个简单的登录界面

    目录 环境配置 额外工具配置 生成UI界面 总结 环境配置 新建python虚拟环境并激活 conda create -n pyqt python=3.8 conda activate py36 安装pyqt5 pip install pyqt5 安装pyqt5-tools pip install pyqt5-tools 在PyCharm中新建一个qtdemo工程,并使用这个新建的python虚拟环境作为工程环境 额外工具配置 依次点击File---Settings---Tools---Exte

  • 利用python生成一个导出数据库的bat脚本文件的方法

    实例如下: # 环境: python3.x def getExportDbSql(db, index): # 获取导出一个数据库实例的sql语句 sql = 'mysqldump -u%s -p%s -h%s -P%d --default-character-set=utf8 --databases mu_ins_s%s > %s.s%d.mu_ins_%d.sql' %(db['user'], db['pwd'], db['host'], db['port'], index, db['serv

  • Java利用Zxing生成二维码的简单实例

    Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码 1.二维码的生成 1.1 将Zxing-core.jar 包加入到classpath下. 1.2 二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的,可以将该类拷贝到源码中,这里我将该类的源码贴上,可以直接使用. import com.google.zxing.common.BitMatrix; i

  • 利用JS生成博文目录及CSS定制博客

    本文实例为大家介绍了利用JS生成博文目录及CSS定制博客的方法,分享给大家供大家参考,具体内容如下 1.JS代码 想要生成目录,许多都说需要JS修改权限,那个这里就直接进入设置页面,找到下方的联系邮箱直接发去就行了,工作人员回复的还是很快的. 拿到权限之后,下面就是将编(搜)写(寻)的JS代码放在页脚HTML代码的方框内,然后点击保存就可以了.要注意目录的生成是几级标题,这一点可是很重要的.JS代码如下,基本没有变化,拷贝了原作者的写法,可以生成二级目录,分别为h2和h3,这点需要注意. 综合来

  • PHP利用imagick生成组合缩略图

    先给大家炫下效果图,如果大家觉得还很满意,请继续往下阅读: 这里说的imagick 是 ImageMagick 在PHP下的扩展.使用pecl安装起来那叫一个轻松简单一条命令就搞定: 复制代码 代码如下: sudo pecl install imagick (扩展装好后还是要在php.ini中加上extension=imagick.so,然后记得重启apache或php-fpm服务.) 最近有个需求是要把多张图片组合起来生成缩略图,刚好用用这个强大的imagick扩展. 这个需求是要这样生成缩略

  • 利用PHP生成静态html页面的原理

    前言 如果每次用户点击动态链接的时候都会对服务器发送数据查询的要求,对于一个访问量可能达百万千万级别的网站来说 这无疑是服务器一个大大的负担,所以把动态数据转换成静态html页面就成了节省人力物力的首选因为此前没有相应的经验,所以这篇文章和大家分享利用PHP生成静态html页面的原理和方法,有需要的可以一起来看看. 一.思路分析 其实,实现静态页面生成功能的原理很简单,主要利用几个常见的PHP文件操作函数对文件进行操作,其思路流程如下: 生成静态页面流程图 二.功能实现 设置example.ht

随机推荐