2017-01-12 6 views
0

私はpyqt5でプログラムを書いています。ボタンを押すと、最初にいくつかの画像が繰り返し再生され、いくつかのビデオが切り替わります。pyqt5ビデオウィジェットがレイアウトに表示されない

from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import * 
from PyQt5.QtMultimedia import * 
from PyQt5.QtMultimediaWidgets import * 
import glob 
import argparse 

import sys 

class MainWindow(QMainWindow): 
    def __init__(self,args): 
     super(MainWindow, self).__init__() 
     self.setWindowTitle('Navon test') 
     self.setWindowFlags(Qt.FramelessWindowHint) 
     # exit option for the menu bar File menu 
     self.exit = QAction('Exit', self) 
     self.exit.setShortcut('Ctrl+q') 
     # message for the status bar if mouse is over Exit 
     self.exit.setStatusTip('Exit program') 
     # newer connect style (PySide/PyQT 4.5 and higher) 
     self.exit.triggered.connect(app.quit) 
     self.setWindowIcon(QIcon('icon.ico')) 
     self.centralwidget = CentralWidget(args) 
     self.setCentralWidget(self.centralwidget) 

    def keyPressEvent(self, QKeyEvent): 
     if QKeyEvent.key() == Qt.Key_Escape: 
      QCoreApplication.instance().quit() 
     self.centralwidget.startvid() 

class CentralWidget(QWidget): 
    def __init__(self,args): 
     super(CentralWidget, self).__init__() 
     self.layout = QVBoxLayout() 
     self.layout.setAlignment(Qt.AlignCenter) 
     self.setLayout(self.layout) 
     self.player = QMediaPlayer(None, QMediaPlayer.VideoSurface) 
     self.vw = QVideoWidget() 
     self.player.setVideoOutput(self.vw) 

    def startvid(self): 
     self.layout.addWidget(self.vw) 
     url= QUrl.fromLocalFile(glob.glob("videos/*")[0]) 
     content= QMediaContent(url) 
     self.player.setMedia(content) 
     self.player.setVideoOutput(self.vw) 
     self.player.play() 
if __name__== "__main__": 
    parser = argparse.ArgumentParser() 
    #~ parser.add_argument("-nb","--nobox",action="store_true", help="do not wait for the box connection") 
    args = parser.parse_args() 
    app = QApplication(sys.argv) 
    mainwindow = MainWindow(args) 
    #~ mainwindow.showFullScreen() 
    mainwindow.show() 


    sys.exit(app.exec_()) 

最小限のコードを貼り付けようとしました。事は、私は何も表示されないボタンを押して、私はこの1つのような例を使用してPyQt5 - Can't play video using QVideoWidgetビデオを再生するかどうかをテストすると、これらの作品は正常です。それは、レイアウトや何かにウィジェットを追加していないかのようです。どんな考えが間違っているかもしれませんか?私は私が欲しかったものを達成するためにQGraphicsViewを使用していた

答えて

0

は、ここで修正です:

from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import * 
from PyQt5.QtMultimedia import * 
from PyQt5.QtMultimediaWidgets import * 
import glob 
class MainWindow(QMainWindow): 
    def __init__(self): 
     super(MainWindow, self).__init__() 
     self.setWindowTitle('Navon test') 
     self.setWindowFlags(Qt.FramelessWindowHint) 
     # exit option for the menu bar File menu 
     self.exit = QAction('Exit', self) 
     self.exit.setShortcut('Ctrl+q') 
     # message for the status bar if mouse is over Exit 
     self.exit.setStatusTip('Exit program') 
     # newer connect style (PySide/PyQT 4.5 and higher) 
     self.exit.triggered.connect(app.quit) 
     self.setWindowIcon(QIcon('icon.ico')) 
     self.centralwidget = VideoPlayer() 
     self.setCentralWidget(self.centralwidget) 

    def keyPressEvent(self, QKeyEvent): 
     if QKeyEvent.key() == Qt.Key_Escape: 
      self.centralwidget.phaseQuit(2) 
     self.centralwidget.play() 

class VideoPlayer(QWidget): 

    def __init__(self, parent=None): 
     super(VideoPlayer, self).__init__(parent) 
     self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface) 
     self.videoItem = QGraphicsVideoItem() 
     self.videoItem.setSize(QSizeF(640, 480)) 
     scene = QGraphicsScene(self) 
     graphicsView = QGraphicsView(scene) 
     scene.addItem(self.videoItem) 
     layout = QVBoxLayout() 
     layout.addWidget(graphicsView) 
     self.setLayout(layout) 
     self.mediaPlayer.setVideoOutput(self.videoItem) 
     self.counter = 0 




    def play(self): 
     if self.mediaPlayer.state() == QMediaPlayer.PlayingState: 
      pass 
     else: 
      self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(glob.glob("videos/*")[self.counter]))) 
      self.mediaPlayer.play() 
      self.counter += 1 


if __name__ == '__main__': 
    import sys 
    app = QApplication(sys.argv) 
    player = MainWindow() 
    player.show() 
    sys.exit(app.exec_()) 
関連する問題