Summary: 本文详细介绍了申请软件著作权(软著)的相关要求与撰写步骤,包括如何设计图形界面、代码撰写技巧以及提高代码行数的方法。通过Python的Tkinter库,结合AI辅助编程和PyInstaller打包技术,为软著申请提供全流程详细的介绍。
文章目录结构:
软著的相关内容及要求
善用注释,代码不查重,一定不能有空行!
软著撰写顺序
- 给自己的软著起一个炫酷的名字(尽量不要超过20个字,不能全英文)
七轴冗余机械臂零空间避障运动控制软件
基于协同控制的SCARA机器人定位抓取软件
基于速度闭环控制的永磁同步电机驱动软件
三轴仿人机械臂轨迹跟踪运动控制软件
基于PID的倒立摆自平衡优化控制软件
基于笛卡尔空间的六轴臂轨迹规划控制软件
基于最优摆线步态的四足机器人姿态控制软件
- 想清楚你的软件要实现哪些功能(和写文章一样,想清楚框架再动笔)
- 搭好软著界面
- 撰写软著说明书和著作权人申请表
Remark:
-
软著中不能出现乱码;
-
不能出现空行;
-
代码量要超过1000行;
- 代码量不够加注释;
-
软著不会查重,即使代码内容大面积相似,只要软件运行界面不一样,就可以申请软件著作权;
软著撰写个人经验
首先需要明确自己的情况,需要做一个什么样的软件来申请软著:
A. 已有基础代码,设计图形界面来申请软著
B. 为了有一篇软著而从头写一个程序来申请
我属于之前已有项目代码,想要做个图形界面来申请一篇软著,因此后续内容主要侧重于设计图形界面和撰写材料方面。
设计图形界面
理清图形界面逻辑 & 绘制界面草图
首先一定要想清楚你的程序界面你想设计成什么样,需要有逻辑:
- 程序运行(打开)后出现什么界面?
- 会有什么按钮?点击后会有什么反馈?
整个图形界面的逻辑需要用自然语言能分点有条理的写出来,最好还能把脑海里的图形界面以草图的形式画出来
以我申请的 钢轨波磨信号特征提取软件 软著为例:
设计的图形界面草图:
图形界面逻辑:
整个按钮在界面的右方,一行两个按钮,分别是加载数据、清除数据;选择左轨、选择右轨;原始信号时域图、原始信号频域图;加速度分解模态IMF时域图、加速度分解模态IMF频域图;
-
加载数据
i. 选择xlsx文件
ii. 提示框:加载数据成功 or 失败 -
选择需要处理的是左轨还是右轨
i. 提示框:选择 左轨 or 右轨 成功
-
点击原始信号时域图出现对应轨的时域图,点击原始信号频域图出现对应轨的频域图,加速度分解模态IMF时域图、加速度信号IMF频域图同理
AI辅助构建图形界面
确定构建GUI图形界面的代码(库)方式
Python 构建 GUI(图形用户界面)的方法有多种,主要依赖不同的库或框架。这些方法适用于各种类型的应用程序,从简单的桌面应用到复杂的跨平台项目。以下是常见的 Python GUI 构建方法:
Python 构建 GUI(图形用户界面)的方法有多种,主要依赖不同的库或框架。这些方法适用于各种类型的应用程序,从简单的桌面应用到复杂的跨平台项目。以下是常见的 Python GUI 构建方法:
1. Tkinter
-
描述:Python 内置的标准 GUI 库,轻量级且易于使用,适合小型项目。
-
特点:
- 简单易学,适合初学者。
- 跨平台,支持 Windows、macOS 和 Linux。
- 提供基础的组件,如按钮、标签、文本框等。
-
示例代码:
import tkinter as tk
def on_click():
label.config(text="Hello, Tkinter!")
root = tk.Tk()
root.title("Tkinter Example")
label = tk.Label(root, text="Hello, World!")
label.pack()
button = tk.Button(root, text="Click Me", command=on_click)
button.pack()
root.mainloop()
2. PyQt / PySide
-
描述:基于 Qt 框架的 Python 绑定,提供丰富的控件和功能,适合复杂项目。
-
特点:
- PyQt 和 PySide 功能相似,PyQt 由 Riverbank 开发,PySide 由 Qt 官方维护。
- 支持高级组件,如树视图、表格、小部件等。
- 可用于开发跨平台桌面应用程序。
-
示例代码:
from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QVBoxLayout, QWidget
def on_click():
label.setText("Hello, PyQt5!")
app = QApplication([])
window = QWidget()
window.setWindowTitle('PyQt Example')
layout = QVBoxLayout()
label = QLabel('Hello, World!')
layout.addWidget(label)
button = QPushButton('Click Me')
button.clicked.connect(on_click)
layout.addWidget(button)
window.setLayout(layout)
window.show()
app.exec_()
3. Kivy
-
描述:适用于多点触控和移动设备,常用于开发跨平台应用。
-
特点:
- 支持 Android 和 iOS 应用开发。
- 提供灵活的布局和动态界面设计。
- 适合图形密集型应用,如游戏、媒体应用。
-
示例代码:
from kivy.app import App
from kivy.uix.label import Label
class MyApp(App):
def build(self):
return Label(text='Hello, Kivy!')
MyApp().run()
4. wxPython
-
描述:封装了原生 GUI 控件,界面风格接近本地应用,适用于桌面应用开发。
-
特点:
- 跨平台,支持多种操作系统。
- 提供丰富的控件,包括富文本编辑、绘图等。
- 稳定性高,适合商业应用。
-
示例代码:
import wx
app = wx.App()
frame = wx.Frame(None, title='wxPython Example')
panel = wx.Panel(frame)
label = wx.StaticText(panel, label="Hello, wxPython!", pos=(10, 10))
frame.Show()
app.MainLoop()
5. Dear PyGui
-
描述:现代化的 GUI 框架,支持图形密集型应用,适合实时数据可视化。
-
特点:
- 提供简单且高效的界面绘制。
- 更适合需要动态更新的界面,比如游戏或数据仪表板。
-
示例代码:
import dearpygui.dearpygui as dpg
dpg.create_context()
dpg.create_viewport(title='Dear PyGui Example', width=600, height=400)
def on_button_click():
dpg.set_value("label", "Hello, Dear PyGui!")
with dpg.window(label="Example Window"):
dpg.add_text("Hello, World!", tag="label")
dpg.add_button(label="Click Me", callback=on_button_click)
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
6. FLTK (Python FLTK Bindings)
-
描述:轻量级跨平台 GUI 框架,适用于嵌入式设备和小型应用。
-
特点:
- 非常小巧,内存占用少。
- 界面渲染速度快,适合资源有限的系统。
Remark:
以上六个图形库内容生成自ChatGPT
由于Tkinter库是Python 内置的标准 GUI 库,轻量级且易于使用,因此图形界面选择基于Tkinter库开发。
AI辅助编程
将主代码,图形界面草图,图形界面逻辑发给AI,AI就能精准的根据你的需求来编写代码
Prompt参考:
我现在想把我的代码添加GUI图形界面,采用tkinter库构建,下面是我的图形界面操作逻辑,详细代码我会在下个对话框给出:
整个按钮在界面的右方,一行两个按钮,分别是加载数据、清除数据;选择左轨、选择右轨;原始信号时域图、原始信号频域图;加速度分解模态IMF时域图、加速度分解模态IMF频域图;
操作逻辑如下:
1. 加载数据
2. 选择xlsx文件
3. 提示框:加载数据成功 or 失败
4. 选择需要处理的是左轨还是右轨
5. 提示框:选择 左轨 or 右轨 成功
6. 点击原始信号时域图出现对应轨的时域图,点击原始信号频域图出现对应轨的频域图,加速度分解模态IMF时域图、加速度信号IMF频域图同理
这是我的原始代码,请根据我的图形界面逻辑为我添加图形界面
附上你的代码
此后就是AI辅助来进行调试,直到效果符合你的要求
图形界面优化Prompt参考:
这是我的代码,我打算用来申请软件著作权,但是感觉图形界面在没有显示图像的时候比较空,是否能进行优化
附上你的代码
我现在有新的修改想法,我想在我的代码的基础上将图形界面设置一个背景图来使其变得不那么空旷,请为我修改代码
附上你的代码
在右边按钮最上方加入新的两个输入框,让采样频率FS和平衡参数alpha手动输入,参考以下代码
# 创建输入框和标签
fs\_label = tk.Label(root, text="采样频率 FS:")
fs\_label.pack()
fs\_entry = tk.Entry(root)
fs\_entry.pack()
fs\_entry.insert(0, "2000") # 默认值
alpha1\_label = tk.Label(root, text="平衡参数 alpha:")
alpha1\_label.pack()
alpha1\_entry = tk.Entry(root)
alpha1\_entry.pack()
alpha1\_entry.insert(0, "2000") # 默认值
完善代码
在代码的主要功能都实现后即可进入编程的收尾工作。
检查代码行数
- 代码量要超过1000行;
- 代码不能有空行
一键删除代码代码空行方法(基于Pycharm)
ctrl+shift+r
打开替换窗口,开启正则表达式- 输入框输入
^\s*\n
- 自行选择作用域
- 根据需要,点击“替换”或者“替换全部”,即可删除全部空行
Remark:
如果想删除全部注释也同理:打开替换窗口,开启正则,输入框中输入#.
,选择作用域后替换即可。
增加代码行数的方法
如果发现代码行数不足1000行,可以从以下两个角度增加代码行数:
- 为代码增加更多的注释 (注释想加多少都可以)
加注释的一种简单Prompt思路:
为代码每一行都加入详细的中文注释,注释不要放在代码后面,而是单独作为一行
- 加入一些“灌水”的代码
灌水思路:
water代码放在一个新的Class类中,不调用
文章资源我会提供一个watering.txt代码(Python编写),由我的同学胡新源编写,代码共有837行(无注释,无空行),运行速度很快,运行后无结果
使用方法:
将watering代码插入你的代码最后即可。
程序打包为.exe
使用 PyInstaller 把.py文件和.jpg文件一起打包成.exe文件
PyInstaller 简介
PyInstaller 是一个将 Python 应用程序打包成独立可执行文件的工具,允许你在没有安装 Python 解释器的计算机上运行 Python 程序。它支持 Windows、macOS 和 Linux 操作系统。
PyInstaller 的主要功能
跨平台支持:可以在 Windows、macOS 和 Linux 上创建可执行文件。
多种打包模式:
- 单文件模式:将所有代码和依赖项打包成一个可执行文件。
- 目录模式:将代码和依赖项打包成一个目录结构,包含可执行文件和所有依赖文件。
自动分析依赖项:自动检测和打包所需的所有第三方库和模块。
支持数据文件和二进制文件的打包:允许将图像、配置文件等数据文件一起打包到可执行文件中。
兼容第三方库:支持大多数第三方库,如 NumPy、Pandas、Matplotlib 等。
优点
- 跨平台支持:可以在多个操作系统上运行,不需要为每个操作系统编写单独的打包脚本。
- 依赖项自动检测:自动检测和打包所有依赖项,减少手动配置的工作量。
- 多种打包模式:灵活的打包选项,可以选择将所有内容打包成一个文件或一个目录结构。
- 支持数据文件:可以将数据文件和二进制文件一起打包,方便应用程序的分发和使用。
- 兼容性强:支持大多数常用的第三方库,减少兼容性问题。
缺点
- 打包时间长:对于大型项目,打包时间可能较长。
- 可执行文件体积大:由于将 Python 解释器和所有依赖项都打包在内,生成的可执行文件可能非常大。
- 依赖版本问题:有时会出现依赖版本不匹配的问题,需要手动调整。
- 复杂性:对于非常复杂的项目,可能需要额外的配置和调试。
- 支持有限:虽然 PyInstaller 支持大多数库,但某些特殊库可能需要额外的配置或不完全支持。
总结
PyInstaller 是一个功能强大且灵活的打包工具,适用于大多数 Python 项目的打包需求。它的跨平台支持和自动依赖检测功能使得它非常方便,但在处理大型项目时需要注意打包时间和可执行文件的体积问题。总体来说,PyInstaller 是一个值得推荐的打包工具,特别是对于需要在多平台分发 Python 应用程序的开发者。
打包程序参考博客:
python:将.py文件转换成.exe文件_python.py如何变成.exe-CSDN博客
要使用 PyInstaller 将 .py
文件和 .jpg
文件一起打包成 .exe
文件,请按照以下步骤操作:
使用 PyInstaller 打包后的
.exe
文件可以在没有 Python 环境的计算机上运行。这是因为 PyInstaller 会将 Python 解释器和所有依赖的库打包到可执行文件中。
打包步骤一:安装 PyInstaller
确保你已经安装了 PyInstaller。如果没有安装,可以使用以下命令进行安装:
pip install pyinstaller
打包步骤二:编写 Python 脚本
假设你的 Python 脚本名为 main.py
,并且它需要使用 image.jpg
文件。确保你的脚本正确引用了这个图像文件。例如:
import os
from PIL import Image
# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 加载图片
image_path = os.path.join(current_dir, 'image.jpg')
image = Image.open(image_path)
# 进行一些操作
image.show()
打包步骤三:创建 spec 文件
使用 PyInstaller 的 --onefile
选项将所有文件打包到一个可执行文件中,并使用 --add-data
选项将 image.jpg
文件包含在内。
在命令行中运行以下命令:
pyinstaller --onefile --add-data "image.jpg;." main.py
这里的 --add-data
参数的格式是 "source_path;destination_path"
。在 Windows 上,路径之间使用分号(;
),在 Linux 和 macOS 上,使用冒号(:
)。
打包步骤四:打包
运行上述命令后,PyInstaller 会生成一个 dist
目录,其中包含 main.exe
文件。
完整命令
以下是一个完整的命令示例:
pyinstaller --onefile --add-data "E:/桌面文件存放/Code/Python/大创项目/VMD/图形界面背景图片0923.jpg;." "E:/桌面文件存放/Code/Python/大创项目/VMD/变分模型驱动的钢轨波磨信号特征高效提取软件.py"
如果你在 macOS 或 Linux 上,命令将如下:
pyinstaller --onefile --add-data "image.jpg:." main.py
打包结果
在 dist
目录中(C:\Users\你的用户名\dist),你将找到一个名为 main.exe
的可执行文件,它包含了你的 Python 脚本和 image.jpg
文件。
材料撰写
填写好源代码文档、软件登记申请表、源代码文档之后即可和自己的软件一起打包发给导师,导师确认无误之后递交给代理公司,至此软著的所有工作结束。
在苏州大学,学校要求学生发表软著必须以学校的名字申请,因此我们写完之后通过代理代为申请
源代码文档
- 将自己的代码完整的复制到word中,注意不能有空行
- 再给文档加上一个页眉 & 页脚即可
软件登记申请表
根据模板自行填写信息即可
软件说明书
按照模板修改填写信息
示例:
Remark:
建议将软件功能分为几个模块,每个模块的功能可能包含有加载数据、绘图的功能,而不是将其单独拎出来作为一个大的章节。
我的旧说明书:(在导师的指导下已经修改为上图)
参考资料
[1] 数学建模老哥. 《软件著作权》申请图文详细教程(附软著模板)—申请表模版+说明书模版+源代码模版全包括!_哔哩哔哩_bilibili. https://www.bilibili.com/video/BV1hw411t7dw/
[2] 君弟的岁月杂谈. 手把手教你撰写软著(全集)_哔哩哔哩_bilibili. https://www.bilibili.com/video/BV1tR4y1J7XF/
[3] 利用Pycharm整理软著申请的源代码文件(删除注释与空行)_软著源代码能有注释吗-CSDN博客. https://blog.csdn.net/skye_fly/article/details/111035161?ops_request_misc=