python零基礎(chǔ)到大神,百G教程資料 僅需10元!購買聯(lián)系QQ:446687967 微信同號!
前言
哈嘍啊,我親愛的鐵鐵們,I am back !!
別管,我也是陽過的人了,這么久都沒有更新,今天就帶來個(gè)小玩意吧
這不是過完圣誕就要過年了嗎
這不得準(zhǔn)備準(zhǔn)備,春節(jié)的表演?
就勉強(qiáng)來一副對聯(lián)吧
效果展示
代碼模塊
【源碼點(diǎn)擊此處領(lǐng)取即可】
# 網(wǎng)絡(luò)數(shù)據(jù)獲取相關(guān)模塊
import io # python IO 處理模塊
from PIL import Image # 圖像處理模塊
import requests # 網(wǎng)絡(luò)請求模塊
# 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
獲取文字主題
python學(xué)習(xí)交流Q群:309488165 ### 源碼領(lǐng)取
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è)置不允許為空,請?jiān)O(shè)置好后重新開始!')
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)圖片、文字獲取
這部分參考了天元浪子的寫對聯(lián)
def get_word_image(self, ch='bg', pre=1.0):
'''
單文字圖片下載函數(shù)
:param ch: 默認(rèn)網(wǎng)絡(luò)請求參數(shù)'bg'
:param pre: 單個(gè)文字對象
:return: 圖像對象
'''
res=io.BytesIO(requests.post(url='', 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è)文字的形狀是正方形,所以這里的長、寬都是一致的
生成對聯(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部分代碼python學(xué)習(xí)交流Q群:309488165 ### 源碼領(lǐng)取
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('請輸入上聯(lián)')
self.down_label=QLabel()
self.down_label.setText('設(shè)置下聯(lián)')
self.down_text=QLineEdit()
self.down_text.setPlaceholderText('請輸入下聯(lián)')
self.h_label=QLabel()
self.h_label.setText('設(shè)置橫批')
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('開始生成春聯(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ù),向文本瀏覽器中寫入內(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ù)覽,請使用圖片查看器預(yù)覽,目前僅支持橫批圖片預(yù)覽...')
打包exe可執(zhí)行文件
以cmd為例
win+r打開運(yùn)行框,輸入cmd,按回車。
彈出命令提示符窗口后輸入 pip install pyinstaller 安裝這個(gè)pyinstaller模塊
然后查看你的代碼存放目錄,復(fù)制下來,在命令提示符窗口切換目錄。
如切換到D盤 輸入 d: 這樣就切換成功了。
輸入 cd 將你的代碼存放地址粘貼進(jìn)去
這樣就切換到你的代碼存放目錄了
然后輸入 pyinstaller -F -w -i 圖標(biāo)名稱.ico 代碼文件名.py
如:pyinstaller -F -w -i aaa.ico zzz.py
等待打包完成即可
最后
今天的分享到這里就結(jié)束了
順便給大家推薦一些Python視頻教程,希望對大家有所幫助:
【Python零基礎(chǔ)教學(xué)合集】
對文章有問題的,或者有其他關(guān)于python的問題,可以在評論區(qū)留言或者私信我哦
覺得我分享的文章不錯(cuò)的話,可以關(guān)注一下我,或者給文章點(diǎn)贊(/≧▽≦)/
【本文地址】