最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何用python編寫(xiě)一個(gè)生成春聯(lián)軟件

 更新時(shí)間:2022年01月24日 08:39:57   作者:輕松學(xué)Python  
大家好,本篇文章主要講的是如何用python編寫(xiě)一個(gè)生成春聯(lián)軟件,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下

前言

最近不是快過(guò)年了,Python寫(xiě)對(duì)聯(lián)挺火的,但是代碼又不是人人都用,那就直接寫(xiě)個(gè)界面打包一下唄~

主要實(shí)現(xiàn)只要運(yùn)行后輸入上聯(lián)下聯(lián)、橫批,然后自動(dòng)生成春聯(lián)保存在代碼文件夾,如果要打印出來(lái)也是可以的。

效果展示

輸入對(duì)聯(lián),選擇路徑后點(diǎn)擊開(kāi)始生成春聯(lián)即可。

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

代碼

需要導(dǎo)入的模塊

# 網(wǎng)絡(luò)數(shù)據(jù)獲取相關(guān)模塊
import io  # python IO 處理模塊
from PIL import Image  # 圖像處理模塊
import requests  # 網(wǎng)絡(luò)請(qǐng)求模塊

# UI 相關(guān)模塊
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

# 主題樣式模塊引用
from QCandyUi import CandyWindow

# 應(yīng)用操作相關(guān)模塊 
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('參數(shù)設(shè)置不允許為空,請(qǐng)?jiān)O(shè)置好后重新開(kāi)始!')
        self.finished.emit(True)
    else:
        text = up_text + ' ' + down_text
        self.generate_image(text, layout='V', pre=0.75, out_file=save_path + '/上下聯(lián).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):
        '''
        單文字圖片下載函數(shù)
        :param ch: 默認(rèn)網(wǎng)絡(luò)請(qǐng)求參數(shù)'bg'
        :param pre: 單個(gè)文字對(duì)象
        :return: 圖像對(duì)象
        '''
        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))  # 單個(gè)文字的形狀是正方形,所以這里的長(zhǎng)、寬都是一致的

生成對(duì)聯(lián)

    def generate_image(self, words, layout='V', pre=1.0, out_file=None):
        '''
        :param words: 春聯(lián)文本
        :param layout: 布局:水平/垂直
        :param pre: 春聯(lián)比例
        :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('春聯(lián)背景下載完成!')
        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('春聯(lián)圖片拼裝完成!')

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

UI部分代碼

class GenerateScroll(QWidget):
    def __init__(self):
        super(GenerateScroll, self).__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('春聯(lián)生成器')
        self.setWindowIcon(QIcon('春聯(lián).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('信息展示區(qū)域')
        self.brower.ensureCursorVisible()

        form = QFormLayout()

        self.up_label = QLabel()
        self.up_label.setText('設(shè)置上聯(lián)')

        self.up_text = QLineEdit()
        self.up_text.setPlaceholderText('請(qǐng)輸入上聯(lián)')

        self.down_label = QLabel()
        self.down_label.setText('設(shè)置下聯(lián)')

        self.down_text = QLineEdit()
        self.down_text.setPlaceholderText('請(qǐng)輸入下聯(lián)')

        self.h_label = QLabel()
        self.h_label.setText('設(shè)置橫批')

        self.h_text = QLineEdit()
        self.h_text.setPlaceholderText('請(qǐng)輸入橫批')

        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('存儲(chǔ)路徑')
        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('開(kāi)始生成春聯(lián)')
        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)

槽函數(shù),向文本瀏覽器中寫(xiě)入內(nèi)容。

    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('由于上下聯(lián)不好預(yù)覽,請(qǐng)使用圖片查看器預(yù)覽,目前僅支持橫批圖片預(yù)覽...')

打包exe可執(zhí)行文件

以cmd為例

win+r打開(kāi)運(yùn)行框,輸入cmd,按回車。

彈出命令提示符窗口后輸入 pip install pyinstaller 安裝這個(gè)pyinstaller模塊

然后查看你的代碼存放目錄,復(fù)制下來(lái),在命令提示符窗口切換目錄。

如切換到D盤(pán) 輸入 d: 這樣就切換成功了。

在這里插入圖片描述

輸入 cd 將你的代碼存放地址粘貼進(jìn)去

在這里插入圖片描述

這樣就切換到你的代碼存放目錄了

然后輸入 pyinstaller -F -w -i 圖標(biāo)名稱.ico 代碼文件名.py

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

等待打包完成即可

總結(jié)

到此這篇關(guān)于如何用python編寫(xiě)一個(gè)生成春聯(lián)軟件的文章就介紹到這了,更多相關(guān)python生成春聯(lián)軟件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用Python 打印各種三角形

    如何使用Python 打印各種三角形

    這篇文章主要介紹了如何使用Python 打印各種三角形,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Python使用線程來(lái)接收串口數(shù)據(jù)的示例

    Python使用線程來(lái)接收串口數(shù)據(jù)的示例

    今天小編就為大家分享一篇Python使用線程來(lái)接收串口數(shù)據(jù)的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • 用Python Flask創(chuàng)建簡(jiǎn)潔高效的URL短鏈接服務(wù)

    用Python Flask創(chuàng)建簡(jiǎn)潔高效的URL短鏈接服務(wù)

    本文介紹了如何使用Python Flask框架創(chuàng)建URL短鏈接服務(wù)。通過(guò)詳細(xì)的步驟和代碼示例,讀者將學(xué)會(huì)如何搭建一個(gè)高效的URL縮短服務(wù),包括生成短鏈接、重定向、還原長(zhǎng)鏈接等功能。本文還介紹了如何使用Redis數(shù)據(jù)庫(kù)實(shí)現(xiàn)短鏈接的存儲(chǔ)和管理和如何優(yōu)化短鏈接的訪問(wèn)速度和可靠性
    2023-04-04
  • 開(kāi)始著手第一個(gè)Django項(xiàng)目

    開(kāi)始著手第一個(gè)Django項(xiàng)目

    這篇文章主要介紹了開(kāi)始著手第一個(gè)Django項(xiàng)目的過(guò)程,Django是豐富多彩的Python框架中人氣最高的一個(gè),功能多而全,需要的朋友可以參考下
    2015-07-07
  • python實(shí)現(xiàn)FTP文件傳輸?shù)姆椒ǎǚ?wù)器端和客戶端)

    python實(shí)現(xiàn)FTP文件傳輸?shù)姆椒ǎǚ?wù)器端和客戶端)

    FTP(File Transfer Protocol,文件傳輸協(xié)議) 是 TCP/IP 協(xié)議組中的協(xié)議之一。接下來(lái)通過(guò)本文給大家介紹關(guān)于python實(shí)現(xiàn)FTP文件傳輸?shù)南嚓P(guān)知識(shí)(服務(wù)器端和客戶端) ,需要的朋友可以參考下
    2020-03-03
  • Python matplotlib畫(huà)圖實(shí)例之繪制擁有彩條的圖表

    Python matplotlib畫(huà)圖實(shí)例之繪制擁有彩條的圖表

    這篇文章主要介紹了Python matplotlib畫(huà)圖實(shí)例之繪制擁有彩條的圖表,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • 替換python字典中的key值方法

    替換python字典中的key值方法

    今天小編就為大家分享一篇替換python字典中的key值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • python基礎(chǔ)之文件的備份以及定位

    python基礎(chǔ)之文件的備份以及定位

    這篇文章主要介紹了python文件的備份以及定位,實(shí)例分析了Python中返回一個(gè)返回值與多個(gè)返回值的方法,需要的朋友可以參考下
    2021-10-10
  • python抓取網(wǎng)頁(yè)中圖片并保存到本地

    python抓取網(wǎng)頁(yè)中圖片并保存到本地

    本篇文章給大家介紹python抓取網(wǎng)頁(yè)中圖片并保存到本地,對(duì)python抓取網(wǎng)頁(yè)圖片相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Python新建項(xiàng)目自動(dòng)添加介紹和utf-8編碼的方法

    Python新建項(xiàng)目自動(dòng)添加介紹和utf-8編碼的方法

    這篇文章主要介紹了Python新建項(xiàng)目自動(dòng)添加介紹和utf-8編碼的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12

最新評(píng)論

漾濞| 荣昌县| 延吉市| 金阳县| 金门县| 东光县| 凤台县| 南澳县| 中卫市| 乐业县| 弥勒县| 焉耆| 合水县| 旅游| 白水县| 盐津县| 平顶山市| 屏山县| 买车| 潜山县| 淮安市| 叶城县| 麟游县| 政和县| 黄大仙区| 临沭县| 盐津县| 永福县| 明溪县| 沙河市| 永胜县| 南丰县| 读书| 石阡县| 房产| 岚皋县| 怀化市| 淳化县| 汾西县| 潜山县| 滨州市|