[AI Development Lab] 【deepin插件开发活动】广播教学软件
Tofloor
poster avatar
136******47
deepin
2026-08-14 00:48
Author

sfzy/广播教学deepin

特别说明:纯DTK版本放弃了
今天遇到一个问题,就是考勤签到功能要导入xls格式文件,这个在python下是有相关库实现的,但是使用纯QT开发没有或者我没找到,不像python下库很好找到,只能支持xlsx格式与csv这种格式,有些不完美,本来到这还没有放弃,坚持到晚上想了想还是放弃了。因为venv版本已经可以在deepin系统中运行,已经可以双击安装,在启动器中启动,现在使用纯DTK等于是完全重写,后面还有一些功能,录屏、截图、录屏时自动转字幕(这部分功能win和venv中未测试),但声音这块用了pyaudio,QT下有可能也没有相关库(所以生态很重要),这样最后一个是很多功能可能要减少,另一个是虽然参考了venv版本,但是这过程中不断的调试,相当于重新写了一套,(再加上昨天因为状态栏的问题生成了12个测试才找到问题在哪)算力太浪费了不环保(其实是token消耗太多😂)。因此,纯DTK暂停了。目前纯DTK广播、屏幕标注可以使用,考勤签到可以签,修复了一个签到逻辑没有测试。

在windows上使用codebuddy完成广播教学的项目,测试完成后,使用workbuddy添加deepin skills,使用workbuddy调用skill,将项目转成可在deepin中使用的程序

智慧课堂广播系统 · deepin 打包工程

把 Windows 版 Python + PySide6 局域网广播教学项目移植为 deepin v25/ UOS v20(venv版本打包、安装、运行,测试通过) 原生应用。 提供 两种互相独立、可并存 的 Linux 分发方案,以及一个原始 Windows 备份。

目录结构

目录 说明 方案
ClassroomBroadcast - bak3/ 原始 Windows 版(参考基线,不改动) —
ClassroomBroadcast-deepin/ 单文件版:PyInstaller --onefile 打出单个 ELF onefile
ClassroomBroadcast-deepin-venv/ 源生/venv 版:源码 + 内置 Python 虚拟环境 非单文件
目录 说明 技术栈 / 方案
ClassroomBroadcast - bak3/ 原始 Windows 版(参考基线,不改动) Python + PySide6(Windows)
ClassroomBroadcast-deepin/ 单文件版:PyInstaller --onefile 打出单个 ELF Python + PySide6(Fusion 风格)
ClassroomBroadcast-deepin-venv/ venv 版:源码 + 内置 Python 虚拟环境 Python + PySide6(Fusion 风格)
ClassroomBroadcast-deepin-dtk/ DTK 参赛版:C++ / DTK6 原生应用(deepin 原生外观) C++ / DTK6(基于 dtk-development Skill)
ClassroomBroadcast-deepin-appearance/ 外观探测存档:
确认 pip PySide6 与系统 DTK 主题 ABI 不兼容,
结论为「保持 Fusion」
—(仅存档,不打包)

使用官方 dtk-development Skill(deepin Skills 项目的一部分)进行开发。 开发过程中该 Skill 提供了以下关键规范,代码均严格遵循:

Skill 提供的规范 在本项目中的体现
DApplication 入口(替代 QApplication,含单实例/翻译/产品信息) main_teacher.cpp / main_student.cpp
DMainWindow + DTitlebar 原生窗口 teacherwindow.cpp / studentwindow.cpp
DLogManager 日志规范(dtkcore 注册 Appender,应用用 Qt 日志宏) 两个 main_*.cpp
DTK6 控件(DSwitchButton / DComboBox / DSpinBox / DLabel / DPushButton) 教师端与学生端 UI
debian/control 写法(Build-Depends 用 -dev,运行时 libdtk6* 由 ${shlibs:Depends} 自动推导) debian/control


注意:deepin 25 实际装的 DTK6 头文件和 dtk-development Skill 的参考示例有细微差异(比如 setOOMScoreAdj 示例写静态、实际是非静态)。我已按真机编译器的判据改,并以对象调用规避两种写法。

新错误很明确:#include 这个文件在你的 DTK6 上根本不存在——说明 DTK6 里 DLogManager 的转发头文件名不是这个(可能改名、或功能合并、或需走别的 include 路径)。我查一下 dtk-development Skill 里的权威用法,确认正确的 include 写法,而不是瞎猜。

Skill 的 application.md 示例(第 37 行)仍然写的是静态 DApplication::setOOMScoreAdj(0) —— 进一步证实 Skill 文档与 deepin 25 实际 DTK6 头文件有差异。它也没给出 DLogManager 的 include 写法。我读一下 log.md 找权威 include:

找到根因了。Skill 的 log.md 说 #include 就带出 DLogManager,但你的 deepin 25 实际 DTK6 里 并不声明 DLogManager,也没有 这个转发头文件 —— 这是 Skill 文档与当前 DTK6 版本脱节(和之前 setOOMScoreAdj 由静态变非静态是同一类问题)。

DLogManager 只是日志便利封装,删掉不影响任何功能(Qt 默认的 qDebug/qWarning 不需要它也能输出)。我先把它从两个 main 里移除,让你能立即编译过;同时给你一条查找命令,确认该类到底还在不在,在的话我再用正确的头文件加回来。

先确认这个类在你的系统里到底叫什么头文件:

bash

find /usr/include -iname '*logmanager*' 2>/dev/null
dpkg -L libdtk6core-dev | grep -i log

把输出贴给我。如果有 dlogmanager.h(或 DtkCore/dlogmanager.h),我就用正确的 include 把 registerConsoleAppender/FileAppender 接回去;如果系统里压根没这个类,那说明这个版本已经砍掉了它,保持现状即可。

/usr/include/dtk6/DCore/LogManager.h
/usr/include/dtk6/DCore/DLog
/usr/include/dtk6/DCore/LogManager.h
/usr/share/doc/libdtk6core-dev/changelog.gz

用户找到了正确的 DTK6 日志头文件路径:/usr/include/dtk6/DCore/LogManager.h,DLog 也在 /usr/include/dtk6/DCore/DLog。我来确认正确的 include 写法和 API,然后改回 main 文件。

找到了根因:这是一个 DTK6 头文件路径变更 问题——DLogManager 实际位于 /usr/include/dtk6/DCore/LogManager.h,而不是旧的扁平路径 。同时 DLog 也在 DCore/ 下。之前误删其实不必,现在用正确路径接回即可。

已定位并修复。问题不是类名,而是 DTK6 在 deepin 25 的 include 根设置:它把各个模块子目录(DCore/、DWidget/、DGui/)本身作为 include 搜索根,所以裸名 、 都能用,但写成 (多套一层 DCore/)反而找不到文件。



PixPin_2026-08-12_20-14-00.png

image.png

image.png

PixPin_2026-08-13_21-46-33.png
image.png

dtk版制作中=》放弃了,原因写在最前面

Reply Favorite View the author
All Replies
avatar
骑🐖追帅哥bot
Moderator
2026-08-14 09:01
#1

能跑uos吗

Reply View the author
avatar
136******47
deepin
2026-08-14 09:19
#2
骑🐖追帅哥bot:

能跑uos吗

刚试了,装上没问题,运行报错,目前手上是uos20

我试试调整

原来是这样:不是一次打包到处能用

两个关键坑(务必注意):

  1. UOS 20 默认 python3 很可能是 3.7,而 PySide6-Essentials / opencv / numpy 新版都要求 ≥ 3.8。不升级就 pip install 失败。必须先把 UOS 20 的 python3 弄成 ≥ 3.8(推荐 3.9/3.11)。
  2. 构建脚本的 Depends: python3(第 173 行)指向系统默认 python3。所以 UOS 20 上构建用的那个 python 版本,必须就是系统 python3 对应的版本(才能提供对应的 libpython3.x.so 运行时)。不要构建用 3.11、系统默认却还是 3.7,那装完运行会找不到 libpython3.11.so。

根目录现成的两个 .deb 是 deepin 上打的,不要直接拷到 UOS 20 用,必须在 UOS 20 上重打。

另一个提醒:DTK6 版在 UOS 20 也跑不了

你之前做的 ClassroomBroadcast-deepin-dtk(C++/DTK6)依赖 libdtk6widget + Qt6,而 UOS 20 是 DTK5 / Qt5,连运行时都没有。要兼容 UOS 20 得另做 Qt5/DTK5 版,且同样要在 UOS 20 上构建。

Linux 桌面长期"发展不起来"的核心体验痛点,就是依赖链:装 A 提示先装 B,B 又提示先装 C,而且这些提示默认假设你是能手查文档、配环境的高手。

Reply View the author
avatar
ad1998
deepin
2026-08-14 21:34
#3
136******47:

刚试了,装上没问题,运行报错,目前手上是uos20

我试试调整

原来是这样:不是一次打包到处能用

两个关键坑(务必注意):

  1. UOS 20 默认 python3 很可能是 3.7,而 PySide6-Essentials / opencv / numpy 新版都要求 ≥ 3.8。不升级就 pip install 失败。必须先把 UOS 20 的 python3 弄成 ≥ 3.8(推荐 3.9/3.11)。
  2. 构建脚本的 Depends: python3(第 173 行)指向系统默认 python3。所以 UOS 20 上构建用的那个 python 版本,必须就是系统 python3 对应的版本(才能提供对应的 libpython3.x.so 运行时)。不要构建用 3.11、系统默认却还是 3.7,那装完运行会找不到 libpython3.11.so。

根目录现成的两个 .deb 是 deepin 上打的,不要直接拷到 UOS 20 用,必须在 UOS 20 上重打。

另一个提醒:DTK6 版在 UOS 20 也跑不了

你之前做的 ClassroomBroadcast-deepin-dtk(C++/DTK6)依赖 libdtk6widget + Qt6,而 UOS 20 是 DTK5 / Qt5,连运行时都没有。要兼容 UOS 20 得另做 Qt5/DTK5 版,且同样要在 UOS 20 上构建。

Linux 桌面长期"发展不起来"的核心体验痛点,就是依赖链:装 A 提示先装 B,B 又提示先装 C,而且这些提示默认假设你是能手查文档、配环境的高手。

可以让AI试试玲珑包格式和appimage格式

Reply View the author
avatar
136******47
deepin
2026-08-14 22:26
#4
ad1998:

可以让AI试试玲珑包格式和appimage格式

uos v20是因为python3.7的问题,现在调整了代码,可以运行了

但现在的问题是这是用python实现的。

活动可能想用dtk,就是deepin的工具原生来做,虽然目前不太符合活动要求,但至少在deepin/uos中可以用了,不过现在就是没什么都让ai造,比纯人来做门槛低了,效率高了

用skill来做纯dtk的程序,目前在尝试,效果不太理想,原以为给个例子,调用skill就能行,实际不是,毕竟纯python那一版也是写了快一周才各项基础功能才能用,声音和字幕还没有调试

但是我个人感觉ai有资料是能做出来的,这个技术路线是可以跑通的

Reply View the author
avatar
兆兆嘟嘟嘟
Moderator
2026-08-15 08:37
#5
136******47:

刚试了,装上没问题,运行报错,目前手上是uos20

我试试调整

原来是这样:不是一次打包到处能用

两个关键坑(务必注意):

  1. UOS 20 默认 python3 很可能是 3.7,而 PySide6-Essentials / opencv / numpy 新版都要求 ≥ 3.8。不升级就 pip install 失败。必须先把 UOS 20 的 python3 弄成 ≥ 3.8(推荐 3.9/3.11)。
  2. 构建脚本的 Depends: python3(第 173 行)指向系统默认 python3。所以 UOS 20 上构建用的那个 python 版本,必须就是系统 python3 对应的版本(才能提供对应的 libpython3.x.so 运行时)。不要构建用 3.11、系统默认却还是 3.7,那装完运行会找不到 libpython3.11.so。

根目录现成的两个 .deb 是 deepin 上打的,不要直接拷到 UOS 20 用,必须在 UOS 20 上重打。

另一个提醒:DTK6 版在 UOS 20 也跑不了

你之前做的 ClassroomBroadcast-deepin-dtk(C++/DTK6)依赖 libdtk6widget + Qt6,而 UOS 20 是 DTK5 / Qt5,连运行时都没有。要兼容 UOS 20 得另做 Qt5/DTK5 版,且同样要在 UOS 20 上构建。

Linux 桌面长期"发展不起来"的核心体验痛点,就是依赖链:装 A 提示先装 B,B 又提示先装 C,而且这些提示默认假设你是能手查文档、配环境的高手。

但是uos软件源里的python3版本只有3.7,没有更新的,无法安装。

Reply View the author
avatar
136******47
deepin
2026-08-15 20:18
#6
兆兆嘟嘟嘟:

但是uos软件源里的python3版本只有3.7,没有更新的,无法安装。

现在可以了,用3.7版本也能运行起来

Reply View the author
avatar
136******47
deepin
2026-09-26 10:11
#7

智慧课堂广播系统 · 各版本详细说明

项目形态:同一套教学广播功能,Windows 与 deepin/Linux 双平台实现;2.0.0.0 起屏幕传输切换为自研纯 Python RFB 库 pyrfb(协议对齐 libvncserver/libvncclient)。Gitee 开源仓库同时收录 deepin 版源码 + Windows 版源码 + pyrfb 完整子项目。

一、1.x 系列(TCP/UDP 时代,基本固定只会小问题修复)

版本 内容
早期(2026-08) UDP 发送从主线程迁至捕获线程(修 UI 卡顿);PyInstaller onefile 便携化部署
2026-09 重构 对照 Veyon 重构网络层:TCP 单播默认、非阻塞发送、心跳清理(20s 僵尸剔除)、文件异步化、差分帧、P2P 种子分发、OTA 更新、自动发现教师端、断点续传(下发);打包改onedir(目录即拷即用,弃 onefile)
v1.18.4.0 版本冻结(现场可用版)
v1.18.4.2 视频链路三项 Wi-Fi 优化:自适应画质 + 缺帧等关键帧(间隔 1s)+ 弱客户端单独降质;修复"更新包不存在"(文件后置信令改走 file 子队列)
v1.18.4.3 设置页滚轮守卫修复落地 + 回归测试(滚轮不再悬停即改值)
v1.18.4.4 滚轮守卫根治(armed 机制修复焦点粘留误改值);分队列回归;修复双重 CRLF 污染;停跟踪 __pycache__;高中版教材两版(深度/入门)+ 公文 Word 交付
v1.18.4.5 文件分发修复:P2P 失败补发、慢学生补发轮、断开清理种子、兜底去重、.part 清理
v1.18.4.6 修复 .part 残留根因;学生列表排序(学号/姓名/IP,未注册排最后、IP 数值段排序)+ 选中保持;右键单独发文件给学生
v1.18.5.0 1.x 最后一个稳定版(1.18.4.6 → 1.18.5.0),deepin 同步 2e99841

二、2.0.0.0 分支(RFB 新通道,当前主线)

提交 内容
c7eb103 分支初始化:清理备份目录与排障临时文件
405e469 整合 pyrfb RFB 广播通道(第一版)
1d6aa86 内嵌 pyrfb v0.4.0 →v1.0.0(独立仓库自研库最终版,12 模块)
fd8f952 标注效果优先:分段笔迹跨段宽度插值(epicpen / Krita 式连续锥形笔锋,解决"抬笔整条线变细/收笔突兀变细")
d7bd562 RFB 动态分辨率:输出跟随捕获内容实际尺寸(桌面/窗口);尺寸变化自动 NewFBSize → 客户端重建 + 全量;对照 libvncserver newFBSizePending / libvncclient HandleNewFBSize C 源码逐条核对;E2E 4 尺寸变化验证通过
bbcfa3d 设置页新增「RFB 最大宽度」(0-7680,默认 0=原始分辨率不压缩,超出等比缩小),保存/恢复配置
20dc63d 两端版本号 bump2.0.0.0
e0551b9 文档同步(README + 7 篇教学文档版本号与 RFB 说明)
c7f1f0a 防截屏/录屏语义修正:教师端未开放 → 学生端按钮不可用(权限控制)+ Windows 系统级 SetWindowDisplayAffinity 保留

1.x 的 UDP 广播 / 组播 / TCP 单播路径保留可切换(设置 → 传输方式),便于对照与回退。

三、pyrfb(自研 RFB 库)

  • 版本 v1.0.0(GPL-2.0,自用不上传 PyPI)
  • 纯 Python 完整复刻 libvncserver/libvncclient:RFB 3.8 握手、VNC-Auth(可选 pycryptodome)、脏矩形差分、Raw / zlib / Hextile / Tight / ZRLE、CopyRect、多客户端独立脏区、关键帧兜底、NewFBSize / ExtDesktopSize 动态分辨率
  • 验证:177 测试 × 多轮全绿;两端内嵌模块逐文件哈希一致
  • 仓库内提供 pyrfb/ 完整子项目:源码 / README / LICENSE / pyproject / 18 测试 / examples / tools

四、deepin 版与开源仓库(当前状态)

项 状态
deepin 版 2.0.0.0(同步 win 全部改动:pyrfb 通道、动态分辨率、笔锋平滑、防截屏权限语义);43 测试全绿;打包脚本版本号已更新,待 deepin 主机出 deb(PyInstaller 不能跨平台)
UOS 20 1.x 已在其真机直接打包通过,2.0.0.0 保持相同打包路径;系统 Python 3.7 时注意 PySide6 6.5.x / pandas 1.4.x / PyInstaller 5.x,或自建 3.8+ venv
Gitee 开源 ClassroomBroadcast-deepin/ 含 deepin 源码 + pyrfb 完整子项目 + Windows 源码镜像(ClassroomBroadcast-win/);ASR 语音模型(约 30MB)不入库,放 models/asr/ 即启用离线字幕
Reply View the author