Не получается подключить слайдер с регулировкой прозрачности отдельного окна

Рейтинг: 1Ответов: 1Опубликовано: 02.07.2023

Есть плеер с отдельным окном для воспроизведения видео и потока с камеры.
Нужно добавить слайдер для регулировки прозрачности отдельного окна.

Video.py:

import sys
from ctypes import resize
from tkinter import *
import cv2
import numpy as np
import tkinter.ttk as ttk
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import *
from MainWindow import Ui_MainWindow


def hhmmss(ms):
    h, r = divmod(ms, 36000)
    m, r = divmod(r, 60000)
    s, _ = divmod(r, 1000)
    return ("%d:%02d:%02d" % (h,m,s)) if h else ("%d:%02d" % (m,s))


class ViewerWindow(QMainWindow):
    state = pyqtSignal(bool)

    def closeEvent(self, e):
        self.state.emit(False)


class PlaylistModel(QAbstractListModel):
    def __init__(self, playlist, *args, **kwargs):
        super(PlaylistModel, self).__init__(*args, **kwargs)
        self.playlist = playlist

    def data(self, index, role):
        if role == Qt.DisplayRole:
            media = self.playlist.media(index.row())
            return media.canonicalUrl().fileName()

    def rowCount(self, index):
        return self.playlist.mediaCount()


class ThreadOpenCV(QThread):
    changePixmap = pyqtSignal(QImage)

    def __init__(self, parent=None):                                
        super().__init__()
        self.width = parent.width()                                 
        self.height = parent.height()                               
        
    def run(self):
        cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)  
        cap.set(cv2.CAP_PROP_FPS, 24)
        
        while True:
            ret, frame = cap.read()
            if ret:
                
                frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                frame = cv2.resize(frame, (1680, 480)) #Разреш камеры
                frame_expanded = np.expand_dims(frame_rgb, axis=0)  
                rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

                h, w, ch = rgbImage.shape
                bytesPerLine = ch * w
                convertToQtFormat = QImage(
                    rgbImage.data, w, h, bytesPerLine, QImage.Format_RGB888)
                    
                # p = convertToQtFormat.scaled(1280, 960, Qt.KeepAspectRatio) 

                p = convertToQtFormat.scaled(self.width, self.height, Qt.KeepAspectRatio)

                
                self.changePixmap.emit(p)

                if cv2.waitKey(1) == ord('q'):
                    break
            
            self.msleep(20)                     
            cv2.destroyAllWindows()
            

class WidgetForCv2(QtWidgets.QMainWindow,):
      
    def __init__(self):
        super().__init__()

        self.resize(1680, 340,)                                                  
        self.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        self.centralWidget = QWidget()  
        self.setCentralWidget(self.centralWidget)
        self.setWindowOpacity(0.6) 

        self.setWindowFlags(self.windowFlags() | Qt.WindowStaysOnTopHint) 

        self.label_video = QLabel(self, alignment = Qt.AlignCenter)             
        self.label_video.setMinimumSize(QSize(100, 100))                        
        layout = QVBoxLayout(self.centralWidget)
        layout.addWidget(self.label_video)

        self.thread = ThreadOpenCV(self)                                      

        
        self.thread.changePixmap.connect(self.setImage)
        
        
    def setImage(self, image):
        self.label_video.setPixmap(QtGui.QPixmap.fromImage(image))
        
    def resizeEvent(self, event):
        self.thread.width = self.width()
        self.thread.height = self.height()
      


class MainWindow(QMainWindow, Ui_MainWindow):
    
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setupUi(self)

        self.player = QMediaPlayer()

        self.player.error.connect(self.erroralert)
        self.player.play()

        # Настроить плейлист.
        self.playlist = QMediaPlaylist()
        self.player.setPlaylist(self.playlist)

        # Добавить просмотрщик для воспроизведения видео, отдельное плавающее окно

        self.viewer = ViewerWindow(self)
        self.viewer.resize(1024, 768,)
        self.viewer.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        self.viewer.setWindowFlags(self.viewer.windowFlags() | Qt.WindowStaysOnTopHint)
        self.viewer.setWindowOpacity(0.6)
        
                   

        videoWidget = QVideoWidget()
        self.viewer.setCentralWidget(videoWidget)
        self.player.setVideoOutput(videoWidget)

        self.playButton.pressed.connect(self.player.play)
        self.stopButton.pressed.connect(self.player.stop)
      
        self.viewButton.toggled.connect(self.toggle_viewer)
        self.viewer.state.connect(self.viewButton.setChecked)

        self.model = PlaylistModel(self.playlist)
        self.playlistView.setModel(self.model)
        self.playlist.currentIndexChanged.connect(self.playlist_position_changed)
        selection_model = self.playlistView.selectionModel()
        selection_model.selectionChanged.connect(self.playlist_selection_changed)

        self.player.durationChanged.connect(self.update_duration)
        self.player.positionChanged.connect(self.update_position)
        self.timeSlider.valueChanged.connect(self.player.setPosition)

        self.open_file_action.triggered.connect(self.open_file)

        self.setAcceptDrops(True)
        
        self.widgetForCv2 = WidgetForCv2()

    def dragEnterEvent(self, e):
        if e.mimeData().hasUrls():
            e.acceptProposedAction()

    def dropEvent(self, e):
        for url in e.mimeData().urls():
            self.playlist.addMedia(
                QMediaContent(url)
            )
        self.model.layoutChanged.emit()

        # Если не играет, ищу сначала из недавно добавленных + играть.
        if self.player.state() != QMediaPlayer.PlayingState:
            i = self.playlist.mediaCount() - len(e.mimeData().urls())
            self.playlist.setCurrentIndex(i)
            self.player.play()

    def open_file(self):
        path, _ = QFileDialog.getOpenFileName(
            self, 
            "Open file", 
            "", 
            "mp4 Video (*.mp4);;mp3 Audio (*.mp3);;Movie files (*.mov);;avi Video (*.avi)")

        if path:
            self.playlist.addMedia(
                QMediaContent(
                    QUrl.fromLocalFile(path)
                )
            )

        self.model.layoutChanged.emit()

    

    def update_duration(self, mc):
        self.timeSlider.setMaximum(self.player.duration())
        duration = self.player.duration()

        if duration >= 0:
            self.totalTimeLabel.setText(hhmmss(duration))

    def update_position(self, *args):
        position = self.player.position()
        if position >= 0:
            self.currentTimeLabel.setText(hhmmss(position))

        self.timeSlider.blockSignals(True)
        self.timeSlider.setValue(position)
        self.timeSlider.blockSignals(False)

    def playlist_selection_changed(self, ix):
        # Мы получаем QItemSelection от selectionChanged.
        i = ix.indexes()[0].row()
        self.playlist.setCurrentIndex(i)

    def playlist_position_changed(self, i):
        if i > -1:
            ix = self.model.index(i)
            self.playlistView.setCurrentIndex(ix)

    def toggle_viewer(self, state):
        if state:
            if self.player.state():        
                self.viewer.show()
            else:                          
                self.widgetForCv2.thread.start()                  
                QTimer.singleShot(300, self.widgetForCv2.show)           
        else:
            self.viewer.hide()
            self.widgetForCv2.hide()                         

    def erroralert(self, *args):
        print(args)


if __name__ == '__main__':
    import sys
    
    app = QtWidgets.QApplication(sys.argv)
    app.setApplicationName("Keyboard")
    app.setStyle("Fusion")

    palette = QPalette()
    palette.setColor(QPalette.Window, QColor(53, 53, 53))
    palette.setColor(QPalette.WindowText, Qt.white)
    palette.setColor(QPalette.Base, QColor(25, 25, 25))
    palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
    palette.setColor(QPalette.ToolTipBase, Qt.white)
    palette.setColor(QPalette.ToolTipText, Qt.white)
    palette.setColor(QPalette.Text, Qt.white)
    palette.setColor(QPalette.Button, QColor(53, 53, 53))
    palette.setColor(QPalette.ButtonText, Qt.white)
    palette.setColor(QPalette.BrightText, Qt.red)
    palette.setColor(QPalette.Link, QColor(42, 130, 218))
    palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
    palette.setColor(QPalette.HighlightedText, Qt.black)
    app.setPalette(palette)
    app.setStyleSheet(
        "QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }")

    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

MainWindow.py преобразованный из ".ui".
Параметр "self.OpacitySlider" отвечает за слайдер на главном окне, хотелось подключить его к отдельному окну, но можно и другие варианты.

MainWindow.py

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(390, 382)
        MainWindow.setMaximumSize(QtCore.QSize(395, 384))
        MainWindow.setFixedSize(QtCore.QSize(395, 384))
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(390)
        sizePolicy.setVerticalStretch(382)
        sizePolicy.setHeightForWidth(self.centralWidget.sizePolicy().hasHeightForWidth())
        self.centralWidget.setSizePolicy(sizePolicy)
        self.centralWidget.setObjectName("centralWidget")
        self.playlistView = QtWidgets.QListView(self.centralWidget)
        self.playlistView.setEnabled(True)
        self.playlistView.setGeometry(QtCore.QRect(20, 0, 351, 252))
        self.playlistView.setMaximumSize(QtCore.QSize(16777210, 16777210))
        self.playlistView.setAcceptDrops(True)
        self.playlistView.setProperty("showDropIndicator", True)
        self.playlistView.setDragDropMode(QtWidgets.QAbstractItemView.DropOnly)
        self.playlistView.setDefaultDropAction(QtCore.Qt.CopyAction)
        self.playlistView.setAlternatingRowColors(True)
        self.playlistView.setUniformItemSizes(True)
        self.playlistView.setObjectName("playlistView")
        self.OpacitySlider = QtWidgets.QSlider(self.centralWidget)
        self.OpacitySlider.setGeometry(QtCore.QRect(10, 280, 22, 61))
        self.OpacitySlider.setMinimumSize(QtCore.QSize(22, 0))
        self.OpacitySlider.setStyleSheet("border-bottom-color: rgb(255, 255, 127);\n"
"gridline-color: rgb(85, 170, 255);\n"
"selection-color: rgb(255, 158, 158);")
        self.OpacitySlider.setOrientation(QtCore.Qt.Vertical)
        self.OpacitySlider.setObjectName("OpacitySlider")
        self.timeSlider = QtWidgets.QSlider(self.centralWidget)
        self.timeSlider.setGeometry(QtCore.QRect(60, 270, 281, 22))
        self.timeSlider.setOrientation(QtCore.Qt.Horizontal)
        self.timeSlider.setObjectName("timeSlider")
        self.currentTimeLabel = QtWidgets.QLabel(self.centralWidget)
        self.currentTimeLabel.setGeometry(QtCore.QRect(-30, 270, 80, 16))
        self.currentTimeLabel.setMinimumSize(QtCore.QSize(80, 0))
        self.currentTimeLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.currentTimeLabel.setObjectName("currentTimeLabel")
        self.totalTimeLabel = QtWidgets.QLabel(self.centralWidget)
        self.totalTimeLabel.setGeometry(QtCore.QRect(350, 270, 80, 16))
        self.totalTimeLabel.setMinimumSize(QtCore.QSize(80, 0))
        self.totalTimeLabel.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
        self.totalTimeLabel.setObjectName("totalTimeLabel")
        self.volumeSlider = QtWidgets.QSlider(self.centralWidget)
        self.volumeSlider.setGeometry(QtCore.QRect(283, 300, 101, 22))
        self.volumeSlider.setMaximum(100)
        self.volumeSlider.setProperty("value", 100)
        self.volumeSlider.setOrientation(QtCore.Qt.Horizontal)
        self.volumeSlider.setObjectName("volumeSlider")
        self.label = QtWidgets.QLabel(self.centralWidget)
        self.label.setGeometry(QtCore.QRect(250, 301, 21, 22))
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("images\speaker-volume.png"))
        self.label.setObjectName("label")
        self.pauseButton = QtWidgets.QPushButton(self.centralWidget)
        self.pauseButton.setGeometry(QtCore.QRect(109, 301, 28, 24))
        self.pauseButton.setText("")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("images/control-pause.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.pauseButton.setIcon(icon)
        self.pauseButton.setObjectName("pauseButton")
        self.playButton = QtWidgets.QPushButton(self.centralWidget)
        self.playButton.setGeometry(QtCore.QRect(75, 301, 28, 24))
        self.playButton.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("images/control.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.playButton.setIcon(icon1)
        self.playButton.setObjectName("playButton")
        self.previousButton = QtWidgets.QPushButton(self.centralWidget)
        self.previousButton.setGeometry(QtCore.QRect(41, 301, 28, 24))
        self.previousButton.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("images/control-skip-180.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.previousButton.setIcon(icon2)
        self.previousButton.setObjectName("previousButton")
        self.viewButton = QtWidgets.QPushButton(self.centralWidget)
        self.viewButton.setGeometry(QtCore.QRect(211, 301, 28, 24))
        self.viewButton.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap("images/application-image.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.viewButton.setIcon(icon3)
        self.viewButton.setCheckable(True)
        self.viewButton.setObjectName("viewButton")
        self.stopButton = QtWidgets.QPushButton(self.centralWidget)
        self.stopButton.setGeometry(QtCore.QRect(143, 301, 28, 24))
        self.stopButton.setText("")
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap("images/control-stop-square.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.stopButton.setIcon(icon4)
        self.stopButton.setObjectName("stopButton")
        self.nextButton = QtWidgets.QPushButton(self.centralWidget)
        self.nextButton.setGeometry(QtCore.QRect(177, 301, 28, 24))
        self.nextButton.setText("")
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap("images/control-skip.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.nextButton.setIcon(icon5)
        self.nextButton.setObjectName("nextButton")
        MainWindow.setCentralWidget(self.centralWidget)
        self.menuBar = QtWidgets.QMenuBar(MainWindow)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 390, 21))
        self.menuBar.setObjectName("menuBar")
        self.menuFIle = QtWidgets.QMenu(self.menuBar)
        self.menuFIle.setObjectName("menuFIle")
        MainWindow.setMenuBar(self.menuBar)
        self.statusBar = QtWidgets.QStatusBar(MainWindow)
        self.statusBar.setObjectName("statusBar")
        MainWindow.setStatusBar(self.statusBar)
        self.open_file_action = QtWidgets.QAction(MainWindow)
        self.open_file_action.setObjectName("open_file_action")
        self.menuFIle.addAction(self.open_file_action)
        self.menuBar.addAction(self.menuFIle.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Failamp"))
        self.currentTimeLabel.setText(_translate("MainWindow", "0:00"))
        self.totalTimeLabel.setText(_translate("MainWindow", "0:00"))
        self.menuFIle.setTitle(_translate("MainWindow", "FIle"))
        self.open_file_action.setText(_translate("MainWindow", "Open file..."))

введите сюда описание изображения

Ответы

▲ 1Принят

Я не проверял, что у вас написано в коде, а просто вставил пару строк, который, наверное, помогут вам реализовать задумку:

...

# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
        self.OpacitySlider.setRange(0, 255)
        self.OpacitySlider.setSingleStep(5)
        self.OpacitySlider.valueChanged[int].connect(self.change_value)
        self.OpacitySlider.setValue(150)

    def change_value(self, value):
        self.widgetForCv2.setWindowOpacity(float(value / 255)) 
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...

void QAbstractSlider::valueChanged(int value)

Этот сигнал испускается, когда значение ползунка изменилось.


import sys
# ??? from ctypes import resize
# ??? from tkinter import *
import cv2
import numpy as np
# ??? import tkinter.ttk as ttk
from PyQt5 import QtCore, QtGui, QtWidgets, QtMultimedia
from PyQt5.Qt import *
from PyQt5.QtMultimediaWidgets import *

#from MainWindow import Ui_MainWindow
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(390, 382)
        MainWindow.setMaximumSize(QtCore.QSize(395, 384))
        MainWindow.setFixedSize(QtCore.QSize(395, 384))
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(390)
        sizePolicy.setVerticalStretch(382)
        sizePolicy.setHeightForWidth(self.centralWidget.sizePolicy().hasHeightForWidth())
        self.centralWidget.setSizePolicy(sizePolicy)
        self.centralWidget.setObjectName("centralWidget")
        self.playlistView = QtWidgets.QListView(self.centralWidget)
        self.playlistView.setEnabled(True)
        self.playlistView.setGeometry(QtCore.QRect(20, 0, 351, 252))
        self.playlistView.setMaximumSize(QtCore.QSize(16777210, 16777210))
        self.playlistView.setAcceptDrops(True)
        self.playlistView.setProperty("showDropIndicator", True)
        self.playlistView.setDragDropMode(QtWidgets.QAbstractItemView.DropOnly)
        self.playlistView.setDefaultDropAction(QtCore.Qt.CopyAction)
        self.playlistView.setAlternatingRowColors(True)
        self.playlistView.setUniformItemSizes(True)
        self.playlistView.setObjectName("playlistView")
        self.OpacitySlider = QtWidgets.QSlider(self.centralWidget)
        self.OpacitySlider.setGeometry(QtCore.QRect(10, 280, 22, 61))
        self.OpacitySlider.setMinimumSize(QtCore.QSize(22, 0))
        self.OpacitySlider.setStyleSheet("border-bottom-color: rgb(255, 255, 127);\n"
"gridline-color: rgb(85, 170, 255);\n"

"background-color: rgb(222, 0, 0);\n"                              # +++ убрать

"selection-color: rgb(255, 158, 158);")
        self.OpacitySlider.setOrientation(QtCore.Qt.Vertical)
        self.OpacitySlider.setObjectName("OpacitySlider")
        self.timeSlider = QtWidgets.QSlider(self.centralWidget)
        self.timeSlider.setGeometry(QtCore.QRect(60, 270, 281, 22))
        self.timeSlider.setOrientation(QtCore.Qt.Horizontal)
        self.timeSlider.setObjectName("timeSlider")
        self.currentTimeLabel = QtWidgets.QLabel(self.centralWidget)
        self.currentTimeLabel.setGeometry(QtCore.QRect(-30, 270, 80, 16))
        self.currentTimeLabel.setMinimumSize(QtCore.QSize(80, 0))
        self.currentTimeLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.currentTimeLabel.setObjectName("currentTimeLabel")
        self.totalTimeLabel = QtWidgets.QLabel(self.centralWidget)
        self.totalTimeLabel.setGeometry(QtCore.QRect(350, 270, 80, 16))
        self.totalTimeLabel.setMinimumSize(QtCore.QSize(80, 0))
        self.totalTimeLabel.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
        self.totalTimeLabel.setObjectName("totalTimeLabel")
        self.volumeSlider = QtWidgets.QSlider(self.centralWidget)
        self.volumeSlider.setGeometry(QtCore.QRect(283, 300, 101, 22))
        self.volumeSlider.setMaximum(100)
        self.volumeSlider.setProperty("value", 100)
        self.volumeSlider.setOrientation(QtCore.Qt.Horizontal)
        self.volumeSlider.setObjectName("volumeSlider")
        self.label = QtWidgets.QLabel(self.centralWidget)
        self.label.setGeometry(QtCore.QRect(250, 301, 21, 22))
        self.label.setText("")
        self.label.setPixmap(QtGui.QPixmap("im.png"))
        self.label.setObjectName("label")
        self.pauseButton = QtWidgets.QPushButton(self.centralWidget)
        self.pauseButton.setGeometry(QtCore.QRect(109, 301, 28, 24))
        self.pauseButton.setText("")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("Ok.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.pauseButton.setIcon(icon)
        self.pauseButton.setObjectName("pauseButton")
        self.playButton = QtWidgets.QPushButton(self.centralWidget)
        self.playButton.setGeometry(QtCore.QRect(75, 301, 28, 24))
        self.playButton.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("ball.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.playButton.setIcon(icon1)
        self.playButton.setObjectName("playButton")
        self.previousButton = QtWidgets.QPushButton(self.centralWidget)
        self.previousButton.setGeometry(QtCore.QRect(41, 301, 28, 24))
        self.previousButton.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("Ok.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.previousButton.setIcon(icon2)
        self.previousButton.setObjectName("previousButton")
        self.viewButton = QtWidgets.QPushButton(self.centralWidget)
        self.viewButton.setGeometry(QtCore.QRect(211, 301, 28, 24))
        self.viewButton.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap("ball.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.viewButton.setIcon(icon3)
        self.viewButton.setCheckable(True)
        self.viewButton.setObjectName("viewButton")
        self.stopButton = QtWidgets.QPushButton(self.centralWidget)
        self.stopButton.setGeometry(QtCore.QRect(143, 301, 28, 24))
        self.stopButton.setText("")
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap("Ok.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.stopButton.setIcon(icon4)
        self.stopButton.setObjectName("stopButton")
        self.nextButton = QtWidgets.QPushButton(self.centralWidget)
        self.nextButton.setGeometry(QtCore.QRect(177, 301, 28, 24))
        self.nextButton.setText("")
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap("ball.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.nextButton.setIcon(icon5)
        self.nextButton.setObjectName("nextButton")
        MainWindow.setCentralWidget(self.centralWidget)
        self.menuBar = QtWidgets.QMenuBar(MainWindow)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 390, 21))
        self.menuBar.setObjectName("menuBar")
        self.menuFIle = QtWidgets.QMenu(self.menuBar)
        self.menuFIle.setObjectName("menuFIle")
        MainWindow.setMenuBar(self.menuBar)
        self.statusBar = QtWidgets.QStatusBar(MainWindow)
        self.statusBar.setObjectName("statusBar")
        MainWindow.setStatusBar(self.statusBar)
        self.open_file_action = QtWidgets.QAction(MainWindow)
        self.open_file_action.setObjectName("open_file_action")
        self.menuFIle.addAction(self.open_file_action)
        self.menuBar.addAction(self.menuFIle.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Failamp"))
        self.currentTimeLabel.setText(_translate("MainWindow", "0:00"))
        self.totalTimeLabel.setText(_translate("MainWindow", "0:00"))
        self.menuFIle.setTitle(_translate("MainWindow", "FIle"))
        self.open_file_action.setText(_translate("MainWindow", "Open file..."))
        
   
    
def hhmmss(ms):
    h, r = divmod(ms, 36000)
    m, r = divmod(r, 60000)
    s, _ = divmod(r, 1000)
    return ("%d:%02d:%02d" % (h, m, s)) if h else ("%d:%02d" % (m, s))
    
    
class ViewerWindow(QMainWindow):
    state = pyqtSignal(bool)
    
    def closeEvent(self, e):
        self.state.emit(False)
    
    
class PlaylistModel(QAbstractListModel):
    def __init__(self, playlist, *args, **kwargs):
        super(PlaylistModel, self).__init__(*args, **kwargs)
        self.playlist = playlist
    
    def data(self, index, role):
        if role == Qt.DisplayRole:
            media = self.playlist.media(index.row())
            return media.canonicalUrl().fileName()
    
    def rowCount(self, index):
        return self.playlist.mediaCount()
    
    
class ThreadOpenCV(QThread):
    changePixmap = pyqtSignal(QImage)
    
    def __init__(self, parent=None):                                
        super().__init__()
        self.width = parent.width()                                 
        self.height = parent.height()                               
            
    def run(self):
        cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)  
        cap.set(cv2.CAP_PROP_FPS, 24)
            
        while True:
            ret, frame = cap.read()
            if ret:
                    
                frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                frame = cv2.resize(frame, (1680, 480)) #Разреш камеры
                frame_expanded = np.expand_dims(frame_rgb, axis=0)  
                rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    
                h, w, ch = rgbImage.shape
                bytesPerLine = ch * w
                convertToQtFormat = QImage(
                    rgbImage.data, w, h, bytesPerLine, QImage.Format_RGB888)
                        
                # p = convertToQtFormat.scaled(1280, 960, Qt.KeepAspectRatio) 
                p = convertToQtFormat.scaled(self.width, self.height, Qt.KeepAspectRatio)
                    
                self.changePixmap.emit(p)
    
                if cv2.waitKey(1) == ord('q'):
                    break
                
            self.msleep(20)                     
            cv2.destroyAllWindows()
                
    
class WidgetForCv2(QtWidgets.QMainWindow,):
    def __init__(self):
        super().__init__()
    
        self.resize(1680, 340,)                                                  
        self.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        self.centralWidget = QWidget()  
        self.setCentralWidget(self.centralWidget)
        self.setWindowOpacity(0.6) 
    
        self.setWindowFlags(self.windowFlags() | Qt.WindowStaysOnTopHint) 
    
        self.label_video = QLabel(self, alignment = Qt.AlignCenter)             
        self.label_video.setMinimumSize(QSize(100, 100))                        
        layout = QVBoxLayout(self.centralWidget)
        layout.addWidget(self.label_video)
    
        self.thread = ThreadOpenCV(self)                                      
        self.thread.changePixmap.connect(self.setImage)
            
    def setImage(self, image):
        self.label_video.setPixmap(QtGui.QPixmap.fromImage(image))
            
    def resizeEvent(self, event):
        self.thread.width = self.width()
        self.thread.height = self.height()
          
    
    
class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setupUi(self)
    
        self.player = QMediaPlayer()
    
        self.player.error.connect(self.erroralert)
        self.player.play()
    
        # Настроить плейлист.
        self.playlist = QMediaPlaylist()
        self.player.setPlaylist(self.playlist)
    
        # Добавить просмотрщик для воспроизведения видео, отдельное плавающее окно
    
        self.viewer = ViewerWindow(self)
        self.viewer.resize(1024, 768,)
        self.viewer.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        self.viewer.setWindowFlags(self.viewer.windowFlags() | Qt.WindowStaysOnTopHint)
        self.viewer.setWindowOpacity(0.6)
    
        videoWidget = QVideoWidget()
        self.viewer.setCentralWidget(videoWidget)
        self.player.setVideoOutput(videoWidget)
    
        self.playButton.pressed.connect(self.player.play)
        self.stopButton.pressed.connect(self.player.stop)
          
        self.viewButton.toggled.connect(self.toggle_viewer)
        self.viewer.state.connect(self.viewButton.setChecked)
    
        self.model = PlaylistModel(self.playlist)
        self.playlistView.setModel(self.model)
        self.playlist.currentIndexChanged.connect(self.playlist_position_changed)
        selection_model = self.playlistView.selectionModel()
        selection_model.selectionChanged.connect(self.playlist_selection_changed)
    
        self.player.durationChanged.connect(self.update_duration)
        self.player.positionChanged.connect(self.update_position)
        self.timeSlider.valueChanged.connect(self.player.setPosition)
    
        self.open_file_action.triggered.connect(self.open_file)
    
        self.setAcceptDrops(True)
            
        self.widgetForCv2 = WidgetForCv2()
        
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
        self.OpacitySlider.setRange(0, 255)
        self.OpacitySlider.setSingleStep(5)
        self.OpacitySlider.valueChanged[int].connect(self.change_value)
        self.OpacitySlider.setValue(150)

    def change_value(self, value):
        self.widgetForCv2.setWindowOpacity(float(value / 255)) 
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
    def dragEnterEvent(self, e):
        if e.mimeData().hasUrls():
                e.acceptProposedAction()
    
    def dropEvent(self, e):
        for url in e.mimeData().urls():
            self.playlist.addMedia(
                QMediaContent(url)
            )
        self.model.layoutChanged.emit()
    
        # Если не играет, ищу сначала из недавно добавленных + играть.
        if self.player.state() != QMediaPlayer.PlayingState:
            i = self.playlist.mediaCount() - len(e.mimeData().urls())
            self.playlist.setCurrentIndex(i)
            self.player.play()
    
    def open_file(self):
        path, _ = QFileDialog.getOpenFileName(
            self, 
            "Open file", 
            "", 
            "mp4 Video (*.mp4);;mp3 Audio (*.mp3);;Movie files (*.mov);;avi Video (*.avi)")
    
        if path:
            self.playlist.addMedia(
                QMediaContent(
                    QUrl.fromLocalFile(path)
                )
            )
    
        self.model.layoutChanged.emit()
    
    def update_duration(self, mc):
        self.timeSlider.setMaximum(self.player.duration())
        duration = self.player.duration()
    
        if duration >= 0:
            self.totalTimeLabel.setText(hhmmss(duration))
    
    def update_position(self, *args):
        position = self.player.position()
        if position >= 0:
            self.currentTimeLabel.setText(hhmmss(position))
    
        self.timeSlider.blockSignals(True)
        self.timeSlider.setValue(position)
        self.timeSlider.blockSignals(False)
    
    def playlist_selection_changed(self, ix):
        # Мы получаем QItemSelection от selectionChanged.
        i = ix.indexes()[0].row()
        self.playlist.setCurrentIndex(i)
    
    def playlist_position_changed(self, i):
        if i > -1:
            ix = self.model.index(i)
            self.playlistView.setCurrentIndex(ix)
    
    def toggle_viewer(self, state):
        if state:
            if self.player.state():        
                self.viewer.show()
            else:                          
                self.widgetForCv2.thread.start()                  
                QTimer.singleShot(300, self.widgetForCv2.show)           
        else:
            self.viewer.hide()
            self.widgetForCv2.hide()                         
    
    def erroralert(self, *args):
        print(args)
    
    
if __name__ == '__main__':
    import sys
        
    app = QtWidgets.QApplication(sys.argv)
    app.setApplicationName("Keyboard")
    app.setStyle("Fusion")
    
    palette = QPalette()
    palette.setColor(QPalette.Window, QColor(53, 53, 53))
    palette.setColor(QPalette.WindowText, Qt.white)
    palette.setColor(QPalette.Base, QColor(25, 25, 25))
    palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
    palette.setColor(QPalette.ToolTipBase, Qt.white)
    palette.setColor(QPalette.ToolTipText, Qt.white)
    palette.setColor(QPalette.Text, Qt.white)
    palette.setColor(QPalette.Button, QColor(53, 53, 53))
    palette.setColor(QPalette.ButtonText, Qt.white)
    palette.setColor(QPalette.BrightText, Qt.red)
    palette.setColor(QPalette.Link, QColor(42, 130, 218))
    palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
    palette.setColor(QPalette.HighlightedText, Qt.black)
    app.setPalette(palette)
    app.setStyleSheet(
        "QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }")
    
    window = MainWindow()
    window.show()
    sys.exit(app.exec_()) 

введите сюда описание изображения