欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何用python編寫一個生成春聯軟件

 更新時間:2022年01月24日 08:39:57   作者:輕松學Python  
大家好,本篇文章主要講的是如何用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('信息展示區(qū)域')
        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可執(zhí)行文件

以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生成春聯軟件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python日志logging模塊功能與用法詳解

    Python日志logging模塊功能與用法詳解

    這篇文章主要介紹了Python日志logging模塊功能與用法,結合實例形式詳細分析了Python日志logging模塊的基本功能、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • python實現凱撒密碼加密解密的示例代碼

    python實現凱撒密碼加密解密的示例代碼

    本文主要介紹了python實現凱撒密碼加密解密的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Python numpy和matlab的幾點差異介紹

    Python numpy和matlab的幾點差異介紹

    這篇文章主要介紹了Python numpy和matlab的幾點差異,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python函數中的作用域規(guī)則詳解

    Python函數中的作用域規(guī)則詳解

    這篇文章主要為大家詳細介紹了Python的作用域規(guī)則,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Python使用pandas模塊實現表之間的關聯

    Python使用pandas模塊實現表之間的關聯

    在數據分析和處理中,表之間的關聯是非常常見的操作,本文為大家介紹了pandas中實現表之間的關聯有四種方式,感興趣的小伙伴可以了解一下
    2023-07-07
  • Python打開文件,將list、numpy數組內容寫入txt文件中的方法

    Python打開文件,將list、numpy數組內容寫入txt文件中的方法

    今天小編就為大家分享一篇Python打開文件,將list、numpy數組內容寫入txt文件中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Django學習之靜態(tài)文件與模板詳解

    Django學習之靜態(tài)文件與模板詳解

    這篇文章主要為大家詳細介紹了Django靜態(tài)文件與模板,使用數據庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python Web框架之Django框架Model基礎詳解

    Python Web框架之Django框架Model基礎詳解

    這篇文章主要介紹了Python Web框架之Django框架Model基礎,結合實例形式分析了Django框架Model模型相關使用技巧與操作注意事項,需要的朋友可以參考下
    2019-08-08
  • python數據分析實戰(zhàn)指南之異常值處理

    python數據分析實戰(zhàn)指南之異常值處理

    數據預處理是明確分析目標與思路之后進行數據分析的第一步,也是整個項目中最基礎、花費時間較長的工作,下面這篇文章主要給大家介紹了關于python數據分析實戰(zhàn)指南之異常值處理的相關資料,需要的朋友可以參考下
    2022-01-01
  • python3中str(字符串)的使用教程

    python3中str(字符串)的使用教程

    這篇文章主要介紹了python3中str(字符串)的使用教程,文中介紹的非常詳細,對python3中各種str字符串的操作都包含這篇文章中了,需要的朋友可以參考學習,下面來一起看看吧。
    2017-03-03

最新評論