Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. French
  4. Affichage de l'image courrante de la vidéo dans la fénêtre d'en dessous
Forum Updated to NodeBB v4.3 + New Features

Affichage de l'image courrante de la vidéo dans la fénêtre d'en dessous

Scheduled Pinned Locked Moved Unsolved French
2 Posts 2 Posters 779 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    RockH
    wrote on last edited by
    #1

    Bonsoir,
    je suis débutant en qt et je rencontre des problème lors de la réalisation de mon interface Qt avec utilisation de mediaplayer. Je souhaite réaliser une interface qui lit une vidéo et qui affiche dans la fenêtre en dessous (sous le label image), l'image de la vidéo quand celle ci est statique.(quand on appuie sur pause ou on se déplace avec le slider de la video). J'ai déja réussi en lire la vidéo mais je suis complètement perdu pour l'affichage video. pouvez vous m'aider s'il vous plait?
    voici la capture d'écran de mon interface et mon code suit. Merci d'avance pour votre aide.
    Interface
    Fênetre (2).png

    #import pyqtgraph.examples
    #pyqtgraph.examples.run()

    from PIL import Image
    import matplotlib
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    from PyQt5.QtMultimedia import *
    from PyQt5.QtMultimediaWidgets import QVideoWidget
    from PyQt5.QtMultimediaWidgets import *
    import os,sys
    import time
    import pandas as pd
    import numpy as np
    NameOfVideo1= "Video"
    NameOfVideo2= "Frame"
    from mainwindow import * # fichier obtenu à partir QtDesigner et pyuic5
    from PyQt5 . uic import loadUiType
    import pyqtgraph as pg
    from os.path import isfile, join

    class Main ( QMainWindow , Ui_MainWindow, ) :
    def init ( self , *args, **kwargs ) :
    super ( Main , self ) . init (*args, **kwargs )
    self . setupUi ( self )
    self . fig_dict = { }

    #create mediaplayer object
    self.mediaPlayer = QMediaPlayer()
    # Partie Mediaplayer
    #create Name label
    self.label = QLabel(self)
    self.horizontalLayout_2.addWidget(self.label)
    self.TopVideoName.setText( NameOfVideo1)
    self.BottomVideoName.setText( NameOfVideo2)
    #create button for playing
    videoWidget=QVideoWidget()
    self.playButton = QPushButton()
    self.playButton.setEnabled(False)
    self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
    self.open()
    self.playButton.clicked.connect(self.play)
    #ajout image widget
    #self.horizontalLayout_2.addWidget(self.image_frame)

    	#create slider
    	self.positionSlider = QSlider(Qt.Horizontal)
    	self.positionSlider.setRange(0, 0)
    	self.positionSlider.sliderMoved.connect(self.setPosition)
    	self.errorLabel = QLabel()
    	self.errorLabel.setSizePolicy(QSizePolicy.Preferred,QSizePolicy.Maximum)
    	# Create layouts to place inside widget top
    	self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
    	self.horizontalLayout_5.addWidget(self.playButton)
    	self.horizontalLayout_5.addWidget(self.positionSlider)
    	self.horizontalLayout_3.addWidget(videoWidget)
    	self.horizontalLayout_5.addWidget(self.errorLabel)
    	self.mediaPlayer.setVideoOutput(videoWidget)
    	self.mediaPlayer.stateChanged.connect(self.mediaStateChanged)
    	self.mediaPlayer.positionChanged.connect(self.positionChanged)
    	self.mediaPlayer.durationChanged.connect(self.durationChanged)
    	self.mediaPlayer.error.connect(self.handleError)
    
        
    def open(self):
    	pathIn= 'VIDEO/'
    #load images
    	files = [f for f in os.listdir(pathIn) if isfile(join(pathIn, f))]
    	files.sort(key = lambda x: int(x[6:-4])) 
    	#for i in range(len(files)):
    	filename=pathIn + files[0]
    	self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(filename)))				
    	self.playButton.setEnabled(True)
    	directory = r'C:\Users\PC\Desktop\Interface'
    	os.chdir(directory)	
    	
    def play(self):
    	if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
    		self.mediaPlayer.pause()
    	else:
    		self.mediaPlayer.play()
    
    def mediaStateChanged(self, state):
    	if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
    		self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPause))
    	else:
    		self.playButton.setIcon(
    				self.style().standardIcon(QStyle.SP_MediaPlay))
    
    def positionChanged(self, position):
    	self.positionSlider.setValue(position)
    
    def durationChanged(self, duration):
    	self.positionSlider.setRange(0, duration)
    
    def setPosition(self, position):
    	self.mediaPlayer.setPosition(position)
    
    def handleError(self):
    	self.playButton.setEnabled(False)
    	self.errorLabel.setText("Error: " + self.mediaPlayer.errorString())
    
    	
    def updatePlot(self):
    		self.Graph2.setXRange(*self.lr.getRegion(), padding=0)
    		MinRegion,MaxRegion = (self.lr.getRegion())
    		
    		
    def updateRegion(self):
    		self.lr.setRegion(self.Graph2.getViewBox().viewRange()[0])
    

    if name == 'main' :
    import sys
    from PyQt5 import QtGui
    import numpy as np
    app = QApplication(sys.argv)
    main = Main ( )

    main . show ( ) 
    sys . exit ( app . exec_ ( ) )
    
    1 Reply Last reply
    0
    • Renaud G.R Offline
      Renaud G.R Offline
      Renaud G.
      wrote on last edited by
      #2

      Votre code est un peu illisible dans votre poste.

      J'y connais pas grand chose en python mais en C++, je vois 2 moyens de faire ça. Ces méthodes sont probablement utilisables en python également.

      1/ Faire une copie d'écran du videowidget:

      auto pix= m_ui->m_view->grab(rect);
      label->setImage(pix); // une convertion entre qpixmap qimage sera peut-être necessaire 
      

      2/ Faire un 2eme viewer video mais controllable en soft et le faire pauser au meme temps que le 1er.

      Rolisteam: RPG virtual tabletop software in Qt: www.rolisteam.org : https://github.com/Rolisteam/rolisteam
      Github: https://github.com/obiwankennedy

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved