Размещение виджета в окне PyQt5
На окне должны располагаться две вкладки.
На каждой вкладке кнопка.
На первой вкладке возле кнопки должно отображаться видео с вебкамеры,
но окно с видео появляется на отдельном окне и видео не транслируется.
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import *
import os
import sys
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setGeometry(100, 100, 1500, 700)
self.available_cameras = QCameraInfo.availableCameras()
if not self.available_cameras:
sys.exit()
self.status = QStatusBar()
self.setStatusBar(self.status)
self.viewfinder = QCameraViewfinder()
self.viewfinder.show()
self.online_webcams = QCameraInfo.availableCameras()
if not self.online_webcams:
pass
self.exist = QCameraViewfinder()
self.exist.show()
self.setCentralWidget(self.exist)
# Вебкамера по умолчанию
Camera.get_webcam(self, i=0)
# Размещаем виджеты
self.widget1 = MyTableWidget(self)
self.widget2 = Camera(self)
main_layout = QVBoxLayout()
main_layout.addWidget(self.widget1)
main_layout.addWidget(self.widget2)
central_widget = QWidget()
central_widget.setLayout(main_layout)
self.setCentralWidget(central_widget)
self.show()
class Camera(QWidget):
def __init__(self, parent):
super(QWidget, self).__init__(parent)
def get_webcam(self, i):
self.my_webcam = QCamera(self.online_webcams[i])
self.my_webcam.setViewfinder(self.exist)
self.my_webcam.setCaptureMode(QCamera.CaptureStillImage)
self.my_webcam.error.connect(lambda: self.alert(self.my_webcam.errorString()))
self.my_webcam.start()
def alert(self, s):
"""
Ошибки
"""
err = QErrorMessage(self)
err.showMessage(s)
class MyTableWidget(QWidget):
def __init__(self, parent):
super(QWidget, self).__init__(parent)
self.layout_1 = QVBoxLayout(self)
self.layout_2 = QVBoxLayout(self)
# Инициализируем экран вкладок
self.tabs = QTabWidget()
self.tab1 = QWidget()
self.tab2 = QWidget()
self.tabs.resize(300,200)
# Добавляем вкладки
self.tabs.addTab(self.tab1,"Вкладка 1")
self.tabs.addTab(self.tab2,"Вкладка 2")
# Создаем вкладки
self.tab1.layout_1 = QVBoxLayout(self)
self.tab2.layout_2 = QVBoxLayout(self)
# Создаем кнопки
self.pushButton1 = QPushButton("Кнопка 1")
self.pushButton2 = QPushButton("Кнопка 2")
# Действие при нажатии на кнопку
self.pushButton1.clicked.connect(self.on_click_1)
self.pushButton2.clicked.connect(self.on_click_2)
# Добавляем кнопку на вкладку № 1
self.tab1.layout_1.addWidget(self.pushButton1)
self.tab1.setLayout(self.tab1.layout_1)
# Добавляем кнопку на вкладку № 2
self.tab2.layout_2.addWidget(self.pushButton2)
self.tab2.setLayout(self.tab2.layout_2)
# Добавляем вкладки
self.layout_1.addWidget(self.tabs)
self.setLayout(self.layout_1)
self.layout_2.addWidget(self.tabs)
self.setLayout(self.layout_2)
# Функция по нажатию кнопки
def on_click_1(self):
print("Нажата кнопка 1")
def on_click_2(self):
print("Нажата кнопка 2")
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setApplicationName("WebCam")
window = MainWindow()
app.exec_()
Источник: Stack Overflow на русском