【定制开发 - 展厅触摸视频展示系统】整体解决方案(含python源码解析),如此酷炫的系统,实现起来也不难

目录

一、效果展示

1、视频演示 

2、该方案的拓展应用场景

二、架构设计

三、系统实现

1、软件层 - 配置模块代码解析

1)配置模块 -  python QtDesigner 设计 UI

2)UI 编译成py文件的命令

3)python 逻辑层代码 - 选取视频文件路径

4)python 逻辑层代码 - 保存配置,以JSON格式保存

扫描二维码关注公众号,回复: 13650702 查看本文章

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

商务合作,请私聊。

猜你喜欢

转载自blog.csdn.net/lildkdkdkjf/article/details/122325636
今日推荐