目录
一、效果展示
1、视频演示
2、该方案的拓展应用场景
场景1 - 公共单位宣传系统
场景2 - 企业信息展示
场景3 - 游乐场
场景4 - 商超游戏机
二、架构设计
三、系统实现
1、软件层 - 配置模块代码解析
1)配置模块 - python QtDesigner 设计 UI
2)UI 编译成py文件的命令
3)python 逻辑层代码 - 选取视频文件路径
4)python 逻辑层代码 - 保存配置,以JSON格式保存
2、软件层关键功能 - 播放模块代码解析
1)注册快捷键
2)响应快捷键事件
3)视频播放
4)响应ESC事件
3、硬件层选型
1)100个按键PCBA板 Type-C 接口
2)多系统兼容
3)自带配置软件
三、说明
四、效果回顾
一、效果展示
实现的功能:
- 如果用户按住按钮,大屏显示器中即可播放对应的视频,同时指示灯亮;用户松开按钮,指示灯灭。
- 如果无用户操作,则自动循环播放。
1、视频演示
【定制开发 - 展厅触摸视频展示系统】整体解决方案_哔哩哔哩_bilibili
2、该方案的拓展应用场景
场景1 - 公共单位宣传系统
场景2 - 企业信息展示
场景3 - 游乐场
场景4 - 商超游戏机
二、架构设计
三、系统实现
1、软件层 - 配置模块代码解析
1)配置模块 - python QtDesigner 设计 UI
该UI设计主要使用三个元素:
标签 label
输入框 lineEdit
按钮 pushButton
保存按钮 pushButton
2)UI 编译成py文件的命令
pyuic5 -o ui_TouchShow.py TouchShow.ui
3)python 逻辑层代码 - 选取视频文件路径
def pushButton_click(sender):
print(sender.objectName())
fileName, fileType = QFileDialog.getOpenFileName(sender, "选取文件", "./",
"Text Files (*.mp4);;Text Files (*.avi);;All Files (*)")
print(fileName)
print(fileType)
if sender.objectName() == "pushButton_1":
ui_main.lineEdit_1.setText(fileName)
elif sender.objectName() == "pushButton_2":
ui_main.lineEdit_2.setText(fileName)
elif sender.objectName() == "pushButton_3":
ui_main.lineEdit_3.setText(fileName)
elif sender.objectName() == "pushButton_4":
ui_main.lineEdit_4.setText(fileName)
4)python 逻辑层代码 - 保存配置,以JSON格式保存
def pushButton_save(sender):
files = {'file1': ui_main.lineEdit_1.text(),
'file2': ui_main.lineEdit_2.text(),
'file3': ui_main.lineEdit_3.text(),
'file4': ui_main.lineEdit_4.text()}
jsObj = json.dumps(files, indent=4).encode('utf-8').decode('unicode_escape') # indent参数是换行和缩进
fileObject = open('config.json', 'w+')
fileObject.write(jsObj)
fileObject.close()
QMessageBox.about(None, "确认", "保存成功")
2、软件层关键功能 - 播放模块代码解析
1)注册快捷键
'ctrl+shift+1' 为快捷键,on_Hotkey1为回调函数。
def reg_Hotkey():
print("注册快捷方式")
keyboard.add_hotkey('ctrl+shift+1', on_Hotkey1)
keyboard.add_hotkey('ctrl+shift+2', on_Hotkey2)
keyboard.add_hotkey('ctrl+shift+3', on_Hotkey3)
keyboard.add_hotkey('ctrl+shift+4', on_Hotkey4)
keyboard.add_hotkey('esc', on_HotkeyEsc)
2)响应快捷键事件
判断文件是否存在,如果存在执行播放命令。
def on_Hotkey1():
global v
print('ctrl+shift+1')
filename = ui_main.lineEdit_1.text()
if os.path.exists(filename):
v.play(filename)
3)视频播放
如果没有用户操作,则是循环播放,执行if loop 真语句;
如果有用户操作,播放用户触发的按钮对应的视频文件。
def play(self, filename):
loop = True
if loop:
playlist = QMediaPlaylist()
playlist.addMedia(QMediaContent(QUrl.fromLocalFile(filename)))
playlist.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
self.player.setPlaylist(playlist)
playlist.setCurrentIndex(0)
else:
self.player.setMedia(QMediaContent(QUrl.fromLocalFile(filename)))
# to start at the beginning of the video every time
self.player.setPosition(0)
self.show()
self.player.play()
4)响应ESC事件
def on_HotkeyEsc():
print('esc')
v.setFullScreen(False)
3、硬件层选型
1)100个按键PCBA板 Type-C 接口
2)多系统兼容
3)自带配置软件
三、说明
硬件选型可支持多种方式,后续会做介绍。
四、效果回顾
【定制开发 - 展厅触摸视频展示系统】整体解决方案_哔哩哔哩_bilibili