Python PySide2加docx操作的小练习

利用Pyside2实现程序图形界面,实现效果如下:

1.实现竖式算式生成,并将生成结果保存为word文档

import random
def shushi():
    chushu = random.randint(2, 9)
    beichushu1 = random.randint(1, chushu - 1)
    beichushu2 = random.randint(0, 9)
    beichushu = beichushu1 * 10 + beichushu2
    # print(f'{beichushu}÷{chushu}=     ')
    return beichushu, chushu


def generate_shushi():
    import docx
    from docx import Document
    from docx.shared import Inches
    from docx.dml.color import ColorFormat
    from docx.shared import Pt
    from docx.shared import RGBColor
    from docx.oxml.ns import qn
    from docx.enum.style import WD_STYLE_TYPE
    from docx.enum.text import WD_ALIGN_PARAGRAPH

    document = Document()
    # 设置默认字体
    document.styles['Normal'].font.name = '微软雅黑'
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')

    # 创建自定义段落样式(第一个参数为样式名, 第二个参数为样式类型, 1为段落样式, 2为字符样式, 3为表格样式)
    UserStyle1 = document.styles.add_style('UserStyle1', 1)
    # 设置字体尺寸
    UserStyle1.font.size = Pt(16)
    # 设置字体颜色
    # UserStyle1.font.color.rgb = RGBColor(0xff, 0xde, 0x00)
    # 居中文本
    UserStyle1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
    # 设置中文字体
    UserStyle1.font.name = '微软雅黑'
    UserStyle1._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')

    dir1 = os.getcwd()
    for i in range(0, 60):
        if i % 15 == 0 and i > 0:
            p2 = document.add_paragraph('=' * 28, style=UserStyle1)
        if i % 5 == 0:
            p2 = document.add_paragraph('', style=UserStyle1)
        a, b = shushi()
        # 使用自定义字符样式
        p2.add_run(f'{a}÷{b}=    ')
    f2 = dir1 + '\竖式计算题60道.docx'
    document.save(f2)
    print(f'{f2} 文档生成完毕!')

2.利用Pyside2实现图形界面,完整代码如下:

【shushi_win_ui.py】

from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(602, 239)
        MainWindow.setToolTipDuration(-3)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.label = QLabel(self.centralwidget)
        self.label.setObjectName(u"label")
        self.label.setGeometry(QRect(50, 40, 491, 16))
        self.pushButton = QPushButton(self.centralwidget)
        self.pushButton.setObjectName(u"pushButton")
        self.pushButton.setGeometry(QRect(160, 100, 261, 28))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 602, 26))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", '小学用竖式计算题生成工具', None))
        self.label.setText(QCoreApplication.translate("MainWindow", u"\u6b22\u8fce\u4f7f\u7528\u672c\u5de5\u5177\u3002\u4f5c\u8005\uff1a\u5c0f\u767d\u7528python  https://blog.csdn.net/cdl3", None))
        self.pushButton.setText(QCoreApplication.translate("MainWindow", u"\u4e00\u952e\u751f\u6210\u7ad6\u5f0f\u8ba1\u7b97\u9898", None))
    # retranslateUi

【main.py】

import os
import sys
import random
from PySide2 import QtGui, QtWidgets, QtCore
from PySide2.QtWidgets import QApplication, QMainWindow, QMessageBox
from shushi_win_ui import Ui_MainWindow


def shushi():
    chushu = random.randint(2, 9)
    beichushu1 = random.randint(1, chushu - 1)
    beichushu2 = random.randint(0, 9)
    beichushu = beichushu1 * 10 + beichushu2
    # print(f'{beichushu}÷{chushu}=     ')
    return beichushu, chushu


def generate_shushi():
    import docx
    from docx import Document
    from docx.shared import Inches
    from docx.dml.color import ColorFormat
    from docx.shared import Pt
    from docx.shared import RGBColor
    from docx.oxml.ns import qn
    from docx.enum.style import WD_STYLE_TYPE
    from docx.enum.text import WD_ALIGN_PARAGRAPH

    document = Document()
    # 设置默认字体
    document.styles['Normal'].font.name = '微软雅黑'
    document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')

    # 创建自定义段落样式(第一个参数为样式名, 第二个参数为样式类型, 1为段落样式, 2为字符样式, 3为表格样式)
    UserStyle1 = document.styles.add_style('UserStyle1', 1)
    # 设置字体尺寸
    UserStyle1.font.size = Pt(16)
    # 设置字体颜色
    # UserStyle1.font.color.rgb = RGBColor(0xff, 0xde, 0x00)
    # 居中文本
    UserStyle1.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
    # 设置中文字体
    UserStyle1.font.name = '微软雅黑'
    UserStyle1._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')

    dir1 = os.getcwd()
    for i in range(0, 60):
        if i % 15 == 0 and i > 0:
            p2 = document.add_paragraph('=' * 28, style=UserStyle1)
        if i % 5 == 0:
            p2 = document.add_paragraph('', style=UserStyle1)
        a, b = shushi()
        # 使用自定义字符样式
        p2.add_run(f'{a}÷{b}=    ')
    f2 = dir1 + '\竖式计算题60道.docx'
    document.save(f2)
    print(f'{f2} 文档生成完毕!')



class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        # 添加槽链接
        self.pushButton.clicked.connect(self.magic)

    def magic(self):
        # 随机生成60到竖式计算题
        generate_shushi()
        QMessageBox.about(self, '成功', '竖式计算word文档成功生成')


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

以上内容,请问你学会了吗?

发文章不易,请各位多多支持、点赞!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值