




一款基于 PyQt5 + python-vlc + SQLite 的桌面网络电视频道管理工具,集频道数据管理、多格式导入导出、在线直播播放、本地文件播放、多主题切换于一体。默认浅色主题,界面简洁实用。
通过网盘分享的文件:TV频道管理系统v4.exe 链接: https://pan.baidu.com/s/1nO1iEuawKEm1sCpV02hqrw?pwd=xzjc 提取码: xzjc 复制这段内容后打开百度网盘手机App,操作更方便哦 通过网盘分享的文件:tv_channels_v4.db 链接: https://pan.baidu.com/s/1AU0iD8HZ5t7jFBMcRRTXig?pwd=xzjc 提取码: xzjc 复制这段内容后打开百度网盘手机App,操作更方便哦 将2个下载的exe和db放一个目录下即可
pip install PyQt5 python-vlc requests从 https://www.videolan.org 下载安装 VLC 播放器(64位)。程序会自动在以下路径查找 VLC:
C:\Program Files\VideoLAN\VLCC:\Program Files (x86)\VideoLAN\VLC%USERPROFILE%\AppData\Local\Programs\VideoLAN\VLCpython kiro-db-v4.py# 双击 build.bat 或手动执行:pyinstaller --onefile --windowed --name "TV频道管理系统v4" kiro-db-v4.py┌────────────────────────────────────────────────────┐│ TVApp (QMainWindow) │├──────────┬─────────────────────────────────────────┤│ 顶部栏 │ 标题 + 主题切换 + 刷新按钮 │├──────────┼─────────────────────────────────────────┤│ │ 📁 分组 │ 📺 频道 │ 📡 直播 │ 🎬 播放 │ 📥 导入导出 ││ TabWidget ││ │ 各Tab独立布局 │├──────────┼─────────────────────────────────────────┤│ 状态栏 │ 实时提示信息 │└──────────┴─────────────────────────────────────────┘ │ ▼┌──────────────────┐ ┌──────────────────┐│ DB (SQLite) │ │ FileParser ││ groups_表 │ │ 解析TXT/M3U/JSON││ channels_表 │ │ auto_group() │└──────────────────┘ └──────────────────┘-- 分组表CREATETABLE groups_ (idINTEGER PRIMARY KEY AUTOINCREMENT,nameTEXTUNIQUE, sort_order INTEGERDEFAULT0);-- 频道表CREATETABLE channels_ (idINTEGER PRIMARY KEY AUTOINCREMENT,group_idINTEGERNOTNULL,nameTEXTNOTNULL,urlTEXTNOTNULL, sort_order INTEGERDEFAULT0, is_active INTEGERDEFAULT1, speed_ms INTEGERDEFAULT0,FOREIGNKEY(group_id) REFERENCES groups_(id) ONDELETECASCADE,UNIQUE(name, url) -- 按名称+URL联合去重);classDB:def__init__(self):# 自动建表+初始化默认数据defget_groups(self) # 获取所有分组defadd_group(name, so) # 新增分组(重复则忽略)defupdate_group(gid,...) # 编辑分组defdelete_group(gid) # 删除分组(级联删频道)defgroup_id_by_name(name) # 按名称获取ID,不存在则创建defget_channels(gid, limit, offset) # 分页获取频道defch_count(gid) # 频道总数defadd_ch(gid, name, url) # 新增单条defbatch_add(rows) # 批量新增(executemany,跳过重复)defupdate_ch(cid,...) # 编辑频道defdelete_ch(cid) # 删除频道defsearch(kw) # 模糊搜索(名称+分组名)defall_urls() # 获取所有URL集合(用于去重)deflive_tree() # 返回{分组名:[{name,url},...]}树结构设计要点:
UNIQUE(name, url) + INSERT OR IGNORE 确保导入时不会重复ON DELETE CASCADE 删除分组时自动清理关联频道batch_add 使用 executemany 一次性写入,1000条<1秒支持三种输入格式:
CCTV1,http://xxx/index.m3u8 | |
#EXTINF:-1,CCTV1 | |
{"央视":[{"name":"CCTV1","url":"http://..."}]} |
defparse_file(filepath):# 自动识别格式并解析defauto_group(name):# 根据频道名自动归类auto_group 分组规则:
┌─────────────┐ ┌──────────────────────────────────┐│ 频道树 │ │ ││ ├ 央视频道 │ │ VLC 播放画面 ││ │ ├ CCTV1 │ │ ││ │ └ CCTV5 │ │ ││ ├ 卫视频道 │ ├──────────────────────────────────┤│ │ └ 湖南 │ │ ▶ ⏹ 🔊 [====] 80% | 📺 CCTV1 ││ └ 搜索框 │ └──────────────────────────────────┘└─────────────┘播放流程:
_linit() 初始化VLC实例(首次)media_new(url) + add_option(":network-caching=1500")set_media + play()VLC 初始化:
vlc.Instance("--no-xlib", "--quiet", "--network-caching=1500")player.set_hwnd(int(frame.winId())) # Windows嵌入窗口支持格式:mp4 / avi / mkv / flv / mov / ts / mp3 / flac / wav
功能:
导入流程:
选择文件 → 解析(显示条数/新增/重复) → 点击导入 → auto_group分组 → group_id_by_name(自动建组) → batch_add批量写入 → 刷新界面导出格式(文件名带时间戳 20260630_162834_channels.txt):
频道名,URL 每行一条group-title{分组名: [{name, url}, ...]}内置2套完整QSS主题:
通过 QApplication.instance().setStyleSheet() 全局切换,所有组件即时生效。
├── kiro-db-v4.py # 主程序├── tv_channels_v4.db # SQLite数据库(自动生成)├── output/ # 导出文件目录(自动创建)│ ├── 20260630_xxx_channels.txt│ ├── 20260630_xxx_channels.m3u│ └── 20260630_xxx_channels.json├── build.bat # 打包脚本└── filter_channels.py # 源过滤工具(可选)pip install pyinstallerpyinstaller --onefile --windowed --name "TV频道管理系统v4" kiro-db-v4.py打包后分发:将 dist/TV频道管理系统v4.exe + tv_channels_v4.db(如有)放同一文件夹即可。
tv_channels_v4.dboutput/ 子文件夹filter_channels.py 过滤名称,URL 或标准M3U/JSON | ||
在 THEMES 字典中新增一项即可,QSS 格式:
THEMES["我的主题"] = """ QMainWindow{background:#xxx} QPushButton{background:#xxx;color:#xxx;...} ..."""在 parse_file() 函数中增加 elif 分支:
elif ext.endswith(".csv"):# 自定义解析逻辑return [(name, url), ...]可参考 filter_channels.py 的逻辑,在导入Tab中增加"验证"按钮,用 ThreadPoolExecutor 并发检测。
PyQt5>=5.15python-vlc>=3.0requests>=2.25系统要求: