摘要

记一次写程序时遇到的跟图片有关的编程。用python写程序时,跟图片有关的地方大致有以下三个:

  • 桌面图标
  • 运行图标
  • 背景图片

所需模块说明

  • from io import BytesIO
  • from PIL import Image as Imagep
  • from PIL.ImageQt import ImageQt
  • import base64

运行图标、背景图片编程

运行图标与背景图片的写法有些类似,所以放到一起,桌面图标将放到后面进行讲解

  • 本程序对图片采用base64编码存储的方式,将图片存于py文件中,这样的好处是程序可以单独运行,不需依赖图片文件
  • 由于base64编码过长,代码中将用xuanwo_base64、sidai_base64代替,图片转base64编码的方法在百度上搜索即可
  • 代码分为两部分,第一部分为处理base64编码并将其设置为运行图标的代码;第二部分为处理base64编码并将其设置为背景图片的编码
  • 代码详细作用在注释中皆有说明

代码:

# 运行图标部分
# 图片的base64编码
photo_xuanwo = u"xuanwo_base64"
# 解码为二进制数据
data_xuanwo = base64.b64decode(photo_xuanwo)
# 使用BytesIO对数据进行封装
pack_xuanwo = BytesIO(data_xuanwo)
# 打开图片
image_path_xuanwo = Imagep.open(pack_xuanwo)
# 显示图片
# image_path_xuanwo.show()
# ImageQt方法使图片可作为变量使用
image_vari_xuanwo = ImageQt(image_path_xuanwo)
# 将图片设置为运行图标
self.setWindowIcon(QIcon(QPixmap.fromImage(image_vari_xuanwo)))# 背景图片部分
photo_sidai = u"sidai_base64"
data_sidai = base64.b64decode(photo_sidai)
pack_sidai = BytesIO(data_sidai)
image_path_sidai = Imagep.open(pack_sidai)
image_vari_sidai = ImageQt(image_path_sidai)
# 创建调色板
window_pale = QPalette()
# 在调色板中插入图片
window_pale.setBrush(self.backgroundRole(), QBrush(QPixmap.fromImage(image_vari_sidai)))
# 将调色板应用到窗体作为背景图片
self.setPalette(window_pale)

桌面图标编程

程序采用pyinstaller模块对程序进行封装打包。如果不做处理,打包后程序会默认显示系统图标。如需自定义图标,需按以下步骤进行:

步骤:

  1. 制作.ico图片,.ico图片的转化方法也是在百度上搜索即可
  2. 打开cmd,执行命令“pyinstaller -wF --icon=桌面图标.ico 程序.py”
  • -w : 不显示命令行窗口
  • -F : 产生单个的可执行文件
  • --icon : 指定ico图片作为桌面图标

3.等待命令执行完成即可得到可单独执行的.exe程序

注:本人试过打包时不加--icon参数,即省略最后桌面图标那一步,发现程序在特定环境下依然能显示运行图标指定的图片。而我最初设想的也是如此,但是它在大多时候显示为系统默认图标,不理解为何,如有大神知道的可以评论解惑下~

------------------------------------------------------------------------------------------------------------------------------------------

最后附上整个程序的代码以供参考(作用是对txt文本内容进行格式处理,只为实现功能,无建立工作空间及未优化)

# coding=utf-8
import sys, os, time, re
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from tkinter import *
from io import BytesIO
from PIL import Image as Imagep
from PIL.ImageQt import ImageQt
import base64
# 函数辅助工具模块
from functools import partial
import chardetclass DelTheEnd(QMainWindow):def __init__(self):# 图片的base64编码photo_xuanwo = u"xuanwo"# 解码为二进制数据data_xuanwo = base64.b64decode(photo_xuanwo)# 使用BytesIO对数据进行封装pack_xuanwo = BytesIO(data_xuanwo)# 打开图片image_path_xuanwo = Imagep.open(pack_xuanwo)# 显示图片# image_path_xuanwo.show()# 使用ImageQt使图片可指向变量image_vari_xuanwo = ImageQt(image_path_xuanwo)photo_sidai = u"sidai"data_sidai = base64.b64decode(photo_sidai)pack_sidai = BytesIO(data_sidai)image_path_sidai = Imagep.open(pack_sidai)image_vari_sidai = ImageQt(image_path_sidai)# 继承QMainWindow初始设置super().__init__()# 设置主窗体大小、位置self.resize(800, 400)self.setFixedSize(800, 400) # 限定窗体最大大小self.move(700, 220)# 标题self.setWindowTitle("格式 & 排序")vt = self.frameGeometry()# 图标self.setWindowIcon(QIcon(QPixmap.fromImage(image_vari_xuanwo)))# 设置背景图片window_pale = QPalette()window_pale.setBrush(self.backgroundRole(), QBrush(QPixmap.fromImage(image_vari_sidai)))self.setPalette(window_pale)# 居中rs = QDesktopWidget().availableGeometry().center()vt.moveCenter(rs)self.move(vt.topLeft())self.widget()# 控制窗体显示的开关self.show()# 全局变量,决定自定义部分中输出文本的样式顺序self.list_range = []def widget(self):'''窗体样式、布局:return:'''# 文件选择部分docu = QLabel("-------------------------选择文件-------------------------", self)# 文档路径显示,默认为当前程序路径self.lineedit_path = QLineEdit(os.path.dirname(os.path.realpath(sys.argv[0])), self)browsebutton = QPushButton("浏览", self)# 关联路径选取的“browsing”事件browsebutton.clicked.connect(self.browsing)dealbutton = QPushButton("确定", self)# 关联格式选取的“radiotext”事件dealbutton.clicked.connect(self.radiotext)dealbutton.setToolTip("显示格式内容")rangebutton = QPushButton("排序",self)# 关联内容排序的“range”事件rangebutton.clicked.connect(self.range)rangebutton.setToolTip('''将内容排序并输出到"xxx - 排序.txt"''')# 格式选择部分select = QLabel("-------------------------选择格式-------------------------", self)# 生成单选按钮bg = QButtonGroup(self)# 第一种输出格式self.rb1 = QRadioButton("格式1", self)# 默认选择第一种self.rb1.setChecked(True)# 第二种输出格式self.rb2 = QRadioButton("格式2", self)# 第三种输出格式self.rb3 = QRadioButton("格式3", self)bg.addButton(self.rb1)bg.addButton(self.rb2)bg.addButton(self.rb3)selectbutton = QPushButton("确定", self)# 关联文档处理并输出最终结果的“deal1”事件selectbutton.clicked.connect(self.deal1)# 自定义部分custom = QLabel("-------------------------自定义-------------------------", self)# 显示自定义格式self.lineedit_format = QLineEdit("", self)# 特殊符号按钮spacebutton = QPushButton("space", self)spacebutton.clicked.connect(lambda : self.format(' '))tabbutton = QPushButton("tab", self)tabbutton.clicked.connect(lambda : self.format('    '))leftbracketbutton = QPushButton("【", self)leftbracketbutton.clicked.connect(lambda : self.format('【'))rightbracketbutton = QPushButton("】", self)rightbracketbutton.clicked.connect(lambda : self.format('】'))# 清除自定义格式按钮clearbutton = QPushButton("重置", self)clearbutton.setToolTip("重置自定义格式")# 关联“clear”事件clearbutton.clicked.connect(self.clear)custombutton = QPushButton("确定", self)# 关联文档处理并输出最终结果的“deal2”事件custombutton.clicked.connect(self.deal2)# 横纵布局# 第一横向空间hbox1 = QHBoxLayout()# 向右填充hbox1.addStretch(1)# 将名为docu的QLabel加入横向空间hbox1.addWidget(docu)# 向左填充,最终将docu在横向空间中居中hbox1.addStretch(1)# 第二横向空间hbox2 = QHBoxLayout()hbox2.addWidget(self.lineedit_path)hbox2.addWidget(browsebutton)hbox2.addWidget(dealbutton)hbox2.addWidget(rangebutton)# 第三横向空间hbox3 = QHBoxLayout()hbox3.addStretch(1)hbox3.addWidget(select)hbox3.addStretch(1)# 第四横向空间hbox4 = QHBoxLayout()hbox4.addWidget(self.rb1)# 第五横向空间hbox5 = QHBoxLayout()hbox5.addWidget(self.rb2)# 第六横向空间hbox6 = QHBoxLayout()hbox6.addWidget(self.rb3)# 第七横向空间hbox7 = QHBoxLayout()hbox7.addStretch(1)hbox7.addWidget(selectbutton)# 第八横向空间hbox8 = QHBoxLayout()hbox8.addStretch(1)hbox8.addWidget(custom)hbox8.addStretch(1)# 第九横向空间hbox9 = QHBoxLayout()hbox9.addWidget(self.lineedit_format)# 第十横向空间hbox10 = QHBoxLayout()hbox10.addWidget(spacebutton)hbox10.addWidget(tabbutton)hbox10.addWidget(leftbracketbutton)hbox10.addWidget(rightbracketbutton)# 第十一横向空间self.hbox11 = QHBoxLayout()# 第十二横向空间self.hbox12 = QHBoxLayout()self.hbox12.addStretch(1)self.hbox12.addWidget(clearbutton)self.hbox12.addWidget(custombutton)# 第一纵向空间self.vbox = QVBoxLayout()# 填入所有横向空间self.vbox.addLayout(hbox1)self.vbox.addLayout(hbox2)self.vbox.addLayout(hbox3)self.vbox.addLayout(hbox4)self.vbox.addLayout(hbox5)self.vbox.addLayout(hbox6)self.vbox.addLayout(hbox7)self.vbox.addLayout(hbox8)self.vbox.addLayout(hbox9)self.vbox.addLayout(hbox10)self.vbox.addLayout(self.hbox12)# 将纵向空间填入主窗口widget = QWidget()widget.setLayout(self.vbox)# 居中self.setCentralWidget(widget)def browsing(self):'''文档路径选取功能:return:'''filename = QFileDialog.getOpenFileName(self, "选取文件", os.path.dirname(os.path.realpath(sys.argv[0])))self.lineedit_path.setText(filename[0])if os.path.exists(filename[0]):if re.search(".*\.txt", filename[0]):with open(filename[0], "rb") as f:read = f.read()ecd = chardet.detect(read)['encoding']with open(filename[0], "r", encoding=ecd) as f:rl = f.readlines()for line in rl:if re.search("专场", line):if re.search("【|】", line):QMessageBox.warning(self, "Info", "Info:文本包含两部分-标题和正文,标题中不可含有‘【’或‘】’,如确认标题无误,请忽略此提示")returnelse:QMessageBox.warning(self, "Error", "Error:请选取txt文本文件")def format(self, select_btn):'''根据格式按钮生成对应格式功能:param 对应按钮的文本::return:'''sstr = self.lineedit_format.text()# 符号按钮格式选择if isinstance(select_btn, str):sstr += select_btnif select_btn == " ":self.list_range.append(0)elif select_btn == "    ":self.list_range.append(1)elif select_btn == "【":self.list_range.append(2)elif select_btn == "】":self.list_range.append(3)# 其他文本按钮格式选择else:sstr += select_btn.toolTip()# 记录按钮顺序,以便之后按格式输出文本self.list_range.append(3 + int(re.findall('\d+', select_btn.objectName())[0]))# 显示所选格式self.lineedit_format.setText(sstr)def clear(self):'''清除所选格式:return:'''self.lineedit_format.setText('')# 清除记录的顺序self.list_range = []def radiotext(self):'''文档输出格式选择功能:return:'''# 重置第十一横向空间,使清空里面的控件self.hbox11.deleteLater()self.hbox11 = QHBoxLayout()# 将第十一横向空间插入对应位置self.vbox.insertLayout(10,self.hbox11)# 重置自定义格式self.lineedit_format.setText('')self.list_range = []try:if os.path.exists(self.lineedit_path.text()):if re.search(".*\.txt", self.lineedit_path.text()):with open(self.lineedit_path.text(), "rb") as f:read = f.read()ecd = chardet.detect(read)['encoding']with open(self.lineedit_path.text(), "r", encoding=ecd) as f:rl = f.readlines()for line in rl:for word in line:# 标题内容不处理,对含有“【”的主内容进行处理if word == "【":# 选择格式部分功能list_select = re.split("\s+", line)# 输出对应格式到单选按钮中if re.search('\d+\s+【', line):# 文本内容有序号self.rb1.setText(list_select[1] + " " + list_select[2])self.rb2.setText(list_select[2] + " " + list_select[1])self.rb3.setText(list_select[2] + " " + re.findall('【.*】(.*)', list_select[1])[0] + " " +re.findall('【(.*)】.*', list_select[1])[0])# 提示self.rb1.setToolTip(list_select[1] + " " + list_select[2])self.rb2.setToolTip(list_select[2] + " " + list_select[1])self.rb3.setToolTip(list_select[2] + " " + re.findall('【.*】(.*)', list_select[1])[0] + " " +re.findall('【(.*)】.*', list_select[1])[0])else:# 文本内容无序号self.rb1.setText(list_select[0] + " " + list_select[1])self.rb2.setText(list_select[1] + " " + list_select[0])self.rb3.setText(list_select[1] + " " + re.findall('【.*】(.*)', list_select[0])[0] + " " +re.findall('【(.*)】.*', list_select[0])[0])# 自定义部分功能list_old = re.split('\s+|【|】', line)list_new = []for ele_old in list_old:exist = Falseif ele_old != '':for ele_new in list_new:if ele_new == ele_old.strip():exist = Trueif exist == False:list_new.append(ele_old)# 记录按钮名称的列表count_button = []for count in range(1, len(list_new) + 1):count_button.append('button_format' + str(count))# 生成按钮并自动命名for count, ele_new in zip(count_button, list_new):button_name = countcount = QPushButton(ele_new[0:5])count.setObjectName(button_name)count.clicked.connect(partial(self.format, count))count.setToolTip(ele_new)self.hbox11.addWidget(count)returnelse:QMessageBox.warning(self, "Error", "Error:请选取txt文本文件")else:QMessageBox.about(self, "Error", "Error:文件不存在")except BaseException as e:QMessageBox.warning(self, "Warning", str(e))def range(self):'''对所选文本内容进行排序:return:'''try:if os.path.exists(self.lineedit_path.text()):if re.search(".*\.txt", self.lineedit_path.text()):with open(self.lineedit_path.text(), "rb") as f:read = f.read()ecd = chardet.detect(read)['encoding']with open(self.lineedit_path.text(), "r", encoding=ecd) as f:rl = f.readlines()# 将文本进行分类,存储于列表中list_context_ry = []list_context_rh = []list_context_qj = []list_context_qm = []list_context_qf = []list_context_qyy = []list_context_qfz = []list_context_qxs = []list_context_qt = []for line in rl:if re.search('【', line):if re.search('【前\d+件', line):list_context_qj.append(re.findall('\d*\s*(【.+)\n*', line)[0])elif re.search('【前\d+名', line):list_context_qm.append(re.findall('\d*\s*(【.+)\n*', line)[0])elif re.search('【前\d+份', line):list_context_qf.append(re.findall('\d*\s*(【.+)\n*', line)[0])elif re.search('【前\d+买一送一', line):list_context_qyy.append(re.findall('\d*\s*(【.+)\n*', line)[0])elif re.search('【\d+月\d+日', line):list_context_rh.append(re.findall('\d*\s*(【.+)\n*', line)[0])elif re.search('【\d+月\d+号', line):list_context_ry.append(re.findall('\d*\s*(【.+)\n*', line)[0])elif re.search('【前\d+分钟', line):list_context_qfz.append(re.findall('\d*\s*(【.+)\n*', line)[0])elif re.search('【前\d+小时', line):list_context_qxs.append(re.findall('\d*\s*(【.+)\n*', line)[0])else:list_context_qt.append(re.findall('\d*\s*(【.+)\n*', line)[0])# 限量部分# 排序列表中各项list_context_qj.sort()list_context_qm.sort()list_context_qf.sort()list_context_qyy.sort()# 合并列表list_context_qj.extend(list_context_qm)list_context_qj.extend(list_context_qf)list_context_qj.extend(list_context_qyy)# 秒杀部分list_context_ry.sort()list_context_rh.sort()list_context_ry.extend(list_context_rh)# 限时部分list_context_qfz.sort()list_context_qxs.sort()list_context_qfz.extend(list_context_qxs)# 其他部分list_context_qt.sort()# 整合所有分类并排序后内容new_contrxt = ""list_all_new = [list_context_qj, list_context_ry, list_context_qfz, list_context_qt]for i in list_all_new:for j in i:new_contrxt += j + '\n'new_contrxt += '\n'# 将排序后内容输出到“xxx - 顺序.txt”with open(self.lineedit_path.text().split('.txt')[0] + ' - 顺序.txt', "w", encoding=ecd) as f:f.write(new_contrxt)# 自动将路径定位到排序后文本self.lineedit_path.setText(self.lineedit_path.text().split('.txt')[0] + ' - 顺序.txt')QMessageBox.about(self, "Info", "Info:排序完成")else:QMessageBox.warning(self, "Error", "Error:请选取txt文本文件")else:QMessageBox.about(self, "Error", "Error:文件不存在")except BaseException as e:QMessageBox.warning(self, "Warning", str(e))def deal1(self):'''三种常见格式部分,将结果输出到文档中:return:'''try:self.new = ""with open(self.lineedit_path.text(), "rb") as f:read = f.read()ecd = chardet.detect(read)['encoding']with open(self.lineedit_path.text(), "r", encoding=ecd) as f:self.old = f.readlines()for line in self.old:# 判断是否为主内容的开关,当为True时进入主内容exixst = Falsefor word in line:if word == "【":exixst = Truebreakif exixst == True:# 将主内容按“空格、tab、回车”进行分割list = re.split("\s+", line)# 将主内容按不同格式进行排序if re.search('\d+\s+【', line):# 文本内容有序号if self.rb1.isChecked() == True:self.new += (list[1] + " " + list[2] + "\n")elif self.rb2.isChecked() == True:self.new += (list[2] + " " + list[1] + "\n")elif self.rb3.isChecked() == True:self.new += (list[2] + " " + re.findall('【.*】(.*)', list[1])[0] + " " +re.findall('【(.*)】.*', list[1])[0] + "\n")else:# 文本内容无序号if self.rb1.isChecked() == True:self.new += (list[0] + " " + list[1] + "\n")elif self.rb2.isChecked() == True:self.new += (list[1] + " " + list[0] + "\n")elif self.rb3.isChecked() == True:self.new += (list[1] + " " + re.findall('【.*】(.*)', list[0])[0] + " " +re.findall('【(.*)】.*', list[0])[0] + "\n")else:self.new += "\n" + line# 写入结果with open(self.lineedit_path.text().split('.txt')[0] + ' - 格式.txt', 'w', encoding=ecd) as f:f.write(self.new)time.sleep(2)self.lineedit_path.setText(self.lineedit_path.text().split('.txt')[0] + ' - 格式.txt')QMessageBox.about(self, "Info", "Info:完成")except BaseException as e:QMessageBox.warning(self, "Warning", str(e))def deal2(self):'''自定义部分,将结果输出到文档中:return:'''try:self.new = ""with open(self.lineedit_path.text(), "rb") as f:read = f.read()ecd = chardet.detect(read)['encoding']with open(self.lineedit_path.text(), "r", encoding=ecd) as f:self.old = f.readlines()for line in self.old:# 判断是否为主内容的开关,当为True时进入主内容exixst = Falsefor word in line:if word == "【":exixst = Truebreakif exixst == True:# 将主内容按“空格、tab、回车”进行分割list_old = re.split('\s+|【|】', line)# 记录文本行内容list_new = [' ', '  ', '【', '】']for ele_old in list_old:exist = Falseif ele_old != '':for ele_new in list_new:if ele_new == ele_old.strip():exist = Trueif exist == False:list_new.append(ele_old)# 按所选格式将文本行内容排序重新输出for rrange in self.list_range:self.new += list_new[rrange]self.new += "\n"else:self.new += "\n" + line# 写入结果with open(self.lineedit_path.text().split('.txt')[0] + ' - 格式.txt', 'w', encoding=ecd) as f:f.write(self.new)time.sleep(2)self.lineedit_path.setText(self.lineedit_path.text().split('.txt')[0] + ' - 格式.txt')QMessageBox.about(self, "Info", "Info:完成")except BaseException as e:QMessageBox.warning(self, "Warning", str(e))if __name__ == "__main__":app = QApplication(sys.argv)w = DelTheEnd()sys.exit(app.exec_())

【debug】写应用程序时遇到的桌面图标、运行图标、背景图片问题相关推荐

  1. 【小题目】写JAVA程序时可以创建一个名为123.java的源文件吗

    在写JAVA程序时创建名为123.java的源文件,前提是该源文件中没有public修饰的类,因为一旦使用public修饰后类名必须与文件名相同,而类名为标识符,不能以数字开头.因此,在没有用publ ...

  2. 代码编辑神器VIM(附我写acm程序时的配置)(转)

    本文转自:http://blog.csdn.net/dinosoft/article/details/6330121 有些牛X的人性格会比较古怪,VIM就是这么一位特立独行,难以琢磨的怪客.但如果熟悉 ...

  3. Ubuntu16.04美化桌面并设置终端背景图片

    用ubuntu时间久了,有些审美疲劳,决定美化下桌面,换个壁纸,然后无意间竟然又发现了更换终端背景图,有点意思 更换ubutnu桌面背景: 参考Blog 更换终端背景图片: 参考Blog 壁纸图库 网 ...

  4. 写二叉树程序时为什么总是报运行时错误_二叉树:一入递归深似海,从此offer是路人...

    给「代码随想录」一个星标吧! ❝ 一看就会,一写就废! ❞ 这次我们要好好谈一谈递归,为什么很多同学看递归算法都是"一看就会,一写就废". 主要是对递归不成体系,没有方法论,「每次 ...

  5. 在写QT程序时遇到的几种段错误(内存不能为read)

    学了几天QT,关闭窗口的时候总是出现段错误:我个人遇到的情况有一下几种: 1.析构释放内存的时候出现段错误,最后发现如果先释放主布局,再释放其它布局,就会出现段错误:改为现释放子布局再释放住布局就没事 ...

  6. linux下安装codeblocks及写完程序之后编译成功但无法运行的原因

    一:在软件中心输入codeblocks,然后点击安装,等着装完就行了. 再按ctrl+alt+t 打开终端 输入 sudo apt-get install gcc 而后再输入sudo apt-get ...

  7. iphone与iTunes同步应用程序时,保持iphone上的图标顺序

    1,将你的手机连接itunes,点击"文件--自**的 iphone 传输购买项目, *** 为你的iphone名字.(这样保持你的两台电脑的程序都是一样的且是最新的) 2. 勾选" ...

  8. 写小程序,iphone手机不支持webp后缀的图片,怎么解决?

    (1)在企业中,前端跟后端人沟通,把 . webp 后缀的图片进行更改成普通图片 (2)后端人员很忙需要自行在前端简单处理                 1) 首先要确定后台数据里面  每一个  . ...

  9. 当碰到非ARC写的文件时在ARC环境下运行报错时解决办法

    转载于:https://www.cnblogs.com/ithongjie/p/4962943.html

最新文章

  1. Javascript s02
  2. mvc设计模式现在过时了吗_尚学堂115——设计模式、源码分析以及SpringData
  3. 为什么mac系统下载python-mac可以升级python吗 知乎
  4. intellij中springboot热部署
  5. asm和file system之间数据文件的转换
  6. 【转】000.DICOM:DICOM标准学习路线图(初稿)!!!!!!!!!!!!
  7. apache 支持.htaccess重写url
  8. Oracle存储过程游标for循环怎么写
  9. SpringBoot指南(五)——拦截器、原生组件
  10. PhpStorm下Laravel代码智能提示
  11. python2.0 s12 day4
  12. ajax 实时进度_三分钟搭建websocket实时在线聊天,项目经理也不敢这么写
  13. 为什么不能cout一个string?
  14. 有限维空间上的线性算子
  15. 图片双面打印顺序混乱_打印,那些你没有注意的小细节
  16. 和平精英android怎么写符号,特殊符号输入方法 和平精英iOS和安卓名字特殊符号...
  17. 2020年计算机设计大赛 人流量预测 (国赛三等奖)
  18. [转]Flixel只能用于Flex吗?
  19. 【Unity游戏开发】动画系统(四)Unity3d动画基础
  20. JAVA根据word模版使用poi导出word文档,包含图片、文字

热门文章

  1. django序列化器嵌套_Django Rest Framework中用于OneToOne字段的序列化程序中的嵌套关​​系
  2. -ms-flexbox_Flexbox的工作原理-用大尺寸,彩色动画gif进行解释
  3. MySQL进阶操作之视图
  4. linux管理之磁盘信息和进程管理
  5. Hive SQL 窗口函数
  6. ASP.NET中对Exception的统一集中处理常见的有两种方式的一些问题总结
  7. Table表格横竖线实现Css
  8. matlab将矩阵分解成lu,10行代码实现矩阵的LU分解(matlab)
  9. 【C++】C++中的头文件(.h)—详解(1)
  10. 最小公倍数的求解原理和证明