簡體   English   中英

QtMediaplayer 無法在無框和半透明背景 PyQt5 上工作

[英]QtMediaplayer wont work on frameless and translucent background PyQt5

我正在用 QMediaplayer 制作一個視頻播放器,但它在無框和半透明背景窗口上不起作用。我想制作一個圓角窗口,所以我需要無框和半透明窗口。 這是我的代碼:

from PyQt5.QtCore import Qt, QUrl
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtWidgets import QApplication,QMainWindow,QFrame
import sys     
class Player(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("PyQt Video Player Widget Example") 
        self.resize(600,400)
        self.frame=QFrame(self)
        self.frame.setStyleSheet('background:grey;border-radius:20px;')
        self.setCentralWidget(self.frame)
        #self.setWindowFlag(Qt.FramelessWindowHint)
        #self.setAttribute(Qt.WA_TranslucentBackground)
        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
        videoWidget = QVideoWidget(self.frame)
        videoWidget.setGeometry(10,10,580,380)
        self.resize(600,400)
        self.mediaPlayer.error.connect(self.handleError)
        self.mediaPlayer.setVideoOutput(videoWidget)
        self.mediaPlayer.setMedia(
                         QMediaContent(QUrl.fromLocalFile("C:/Users/mishra/Desktop/HiddenfilesWindow/10000000_1874628825927192_6229658593205944320_n(1).mp4")))
        self.mediaPlayer.play()
    def handleError(self):
        print("Error: " + self.mediaPlayer.errorString())
          
if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    window = Player()
    
    window.show()
    sys.exit(app.exec_())

設置半透明背景后,它只播放音頻而不播放視頻。有人知道如何解決嗎?

嘗試一下:

import sys
from PyQt5.QtCore import Qt, QUrl, QRectF
from PyQt5.QtGui import QPainterPath, QRegion
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtWidgets import QApplication, QMainWindow, QFrame, QWidget, QHBoxLayout
     

class Player(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("PyQt Video Player Widget Example") 
        self.resize(600,400)
        self.frame= QFrame(self)  
        
#        self.frame.setStyleSheet('background:grey; border-radius: 20px;')
        self.setStyleSheet("Player {background: #000;}")                   # +++
        
        self.setCentralWidget(self.frame)
#        self.setWindowFlag(Qt.FramelessWindowHint)
#        self.setAttribute(Qt.WA_TranslucentBackground)

        layout = QHBoxLayout(self.frame)                                   # +++
        videoWidget = QVideoWidget()                                       # +++
        layout.addWidget(videoWidget)                                      # +++

        
        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
#        videoWidget = QVideoWidget(self.frame)             
#        videoWidget.setGeometry(10,10,580,380)
#        self.resize(600,400)
        self.mediaPlayer.error.connect(self.handleError)
        self.mediaPlayer.setVideoOutput(videoWidget)
        self.mediaPlayer.setMedia(
            QMediaContent(QUrl.fromLocalFile("Samonastrojka.avi")))
        self.mediaPlayer.play()

# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv        
    def resizeEvent(self, event):
        path = QPainterPath()
        path.addRoundedRect(QRectF(self.rect()), 20, 20)
        reg = QRegion(path.toFillPolygon().toPolygon())
        self.setMask(reg)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        
    def handleError(self):
        print("Error: " + self.mediaPlayer.errorString())
   
   
if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Player()
    window.show()
    sys.exit(app.exec_())

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM