@ -0,0 +1,9 @@
|
||||
ffmpeg-python==0.2.0
|
||||
numba==0.54.1
|
||||
numpy==1.20.3
|
||||
opencv-python==4.5.4.60
|
||||
Pillow==8.4.0
|
||||
PyAudio
|
||||
pynput==1.7.5
|
||||
PyQt5==5.15.4
|
||||
py7zr==0.18.4
|
After Width: | Height: | Size: 176 KiB |
After Width: | Height: | Size: 1.8 KiB |
@ -0,0 +1,114 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'page1.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.4
|
||||
#
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||
# run again. Do not edit this file unless you know what you are doing.
|
||||
import logging
|
||||
|
||||
from PyQt5 import QtCore, QtWidgets
|
||||
import sys
|
||||
import os
|
||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../PaddleClas-release-2.3")
|
||||
from Screenshot.Screenshot_Gui import *
|
||||
from tello_UI import *
|
||||
|
||||
|
||||
from djitellopy import *
|
||||
import time
|
||||
|
||||
|
||||
class Ui_Form1(object):
|
||||
def setupUi(self, Form):
|
||||
Form.setObjectName("Form")
|
||||
Form.resize(1108, 767)
|
||||
self.pushButton = QtWidgets.QPushButton(Form)
|
||||
self.pushButton.setGeometry(QtCore.QRect(10, 740, 75, 23))
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth())
|
||||
self.pushButton.setSizePolicy(sizePolicy)
|
||||
self.pushButton.setObjectName("pushButton")
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
self.mdiArea = QtWidgets.QMdiArea(Form)
|
||||
self.mdiArea.setGeometry(QtCore.QRect(9, 61, 1091, 671))
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.mdiArea.sizePolicy().hasHeightForWidth())
|
||||
self.mdiArea.setSizePolicy(sizePolicy)
|
||||
self.mdiArea.setMaximumSize(QtCore.QSize(16777215, 16777215))
|
||||
self.mdiArea.setObjectName("mdiArea")
|
||||
self.pushButton_4 = QtWidgets.QPushButton(Form)
|
||||
self.pushButton_4.setGeometry(QtCore.QRect(1020, 740, 75, 23))
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.pushButton_4.sizePolicy().hasHeightForWidth())
|
||||
self.pushButton_4.setSizePolicy(sizePolicy)
|
||||
self.pushButton_4.setObjectName("pushButton_4")
|
||||
self.pushButton_3 = QtWidgets.QPushButton(Form)
|
||||
self.pushButton_3.setGeometry(QtCore.QRect(940, 740, 75, 23))
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.pushButton_3.sizePolicy().hasHeightForWidth())
|
||||
self.pushButton_3.setSizePolicy(sizePolicy)
|
||||
self.pushButton_3.setObjectName("pushButton_3")
|
||||
self.label = QtWidgets.QLabel(Form)
|
||||
self.label.setGeometry(QtCore.QRect(10, 10, 101, 31))
|
||||
self.label.setObjectName("label")
|
||||
self.pushButton_5 = QtWidgets.QPushButton(Form)
|
||||
self.pushButton_5.setGeometry(QtCore.QRect(480, 740, 75, 23))
|
||||
self.pushButton_5.setObjectName("pushButton_5")
|
||||
|
||||
self.retranslateUi(Form)
|
||||
QtCore.QMetaObject.connectSlotsByName(Form)
|
||||
self.pushButton.clicked.connect(lambda: self.show_camera())
|
||||
self.pushButton_5.clicked.connect(lambda: self.record_vedio())
|
||||
def show_camera(self):
|
||||
MainWindow = QMainWindow()
|
||||
ui = Ui_Form()
|
||||
ui.setupUi(MainWindow)
|
||||
MainWindow.setFixedSize(1022, 618)
|
||||
self.mdiArea.addSubWindow(MainWindow)
|
||||
MainWindow.show()
|
||||
try:
|
||||
import Tello.KeyboardControl as kb
|
||||
ui.pushButton.clicked.connect(lambda: up())
|
||||
ui.pushButton2.clicked.connect(lambda: left())
|
||||
ui.pushButton4.clicked.connect(lambda: right())
|
||||
ui.pushButton5.clicked.connect(lambda: return1())
|
||||
ui.pushButton3.clicked.connect(lambda: qifei())
|
||||
ui.pushButton6.clicked.connect(lambda: jiangluo())
|
||||
except:
|
||||
print("")
|
||||
def up():
|
||||
kb.getKeyboardInput("i")# 前
|
||||
def left():#左
|
||||
kb.getKeyboardInput("j")
|
||||
def right():
|
||||
kb.getKeyboardInput("l")#右
|
||||
def return1():
|
||||
kb.getKeyboardInput("k")#后
|
||||
def qifei():
|
||||
kb.getKeyboardInput("UP")
|
||||
def jiangluo():
|
||||
kb.getKeyboardInput("DOWN")
|
||||
def record_vedio(self):
|
||||
ui = Ui_MainWindow1()
|
||||
self.mdiArea.addSubWindow(ui)
|
||||
ui.show()
|
||||
def retranslateUi(self, Form):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
Form.setWindowTitle(_translate("Form", "page1"))
|
||||
self.pushButton.setText(_translate("Form", "连接"))
|
||||
self.pushButton_4.setText(_translate("Form", "缩小"))
|
||||
self.pushButton_3.setText(_translate("Form", "放大"))
|
||||
self.label.setText(_translate("Form", "实时画面显示系统"))
|
||||
self.pushButton_5.setText(_translate("Form", "视频录制"))
|
@ -0,0 +1,280 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'page2.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.4
|
||||
#
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||
# run again. Do not edit this file unless you know what you are doing.
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
from vedio_demo import Ui_MainWindow
|
||||
from PyQt5.QtWidgets import *
|
||||
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
|
||||
import os
|
||||
import sys
|
||||
import math
|
||||
import heapq
|
||||
|
||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)) +
|
||||
"/../../Search_based_Planning/")
|
||||
|
||||
from Search_2D import plotting, env
|
||||
|
||||
class AStar:
|
||||
"""AStar set the cost + heuristics as the priority
|
||||
"""
|
||||
def __init__(self, s_start, s_goal, heuristic_type):
|
||||
self.s_start = s_start
|
||||
self.s_goal = s_goal
|
||||
self.heuristic_type = heuristic_type
|
||||
|
||||
self.Env = env.Env() # class Env
|
||||
|
||||
self.u_set = self.Env.motions # feasible input set
|
||||
self.obs = self.Env.obs # position of obstacles
|
||||
|
||||
self.OPEN = [] # priority queue / OPEN set
|
||||
self.CLOSED = [] # CLOSED set / VISITED order
|
||||
self.PARENT = dict() # recorded parent
|
||||
self.g = dict() # cost to come
|
||||
|
||||
def searching(self):
|
||||
"""
|
||||
A_star Searching.
|
||||
:return: path, visited order
|
||||
"""
|
||||
|
||||
self.PARENT[self.s_start] = self.s_start
|
||||
self.g[self.s_start] = 0
|
||||
self.g[self.s_goal] = math.inf
|
||||
heapq.heappush(self.OPEN,
|
||||
(self.f_value(self.s_start), self.s_start))
|
||||
|
||||
while self.OPEN:
|
||||
_, s = heapq.heappop(self.OPEN)
|
||||
self.CLOSED.append(s)
|
||||
|
||||
if s == self.s_goal: # stop condition
|
||||
break
|
||||
|
||||
for s_n in self.get_neighbor(s):
|
||||
new_cost = self.g[s] + self.cost(s, s_n)
|
||||
|
||||
if s_n not in self.g:
|
||||
self.g[s_n] = math.inf
|
||||
|
||||
if new_cost < self.g[s_n]: # conditions for updating Cost
|
||||
self.g[s_n] = new_cost
|
||||
self.PARENT[s_n] = s
|
||||
heapq.heappush(self.OPEN, (self.f_value(s_n), s_n))
|
||||
|
||||
return self.extract_path(self.PARENT), self.CLOSED
|
||||
|
||||
def searching_repeated_astar(self, e):
|
||||
"""
|
||||
repeated A*.
|
||||
:param e: weight of A*
|
||||
:return: path and visited order
|
||||
"""
|
||||
|
||||
path, visited = [], []
|
||||
|
||||
while e >= 1:
|
||||
p_k, v_k = self.repeated_searching(self.s_start, self.s_goal, e)
|
||||
path.append(p_k)
|
||||
visited.append(v_k)
|
||||
e -= 0.5
|
||||
|
||||
return path, visited
|
||||
|
||||
def repeated_searching(self, s_start, s_goal, e):
|
||||
"""
|
||||
run A* with weight e.
|
||||
:param s_start: starting state
|
||||
:param s_goal: goal state
|
||||
:param e: weight of a*
|
||||
:return: path and visited order.
|
||||
"""
|
||||
|
||||
g = {s_start: 0, s_goal: float("inf")}
|
||||
PARENT = {s_start: s_start}
|
||||
OPEN = []
|
||||
CLOSED = []
|
||||
heapq.heappush(OPEN,
|
||||
(g[s_start] + e * self.heuristic(s_start), s_start))
|
||||
|
||||
while OPEN:
|
||||
_, s = heapq.heappop(OPEN)
|
||||
CLOSED.append(s)
|
||||
|
||||
if s == s_goal:
|
||||
break
|
||||
|
||||
for s_n in self.get_neighbor(s):
|
||||
new_cost = g[s] + self.cost(s, s_n)
|
||||
|
||||
if s_n not in g:
|
||||
g[s_n] = math.inf
|
||||
|
||||
if new_cost < g[s_n]: # conditions for updating Cost
|
||||
g[s_n] = new_cost
|
||||
PARENT[s_n] = s
|
||||
heapq.heappush(OPEN, (g[s_n] + e * self.heuristic(s_n), s_n))
|
||||
|
||||
return self.extract_path(PARENT), CLOSED
|
||||
|
||||
def get_neighbor(self, s):
|
||||
"""
|
||||
find neighbors of state s that not in obstacles.
|
||||
:param s: state
|
||||
:return: neighbors
|
||||
"""
|
||||
|
||||
return [(s[0] + u[0], s[1] + u[1]) for u in self.u_set]
|
||||
|
||||
def cost(self, s_start, s_goal):
|
||||
"""
|
||||
Calculate Cost for this motion
|
||||
:param s_start: starting node
|
||||
:param s_goal: end node
|
||||
:return: Cost for this motion
|
||||
:note: Cost function could be more complicate!
|
||||
"""
|
||||
|
||||
if self.is_collision(s_start, s_goal):
|
||||
return math.inf
|
||||
|
||||
return math.hypot(s_goal[0] - s_start[0], s_goal[1] - s_start[1])
|
||||
|
||||
def is_collision(self, s_start, s_end):
|
||||
"""
|
||||
check if the line segment (s_start, s_end) is collision.
|
||||
:param s_start: start node
|
||||
:param s_end: end node
|
||||
:return: True: is collision / False: not collision
|
||||
"""
|
||||
|
||||
if s_start in self.obs or s_end in self.obs:
|
||||
return True
|
||||
|
||||
if s_start[0] != s_end[0] and s_start[1] != s_end[1]:
|
||||
if s_end[0] - s_start[0] == s_start[1] - s_end[1]:
|
||||
s1 = (min(s_start[0], s_end[0]), min(s_start[1], s_end[1]))
|
||||
s2 = (max(s_start[0], s_end[0]), max(s_start[1], s_end[1]))
|
||||
else:
|
||||
s1 = (min(s_start[0], s_end[0]), max(s_start[1], s_end[1]))
|
||||
s2 = (max(s_start[0], s_end[0]), min(s_start[1], s_end[1]))
|
||||
|
||||
if s1 in self.obs or s2 in self.obs:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
def f_value(self, s):
|
||||
"""
|
||||
f = g + h. (g: Cost to come, h: heuristic value)
|
||||
:param s: current state
|
||||
:return: f
|
||||
"""
|
||||
|
||||
return self.g[s] + self.heuristic(s)
|
||||
|
||||
def extract_path(self, PARENT):
|
||||
"""
|
||||
Extract the path based on the PARENT set.
|
||||
:return: The planning path
|
||||
"""
|
||||
|
||||
path = [self.s_goal]
|
||||
s = self.s_goal
|
||||
|
||||
while True:
|
||||
s = PARENT[s]
|
||||
path.append(s)
|
||||
|
||||
if s == self.s_start:
|
||||
break
|
||||
|
||||
return list(path)
|
||||
|
||||
def heuristic(self, s):
|
||||
"""
|
||||
Calculate heuristic.
|
||||
:param s: current node (state)
|
||||
:return: heuristic function value
|
||||
"""
|
||||
|
||||
heuristic_type = self.heuristic_type # heuristic type
|
||||
goal = self.s_goal # goal node
|
||||
|
||||
if heuristic_type == "manhattan":
|
||||
return abs(goal[0] - s[0]) + abs(goal[1] - s[1])
|
||||
else:
|
||||
return math.hypot(goal[0] - s[0], goal[1] - s[1])
|
||||
|
||||
|
||||
|
||||
class Ui_MainWindow1(object):
|
||||
def setupUi(self, MainWindow):
|
||||
MainWindow.setObjectName("MainWindow")
|
||||
MainWindow.resize(1112, 766)
|
||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.pushButton.setObjectName("pushButton")
|
||||
self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1)
|
||||
self.mdiArea = QtWidgets.QMdiArea(self.centralwidget)
|
||||
self.mdiArea.setObjectName("mdiArea")
|
||||
self.gridLayout.addWidget(self.mdiArea, 1, 0, 1, 1)
|
||||
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.pushButton_2.setObjectName("pushButton_2")
|
||||
self.gridLayout.addWidget(self.pushButton_2, 3, 0, 1, 1)
|
||||
self.label = QtWidgets.QLabel(self.centralwidget)
|
||||
self.label.setObjectName("label")
|
||||
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 23))
|
||||
self.menubar.setObjectName("menubar")
|
||||
MainWindow.setMenuBar(self.menubar)
|
||||
self.statusbar = QtWidgets.QStatusBar(MainWindow)
|
||||
self.statusbar.setObjectName("statusbar")
|
||||
MainWindow.setStatusBar(self.statusbar)
|
||||
self.retranslateUi(MainWindow)
|
||||
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||
self.pushButton.clicked.connect(lambda: self.msg())
|
||||
self.pushButton_2.clicked.connect(lambda: self.search())
|
||||
def search(self):
|
||||
s_start = (5, 5)
|
||||
s_goal = (45, 25)
|
||||
|
||||
astar = AStar(s_start, s_goal, "euclidean")
|
||||
plot = plotting.Plotting(s_start, s_goal)
|
||||
|
||||
path, visited = astar.searching()
|
||||
plot.animation(path, visited, "A*") # animation
|
||||
def msg(self):
|
||||
MainWindow = QMainWindow()
|
||||
ui = Ui_MainWindow()
|
||||
ui.setupUi(MainWindow)
|
||||
self.mdiArea.addSubWindow(MainWindow)
|
||||
MainWindow.showMaximized()
|
||||
ui.player = QMediaPlayer()
|
||||
ui.player.setVideoOutput(ui.wgt_video)
|
||||
ui.pushButton.clicked.connect(lambda: openVideoFile(ui))
|
||||
ui.player.setMedia(QMediaContent(QFileDialog.getOpenFileUrl()[0]))
|
||||
ui.pushButton_2.clicked.connect(lambda: pause(ui))
|
||||
def pause(a):
|
||||
a.player.pause()
|
||||
def openVideoFile(a):
|
||||
a.player.play()
|
||||
def retranslateUi(self, MainWindow):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
|
||||
self.pushButton.setText(_translate("MainWindow", "添加文件"))
|
||||
self.pushButton_2.setText(_translate("MainWindow", "分析路径"))
|
||||
self.label.setText(_translate("MainWindow", "路径分析界面"))
|
@ -0,0 +1,96 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'system_main.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.4
|
||||
#
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||
# run again. Do not edit this file unless you know what you are doing.
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
import sys
|
||||
import os
|
||||
from PyQt5.QtWidgets import *
|
||||
from page1 import Ui_Form1
|
||||
from page2 import Ui_MainWindow1
|
||||
|
||||
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "/../../PaddleClas-release-2.3")
|
||||
class Ui_MainWindow(object):
|
||||
def setupUi(self, MainWindow):
|
||||
MainWindow.setObjectName("MainWindow")
|
||||
MainWindow.resize(1275, 896)
|
||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.label = QtWidgets.QLabel(self.centralwidget)
|
||||
self.label.setMinimumSize(QtCore.QSize(0, 20))
|
||||
self.label.setMaximumSize(QtCore.QSize(300, 20))
|
||||
self.label.setTextFormat(QtCore.Qt.AutoText)
|
||||
self.label.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label.setObjectName("label")
|
||||
self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
|
||||
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
|
||||
self.groupBox.setSizePolicy(sizePolicy)
|
||||
self.groupBox.setMaximumSize(QtCore.QSize(600, 16777215))
|
||||
self.groupBox.setFlat(False)
|
||||
self.groupBox.setCheckable(False)
|
||||
self.groupBox.setObjectName("groupBox")
|
||||
self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox)
|
||||
self.gridLayout_2.setObjectName("gridLayout_2")
|
||||
self.pushButton = QtWidgets.QPushButton(self.groupBox)
|
||||
self.pushButton.setObjectName("pushButton")
|
||||
self.gridLayout_2.addWidget(self.pushButton, 0, 0, 1, 1)
|
||||
self.pushButton_2 = QtWidgets.QPushButton(self.groupBox)
|
||||
self.pushButton_2.setObjectName("pushButton_2")
|
||||
self.gridLayout_2.addWidget(self.pushButton_2, 1, 0, 1, 1)
|
||||
self.gridLayout.addWidget(self.groupBox, 2, 0, 2, 1)
|
||||
self.mdiArea = QtWidgets.QMdiArea(self.centralwidget)
|
||||
self.mdiArea.setObjectName("mdiArea")
|
||||
self.gridLayout.addWidget(self.mdiArea, 2, 1, 2, 1)
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 1275, 23))
|
||||
self.menubar.setObjectName("menubar")
|
||||
MainWindow.setMenuBar(self.menubar)
|
||||
self.statusbar = QtWidgets.QStatusBar(MainWindow)
|
||||
self.statusbar.setObjectName("statusbar")
|
||||
MainWindow.setStatusBar(self.statusbar)
|
||||
self.pushButton.clicked.connect(lambda: self.open1())
|
||||
self.pushButton_2.clicked.connect(lambda: self.open2())
|
||||
self.retranslateUi(MainWindow)
|
||||
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||
|
||||
def open1(self):
|
||||
MainWindow = QMainWindow()
|
||||
ui = Ui_Form1()
|
||||
ui.setupUi(MainWindow)
|
||||
self.mdiArea.addSubWindow(MainWindow)
|
||||
MainWindow.showMaximized()
|
||||
|
||||
def open2(self):
|
||||
MainWindow = QMainWindow()
|
||||
ui = Ui_MainWindow1()
|
||||
ui.setupUi(MainWindow)
|
||||
self.mdiArea.addSubWindow(MainWindow)
|
||||
MainWindow.showMaximized()
|
||||
|
||||
def retranslateUi(self, MainWindow):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
MainWindow.setWindowTitle(_translate("MainWindow", "无人机自动寻路系统"))
|
||||
self.label.setText(_translate("MainWindow", "无人机自动寻路系统(主界面)"))
|
||||
self.groupBox.setTitle(_translate("MainWindow", "菜单栏"))
|
||||
self.pushButton.setText(_translate("MainWindow", "实时画面"))
|
||||
self.pushButton_2.setText(_translate("MainWindow", "路径分析"))
|
||||
|
||||
if __name__ == '__main__':
|
||||
app = QApplication(sys.argv)
|
||||
MainWindow = QMainWindow()
|
||||
ui = Ui_MainWindow()
|
||||
ui.setupUi(MainWindow)
|
||||
MainWindow.show()
|
||||
sys.exit(app.exec_())
|
After Width: | Height: | Size: 61 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 18 KiB |
@ -0,0 +1,50 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'vedio_demo.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.4
|
||||
#
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||
# run again. Do not edit this file unless you know what you are doing.
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
from PyQt5.QtMultimediaWidgets import QVideoWidget
|
||||
|
||||
class Ui_MainWindow(object):
|
||||
def setupUi(self, MainWindow):
|
||||
MainWindow.setObjectName("MainWindow")
|
||||
MainWindow.resize(1111, 676)
|
||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.pushButton_2.setObjectName("pushButton_2")
|
||||
self.gridLayout.addWidget(self.pushButton_2, 3, 0, 1, 1)
|
||||
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
|
||||
self.pushButton.setObjectName("pushButton")
|
||||
self.gridLayout.addWidget(self.pushButton, 2, 0, 1, 1)
|
||||
self.wgt_video = QVideoWidget(self.centralwidget)
|
||||
self.wgt_video.setObjectName("widget")
|
||||
self.gridLayout.addWidget(self.wgt_video, 0, 0, 1, 1)
|
||||
self.horizontalSlider = QtWidgets.QSlider(self.centralwidget)
|
||||
self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.horizontalSlider.setObjectName("horizontalSlider")
|
||||
self.gridLayout.addWidget(self.horizontalSlider, 1, 0, 1, 1)
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 1111, 23))
|
||||
self.menubar.setObjectName("menubar")
|
||||
MainWindow.setMenuBar(self.menubar)
|
||||
self.statusbar = QtWidgets.QStatusBar(MainWindow)
|
||||
self.statusbar.setObjectName("statusbar")
|
||||
MainWindow.setStatusBar(self.statusbar)
|
||||
self.retranslateUi(MainWindow)
|
||||
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||
|
||||
def retranslateUi(self, MainWindow):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
|
||||
self.pushButton_2.setText(_translate("MainWindow", "暂停"))
|
||||
self.pushButton.setText(_translate("MainWindow", "播放"))
|