Как сделать выбор камер на PyQt5?
Всем доброго времени суток. Я хочу сделать выборку камер на PyQt5. Дела в том что у меня есть несколько камер. И мне нужно сделать выборку камер. И так у меня есть не большой код который выводить все подключенные камеры.
Вот сам код:
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
import cv2
class Mess_Window(QDialog):
def __init__(self, camer):
super().__init__()
self.setWindowTitle("AS technology")
self.setFixedSize(300, 200)
self.camera = camer
self.wid_vh = QWidget(self)
self.wid_vh.resize(300, 200)
self.wid_vh.setStyleSheet("background-color: rgb(85, 170, 175);")
self.label_1 = QLabel("Выберети камеру", self.wid_vh)
font = QFont()
font.setPointSize(15)
self.label_1.setFont(font)
self.label_1.move(70, 10)
self.chek_1 = QLabel("1", self.wid_vh)
self.chek_2 = QLabel("2", self.wid_vh)
self.chek_3 = QLabel("3", self.wid_vh)
self.chek_4 = QLabel("4", self.wid_vh)
self.chek_5 = QLabel("5", self.wid_vh)
self.chek_6 = QLabel("6", self.wid_vh)
self.chek_7 = QLabel("7", self.wid_vh)
self.chek_8 = QLabel("8", self.wid_vh)
self.chek_1.move(80, 50)
self.chek_2.move(80, 90)
self.chek_3.move(80, 130)
self.chek_4.move(80, 170)
self.chek_5.move(170, 50)
self.chek_6.move(170, 90)
self.chek_7.move(170, 130)
self.chek_8.move(170, 170)
self.chek_1.hide()
self.chek_2.hide()
self.chek_3.hide()
self.chek_4.hide()
self.chek_5.hide()
self.chek_6.hide()
self.chek_7.hide()
self.chek_8.hide()
index = 0
camera_indexes = []
max_numbers_of_cameras_to_check = 10
while max_numbers_of_cameras_to_check > 0:
capture = cv2.VideoCapture(index)
if capture.read()[0]:
camera_indexes.append(index)
if len(camera_indexes) == 1:
self.chek_1.show()
elif len(camera_indexes) == 2:
self.chek_1.show()
self.chek_2.show()
elif len(camera_indexes) == 3:
self.chek_1.show()
self.chek_2.show()
self.chek_3.show()
elif len(camera_indexes) == 4:
self.chek_1.show()
self.chek_2.show()
self.chek_3.show()
self.chek_4.show()
elif len(camera_indexes) == 5:
self.chek_1.show()
self.chek_2.show()
self.chek_3.show()
self.chek_4.show()
self.chek_5.show()
elif len(camera_indexes) == 6:
self.chek_1.show()
self.chek_2.show()
self.chek_3.show()
self.chek_4.show()
self.chek_5.show()
self.chek_6.show()
elif len(camera_indexes) == 7:
self.chek_1.show()
self.chek_2.show()
self.chek_3.show()
self.chek_4.show()
self.chek_5.show()
self.chek_6.show()
self.chek_7.show()
elif len(camera_indexes) == 8:
self.chek_1.show()
self.chek_2.show()
self.chek_3.show()
self.chek_4.show()
self.chek_5.show()
self.chek_6.show()
self.chek_7.show()
self.chek_8.show()
capture.release()
index += 1
max_numbers_of_cameras_to_check -= 1
self.wid_vh.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
ui = Mess_Window(1)
ui.show()
sys.exit(app.exec_())
И так немного по коду. Тут проверяется какие камеры подключены и выводить их индекс. И так что мне конкретно нужно. Мне нужно сделать выбор. То есть если у меня подключено 4 камеры и я хочу использовать 3 камеру, то я просто указываю что 3 камера будет использоваться.
Вот не большое представление:
И так мне нужно что бы при клике правой кнопки мыши выходила окошка как на картинке!!!. и после выбора мне нужно информация что она стало основной то есть вывести в консоль надпись что такое камера стало основной или же удалена из основной.
Ответы (1 шт):
import sys
import cv2
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Main(QDialog):
def __init__(self):
super().__init__()
self.setWindowTitle("AS technology")
layout = QHBoxLayout()
self.choice_questions = QTreeWidget(self)
self.choice_questions.setFixedSize(300, 200)
self.choice_questions.setHeaderLabels(["№", "Name Camer", "Статус"])
item_1 = QTreeWidgetItem(["1", "Камера 1"])
item_2 = QTreeWidgetItem(["2", "Камера 2"])
item_3 = QTreeWidgetItem(["3", "Камера 3"])
item_4 = QTreeWidgetItem(["4", "Камера 4"])
item_5 = QTreeWidgetItem(["5", "Камера 5"])
item_6 = QTreeWidgetItem(["6", "Камера 6"])
item_7 = QTreeWidgetItem(["7", "Камера 7"])
item_8 = QTreeWidgetItem(["8", "Камера 8"])
index = 0
camera_indexes = []
max_numbers_of_cameras_to_check = 10
while max_numbers_of_cameras_to_check > 0:
capture = cv2.VideoCapture(index)
if capture.read()[0]:
camera_indexes.append(index)
if len(camera_indexes) == 1:
self.choice_questions.addTopLevelItem(item_1)
elif len(camera_indexes) == 2:
self.choice_questions.addTopLevelItem(item_1)
self.choice_questions.addTopLevelItem(item_2)
elif len(camera_indexes) == 3:
self.choice_questions.addTopLevelItem(item_1)
self.choice_questions.addTopLevelItem(item_2)
self.choice_questions.addTopLevelItem(item_3)
elif len(camera_indexes) == 4:
self.choice_questions.addTopLevelItem(item_1)
self.choice_questions.addTopLevelItem(item_2)
self.choice_questions.addTopLevelItem(item_3)
self.choice_questions.addTopLevelItem(item_4)
elif len(camera_indexes) == 5:
self.choice_questions.addTopLevelItem(item_1)
self.choice_questions.addTopLevelItem(item_2)
self.choice_questions.addTopLevelItem(item_3)
self.choice_questions.addTopLevelItem(item_4)
self.choice_questions.addTopLevelItem(item_5)
elif len(camera_indexes) == 6:
self.choice_questions.addTopLevelItem(item_1)
self.choice_questions.addTopLevelItem(item_2)
self.choice_questions.addTopLevelItem(item_3)
self.choice_questions.addTopLevelItem(item_4)
self.choice_questions.addTopLevelItem(item_5)
self.choice_questions.addTopLevelItem(item_6)
elif len(camera_indexes) == 7:
self.choice_questions.addTopLevelItem(item_1)
self.choice_questions.addTopLevelItem(item_2)
self.choice_questions.addTopLevelItem(item_3)
self.choice_questions.addTopLevelItem(item_4)
self.choice_questions.addTopLevelItem(item_5)
self.choice_questions.addTopLevelItem(item_6)
self.choice_questions.addTopLevelItem(item_7)
elif len(camera_indexes) == 8:
self.choice_questions.addTopLevelItem(item_1)
self.choice_questions.addTopLevelItem(item_2)
self.choice_questions.addTopLevelItem(item_3)
self.choice_questions.addTopLevelItem(item_4)
self.choice_questions.addTopLevelItem(item_5)
self.choice_questions.addTopLevelItem(item_6)
self.choice_questions.addTopLevelItem(item_7)
self.choice_questions.addTopLevelItem(item_8)
capture.release()
index += 1
max_numbers_of_cameras_to_check -= 1
self.choice_questions.setFont(QFont('Times New Roman', 13))
self.choice_questions.setContextMenuPolicy(Qt.CustomContextMenu)
self.choice_questions.customContextMenuRequested.connect(
self.context)
layout.addWidget(self.choice_questions)
self.setLayout(layout)
def context(self, point):
menu = QMenu()
if self.choice_questions.itemAt(point):
edit_question_1 = QAction('Выход', menu)
edit_question_2 = QAction('Вход', menu)
edit_question_1.triggered.connect(lambda:
self.choice_questions.itemAt(point).setText(2,
"Выход"))
edit_question_2.triggered.connect(lambda:
self.choice_questions.itemAt(point).setText(2,
"Вход"))
menu.addAction(edit_question_1)
menu.addAction(edit_question_2)
else:
pass
menu.exec(self.choice_questions.mapToGlobal(point))
if __name__ == "__main__":
app = QApplication(sys.argv)
main = Main()
main.show()
sys.exit(app.exec_())
