iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何用python编写一个生成春联软件
  • 349
分享到

如何用python编写一个生成春联软件

2024-04-02 19:04:59 349人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录前言效果展示代码打包exe可执行文件总结前言 最近不是快过年了,python写对联挺火的,但是代码又不是人人都用,那就直接写个界面打包一下呗~ 主要实现只要运行后输入上联下联、横

前言

最近不是快过年了,python写对联挺火的,但是代码又不是人人都用,那就直接写个界面打包一下呗~

主要实现只要运行后输入上联下联、横批,然后自动生成春联保存在代码文件夹,如果要打印出来也是可以的。

效果展示

输入对联,选择路径后点击开始生成春联即可。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

代码

需要导入的模块

# 网络数据获取相关模块
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

获取文字主题

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

生成对联

    def generate_image(self, words, layout='V', pre=1.0, out_file=None):
        '''
        :param words: 春联文本
        :param layout: 布局:水平/垂直
        :param pre: 春联比例
        :param out_file: 保存文件
        :return:
        '''
        quality = 'H'
        if pre == 0.75:
            quality = 'M'
        elif pre == 0.5:
            quality = 'L'
        usize = {'H': (640, 23), 'M': (480, 18), 'L': (320, 12)}
        bg_im = self.get_word_image(ch='bg', pre=pre)
        self.trigger.emit('春联背景下载完成!')
        text_list = [list(item) for item in words.split()]
        rows = len(text_list)
        cols = max([len(item) for item in text_list])

        if layout == 'V':
            ow, oh = 40 + rows * usize[quality][0] + (rows - 1) * 10, 40 + cols * usize[quality][0]
        else:
            ow, oh = 40 + cols * usize[quality][0], 40 + rows * usize[quality][0] + (rows - 1) * 10
        out_im = Image.new('RGBA', (ow, oh), '#f0f0f0')

        for row in range(rows):
            if layout == 'V':
                row_im = Image.new('RGBA', (usize[quality][0], cols * usize[quality][0]), 'white')
                offset = (ow - (usize[quality][0] + 10) * (row + 1) - 10, 20)
            else:
                row_im = Image.new('RGBA', (cols * usize[quality][0], usize[quality][0]), 'white')
                offset = (20, 20 + (usize[quality][0] + 10) * row)

            for col, ch in enumerate(text_list[row]):
                if layout == 'V':
                    pos = (0, col * usize[quality][0])
                else:
                    pos = (col * usize[quality][0], 0)
                ch_im = self.get_word_image(ch=ch, pre=pre)
                row_im.paste(bg_im, pos)
                row_im.paste(ch_im, (pos[0] + usize[quality][1], pos[1] + usize[quality][1]), mask=ch_im)

            out_im.paste(row_im, offset)
        self.trigger.emit('春联图片拼装完成!')

        if out_file:
            out_im.convert('RGB').save(out_file)
            self.trigger.emit('春联保存成功!')

UI部分代码

class GenerateScroll(QWidget):
    def __init__(self):
        super(GenerateScroll, self).__init__()
        self.init_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('横批演示.png'))

        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('由于上下联不好预览,请使用图片查看器预览,目前仅支持横批图片预览...')

打包exe可执行文件

以cmd为例

win+r打开运行框,输入cmd,按回车。

弹出命令提示符窗口后输入 pip install pyinstaller 安装这个pyinstaller模块

然后查看你的代码存放目录,复制下来,在命令提示符窗口切换目录。

如切换到D盘 输入 d: 这样就切换成功了。

在这里插入图片描述

输入 cd 将你的代码存放地址粘贴进去

在这里插入图片描述

这样就切换到你的代码存放目录了

然后输入 pyinstaller -F -w -i 图标名称.ico 代码文件名.py

如:pyinstaller -F -w -i aaa.ico zzz.py

等待打包完成即可

总结

到此这篇关于如何用python编写一个生成春联软件的文章就介绍到这了,更多相关python生成春联软件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 如何用python编写一个生成春联软件

本文链接: https://www.lsjlt.com/news/163492.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何用python编写一个生成春联软件
    目录前言效果展示代码打包exe可执行文件总结前言 最近不是快过年了,Python写对联挺火的,但是代码又不是人人都用,那就直接写个界面打包一下呗~ 主要实现只要运行后输入上联下联、横...
    99+
    2022-11-13
  • QT如何设计一个春联自动生成器
    小编给大家分享一下QT如何设计一个春联自动生成器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 前言春节是中国最隆重的传统节日,一到过年家家户户肯定是要贴春联...
    99+
    2023-06-29
  • 用python编写一个小程序,如何用python编写软件
    大家好,给大家分享一下用python编写一个小程序,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 1、python可以写手机应用程序吗? 我想有人曲解意思了,人家说用python开发渣蔽一个手机app,不是说用手机敲写py...
    99+
    2023-10-22
    python
  • 利用Python编写一个藏头诗在线生成器
    目录导语正文一、藏头诗(“小浪漫”)二、实现代码三、效果展示导语 我寻竹马旅尘埃,喜见梅花独自开。 欢得东风无限好,你似故人有缘来。 —&mdas...
    99+
    2022-11-10
  • 如何利用python将一个py文件变成一个软件详解
    目录前言一、第一步:写好文件二、第二步:生成程序1.安装库2.使用安装的库进行转化总结前言 本文重点说如何将py文件转化为exe文件,也就是windows电脑可以打开的文件,实现起来...
    99+
    2023-05-16
    py文件怎么变成exe 怎么将python文件转成软件 py文件转换成exe
  • 如何让用Python写一个语音播放软件
    如何让用Python写一个语音播放软件,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。单位经常使用广播进行临时事项的通知(将文字转换为语音然后通过功放广播),但是市面上多数语...
    99+
    2023-06-17
  • 基于C++如何编写一个文章生成器
    这篇“基于C++如何编写一个文章生成器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于C++如何编写一个文章生成器”文章吧...
    99+
    2023-07-05
  • 怎么利用Python编写一个藏头诗在线生成器
    这篇文章主要介绍了怎么利用Python编写一个藏头诗在线生成器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么利用Python编写一个藏头诗在线生成器文章都会有所收获,下面我们一起来看看吧。一、藏头诗(“小浪...
    99+
    2023-06-30
  • 怎么在Python中利用tkinter编写一个在线翻译软件
    这篇文章给大家介绍怎么在Python中利用tkinter编写一个在线翻译软件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫...
    99+
    2023-06-06
  • Java Swing如何编写一个简单的计算器软件
    这篇文章主要介绍了Java Swing如何编写一个简单的计算器软件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。实现要求使用Java图形界面组件设计软件,界面如图所...
    99+
    2023-06-22
  • 使用python怎么编写一个自动生成sql语句的脚本
    这篇文章主要介绍了使用python怎么编写一个自动生成sql语句的脚本,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:python是什么意思Python是一种跨平台的、具有解释性、编译性、...
    99+
    2023-06-06
  • 如何用Python写一个带图形界面的文件压缩软件
    这期内容当中小编将会给大家带来有关如何用Python写一个带图形界面的文件压缩软件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。文件压缩和解压我们在日常工作学习中会经常用到,比如winrar、快压、好压等...
    99+
    2023-06-02
  • 如何利用C++编写一个简单的学生成绩管理程序?
    如何利用C++编写一个简单的学生成绩管理程序?导言:在学校或者教育机构中,学生成绩的管理是一个非常重要的任务。为了更加高效地管理学生成绩,我们可以利用C++语言编写一个简单的学生成绩管理程序。本文将介绍如何使用C++语言实现一个简单的学生成...
    99+
    2023-11-03
    C++ 学生成绩 管理程序
  • 如何使用Python编写二维码生成算法?
    Python是一种广泛使用的编程语言,它有着简单易学的语法和强大的功能。在本文中,我们将介绍如何使用Python编写一个二维码生成算法。我们将从基础的概念开始,逐步深入到实现算法的细节,并提供一些演示代码。 什么是二维码? 二维码是一种可以...
    99+
    2023-09-18
    二维码 编程算法 api
  • 如何使用python中的networkx来生成一个图
    目录python networkx来生成一个图networkx随机图生成总结python networkx来生成一个图 使用python提供的第三方的库networkx,networ...
    99+
    2022-12-16
    python networkx networkx生成一个图 python networkx生成图
  • 如何在Java中利用iTextPDF生成一个PDF文件
    这篇文章主要介绍了如何在Java中利用iTextPDF生成一个PDF文件,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!Java可以用来干什么Java主要应用于:1. web开发;2. Android开发...
    99+
    2023-06-06
  • 如何用Python编写一个私人助理程序
    今天就跟大家聊聊有关如何用Python编写一个私人助理程序,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在你的工作中是否有一些你自己经常做重复的任务这就是编程的乐趣所在。通过一些思考...
    99+
    2023-06-16
  • 如何在python中使用flask编写一个接口
    本篇文章为大家展示了如何在python中使用flask编写一个接口,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几...
    99+
    2023-06-15
  • 如何利用python写GUI及生成.exe可执行文件
    目录一.GUI(Graphical User Interface(图形用户接口))1.导入需要用到的包2.获取文件夹中所有图片3.定义一个类windows4.创建窗口和frame5....
    99+
    2022-11-12
  • 如何使用C++编写一个简单的学生选课系统?
    如何使用C++编写一个简单的学生选课系统?随着科技的不断发展,计算机编程已经成为了一种必备的技能。而在学习编程的过程中,一个简单的学生选课系统可以帮助我们更好地理解和应用编程语言。在本文中,我们将介绍如何使用C++编写一个简单的学生选课系统...
    99+
    2023-11-02
    C++ 编写 学生选课系统
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作