目录
1、esmini介绍
esmini--简易OpenScenario播放器
源码github仓库见https://github.com/esmini/esmini
它包含以下主要库:
RoadManager (esminiRMLib)。提供以 OpenDRIVE 格式描述的道路网络接口的库。
ScenarioEngine (esminiLib)。主要库为 OpenSCENARIO 格式中描述的交通场景提供查看器和 API 接口。该库包括 RoadManager。
2、python调用esmini库播放
新建类,使用ctypes调用esmini库。为方便本地使用,改写官方的传入地址的写法。
class esmini():
def __init__(self):
self.dir=dir
def esmini_player(self,dir):
se = ctypes.CDLL("../my_esmini/esminiLib.dll")
file_dir=dir
se.SE_Init(file_dir.encode('ascii'), 0, 1, 0, 0)
开始播放。
while not se.SE_GetQuitFlag():
se.SE_Step()
main执行。
if __name__ == '__main__':
a=esmini()
a.esmini_player(r'D:\my_code\git_hub\esmini-demo\resources\xosc\cut-in.xosc')
3、使用pyqt5为播放软件添加GUI界面
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(621, 167)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget.setGeometry(QtCore.QRect(20, 20, 581, 51))
self.layoutWidget.setObjectName("layoutWidget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.layoutWidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout.setObjectName("horizontalLayout")
self.label = QtWidgets.QLabel(self.layoutWidget)
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.lineEdit_folder_path = QtWidgets.QLineEdit(self.layoutWidget)
self.lineEdit_folder_path.setObjectName("lineEdit_folder_path")
self.horizontalLayout.addWidget(self.lineEdit_folder_path)
self.toolButton_folder_path = QtWidgets.QToolButton(self.layoutWidget)
self.toolButton_folder_path.setObjectName("toolButton_folder_path")
self.horizontalLayout.addWidget(self.toolButton_folder_path)
self.pushButton_start = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_start.setGeometry(QtCore.QRect(510, 80, 91, 31))
self.pushButton_start.setObjectName("pushButton_start")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "esmini_player 1.0v"))
self.label.setText(_translate("MainWindow", "文件地址"))
self.toolButton_folder_path.setText(_translate("MainWindow", "..."))
self.pushButton_start.setText(_translate("MainWindow", "开始播放"))
4、将GUI界面与功能连接
import sys,os
class MyMainWindow(QMainWindow,Ui_MainWindow,esmini):
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self.setupUi(self)
self.cwd = os.getcwd()
self.toolButton_folder_path.clicked.connect(self.xosc_select_clicked)
self.pushButton_start.clicked.connect(self.esmini_run_clicked)
5、pyinstaller打包成exe
效果展示
后续会更新更多相关内容