Beispiel #1
0
class MediaPlayer(metaclass=Observable):
    class Error(Enum):
        none = QMediaPlayer.NoError
        unsupported_format = QMediaPlayer.FormatError
        access_denied = QMediaPlayer.AccessDeniedError

    closed = signal()
    playing = signal(Track)
    stopped = signal(Track)
    error_occurred = signal(Track)

    def __init__(self):
        self._media_library = create_media_library()
        self._playlist = []
        self._player = QMediaPlayer()
        self._player.stateChanged.connect(self._state_changed)
        self._player.mediaStatusChanged.connect(self._media_status_changed)

    def play(self, track):
        self._playlist.append(track)
        self._player.setMedia(self._media_library.fetch(track.filename))
        self._player.play()

    def stop(self):
        self._player.stop()

    def _media_status_changed(self, state):
        if state == QMediaPlayer.BufferedMedia:
            self._error = QMediaPlayer.NoError
            self.playing.emit(self._playlist[0])
        elif state == QMediaPlayer.InvalidMedia:
            # On windows 8, we only get an InvalidMedia status in case of error,
            # so we need to keep track of the error that occurred
            self._error = QMediaPlayer.FormatError

    @property
    def error(self):
        return MediaPlayer.Error(self._player.error() or self._error)

    def _state_changed(self, state):
        if state == QMediaPlayer.StoppedState and self.error is not MediaPlayer.Error.none:
            self.error_occurred.emit(self._playlist.pop(0), self.error)
        elif state == QMediaPlayer.StoppedState:
            self.stopped.emit(self._playlist.pop(0))

    def dispose(self):
        self._player.stop()
        # force the deletion of the player on windows because windows
        # doesn't release the handle and prevents further instanciations
        sip.delete(self._player)
        self._player = None

        self._media_library.dispose()
        self.closed.emit()
Beispiel #2
0
class MediaPlayer(metaclass=Observable):
    class Error(Enum):
        none = QMediaPlayer.NoError
        unsupported_format = QMediaPlayer.FormatError
        access_denied = QMediaPlayer.AccessDeniedError

    closed = signal()
    playing = signal(Track)
    stopped = signal(Track)
    error_occurred = signal(Track)

    def __init__(self):
        self._media_library = create_media_library()
        self._playlist = []
        self._player = QMediaPlayer()
        self._player.stateChanged.connect(self._state_changed)
        self._player.mediaStatusChanged.connect(self._media_status_changed)

    def play(self, track):
        self._playlist.append(track)
        self._player.setMedia(self._media_library.fetch(track.filename))
        self._player.play()

    def stop(self):
        self._player.stop()

    def _media_status_changed(self, state):
        if state == QMediaPlayer.BufferedMedia:
            self._error = QMediaPlayer.NoError
            self.playing.emit(self._playlist[0])
        elif state == QMediaPlayer.InvalidMedia:
            # On windows 8, we only get an InvalidMedia status in case of error,
            # so we need to keep track of the error that occurred
            self._error = QMediaPlayer.FormatError

    @property
    def error(self):
        return MediaPlayer.Error(self._player.error() or self._error)

    def _state_changed(self, state):
        if state == QMediaPlayer.StoppedState and self.error is not MediaPlayer.Error.none:
            self.error_occurred.emit(self._playlist.pop(0), self.error)
        elif state == QMediaPlayer.StoppedState:
            self.stopped.emit(self._playlist.pop(0))

    def dispose(self):
        self._player.stop()
        # force the deletion of the player on windows because windows
        # doesn't release the handle and prevents further instanciations
        sip.delete(self._player)
        self._player = None

        self._media_library.dispose()
        self.closed.emit()
Beispiel #3
0
class VideoPlayer(QWidget):
    def __init__(self, parent):
        print("super().__init__(parent)")
        super().__init__(parent)
        self.mediaPlayer = QMediaPlayer(self, QMediaPlayer.VideoSurface)
        videoWidget = QVideoWidget()

        print("self.m_playButton = QPushButton()")
        self.playButton = QPushButton()
        self.playButton.setEnabled(True)
        self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
        self.playButton.clicked.connect(self.play)

        print("self.m_positionSlider =QSlider(Qt.Horizontal)")
        self.positionSlider = QSlider(Qt.Horizontal)
        self.positionSlider.setRange(0, 0)

        self.errorLabel = QLabel()
        self.errorLabel.setSizePolicy(QSizePolicy.Preferred,
                                      QSizePolicy.Maximum)

        print("controlLayout = QHBoxLayout()")
        controlLayout = QHBoxLayout()
        #controlLayout.setMargin(0)
        controlLayout.addWidget(self.playButton)
        controlLayout.addWidget(self.positionSlider)

        layout = QVBoxLayout()
        layout.addWidget(videoWidget)
        layout.addLayout(controlLayout)
        layout.addWidget(self.errorLabel)

        self.setLayout(layout)

        print("self.m_mediaPlayer.setVideoOutput(videoWidget)")
        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 setUrl(self, url):
        print("setUrl")
        self.errorLabel.setText("")
        if url.isLocalFile():
            print("url.isLocalFile()")
            self.setWindowFilePath(url.toLocalFile())
        else:
            print("else")
            self.setWindowFilePath('')
        #self.setWindowFilePath(url.isLocalFile() ? url.toLocalFile() : QString());
        self.mediaPlayer.setMedia(QMediaContent(url))
        print(url)

    def play(self):
        print("play")
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.mediaPlayer.pause()
        else:
            self.mediaPlayer.play()

    def mediaStateChanged(self, state):
        print("mediaStateChanged")
        if state == QMediaPlayer.PlayingState:
            print("state == QMediaPlayer.PlayingState")
            self.playButton.setIcon(self.style().standardIcon(
                QStyle.SP_MediaPause))
        else:
            print("else")
            self.playButton.setIcon(self.style().standardIcon(
                QStyle.SP_MediaPlay))

    def positionChanged(self, position):
        print("positionChanged")
        self.positionSlider.setValue(position)

    def durationChanged(self, duration):
        print("durationChanged")
        self.positionSlider.setRange(0, duration)

    def setPosition(self, position):
        print("setPosition")
        self.mediaPlayer.setPosition(position)

    def handleError(self):
        print("handleError")
        #self.m_playButton.setEnabled(False)
        errorString = self.mediaPlayer.errorString()
        message = "Error: " + errorString
        self.errorLabel.setText(message)
        print(self.mediaPlayer.error())
class Window(QWidget):
    def __init__(self):
        super().__init__()
 
        self.setWindowTitle("PyQt5 Media Player")
        self.setGeometry(350, 100, 700, 500)
        self.setWindowIcon(QIcon('player.png'))
        
        
        #reqdata = req.get('http://192.168.0.47:2000/getcsvfile/strenght-weakness_bp')
        #data = reqdata.json()
        
        #print("data", data)
        
        #192.168.0.47
        #http://192.168.0.47:2000/getvideo/strenght-weakness_bp
 
        #p =self.palette()
        #p.setColor(QPalette.Window, Qt.black)
        #self.setPalette(p)
        
        #data = {'name': 'Peter'}

       # resp = req.post("http://192.168.0.34:2000/upload/interview/postdata", data)
       # print(resp.text)
        
       # self.clientsocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
       # self.clientsocket.connect(('192.168.0.34',2000))
        
        milli_sec = int(round(time.time() * 1000))
        print(milli_sec)
        
        self.timer = QTimer()
         
        self.timer.timeout.connect(self.viewCam)
        
        fourcc = cv2.VideoWriter_fourcc(*'XVID') 
        self.out = cv2.VideoWriter('C:/Users/brahm/OneDrive/Desktop/webcam/'+str(milli_sec)+'.mp4', fourcc, 30.0, (640, 480))
        
        self.init_ui()
 
 
        self.show()
 
 
    def init_ui(self):
 
        #create media player object
        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
 
 
        #create videowidget object
 
        videowidget = QVideoWidget()
 
 
        #create open button
        openBtn = QPushButton('Open Video')
        openBtn.clicked.connect(self.open_file)
        
        self.videobutton = QPushButton('start')
        self.videobutton.clicked.connect(self.record)
 
 
 
        #create button for playing
        self.playBtn = QPushButton()
        #self.playBtn.setEnabled(False)
        self.playBtn.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
        self.playBtn.clicked.connect(self.play_video)
 
 
 
        #create slider
        self.slider = QSlider(Qt.Horizontal)
        self.slider.setRange(0,0)
        self.slider.sliderMoved.connect(self.set_position)
 
 
 
        #create label
        self.label = QLabel()
        self.label.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
 
 
        #create hbox layout
        hboxLayout = QHBoxLayout()
        hboxLayout.setContentsMargins(0,0,0,0)
 
        #set widgets to the hbox layout
        #hboxLayout.addWidget(openBtn)
        hboxLayout.addWidget(self.videobutton)
        hboxLayout.addWidget(self.playBtn)
        hboxLayout.addWidget(self.slider)
 
 
 
        #create vbox layout
        vboxLayout = QVBoxLayout()
        vboxLayout.addWidget(videowidget)
        vboxLayout.addLayout(hboxLayout)
        vboxLayout.addWidget(self.label)
 
 
        self.setLayout(vboxLayout)
 
        self.mediaPlayer.setVideoOutput(videowidget)
        
        self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile("C:/Users/brahm/OneDrive/Desktop/face exp node/రాష్ట్రపతి పాలన ఎప్పుడు, ఎందుకు విధిస్తారు_ ఆర్టికల్ 356 ఏం చెబుతోంది_ - BBC New.wmv")))
 
        #media player signals
 
        self.mediaPlayer.stateChanged.connect(self.mediastate_changed)
        self.mediaPlayer.positionChanged.connect(self.position_changed)
        self.mediaPlayer.durationChanged.connect(self.duration_changed)
        self.mediaPlayer.error.connect(self.handle_errors)
 
    def open_file(self):
        #sender = self.sender()
        filename, _ = QFileDialog.getOpenFileName(self, "Open Video")
 
        if filename != '':
            self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(filename)))
            self.playBtn.setEnabled(True)
 
 
    def play_video(self):
        
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.mediaPlayer.pause()
 
        else:
            self.mediaPlayer.play()
            
            print('mediaStatus: ' + str(self.mediaPlayer.mediaStatus()))
 
 
    def mediastate_changed(self, state):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:  
            self.playBtn.setIcon(
                self.style().standardIcon(QStyle.SP_MediaPause)
 
            )
 
        else:
            self.playBtn.setIcon(
                self.style().standardIcon(QStyle.SP_MediaPlay)
 
            )
 
    def position_changed(self, position):
        self.slider.setValue(position)
 
 
    def duration_changed(self, duration):
        self.slider.setRange(0, duration)
 
 
    def set_position(self, position):
        print("position", position)
        self.mediaPlayer.setPosition(position)
 
 
    def handle_errors(self):
        print(self.mediaPlayer.error, 'error')
        print('error: ' + str(self.mediaPlayer.error()))
        print('mediaStatus: ' + str(self.mediaPlayer.mediaStatus()))
        self.playBtn.setEnabled(False)
        self.label.setText("Error: " + self.mediaPlayer.errorString())
 
 
    def viewCam(self):
        # read image in BGR format
        ret, image = self.cap.read()
        
        #data = {'name': image}
        
        #resp = req.post("https://httpbin.org/post", data)
        #print(resp.text)
        
        
        
        
        #data = pickle.dumps(image)
        
        
        #print("data", data)
        
        #self.clientsocket.sendall(struct.pack("H", len(data))+data)
        
        
        
        self.out.write(image) 
        
        
        #dtime = int(round(time.time() * 1000))
        
        #data = QByteArray()
        #data.append("name=Peter&")
        #data.append("age=34")
        
        #videofilename = str(dtime)+'.mp4'
        
        
        #data.append('videoname', videofilename);
        
        
        #print("data", data)
        
        
        # convert image to RGB format
            
    def record(self):
        if not self.timer.isActive():
           self.cap = cv2.VideoCapture(0)
           self.timer.start()
           self.videobutton.setText("Stop")
        else:
            self.timer.stop()
            self.cap.release()
            print("data", self.out)
            self.out.release()
            
            
            
            
            # update control_bt text
            self.videobutton.setText("Start")
Beispiel #5
0
class Window(QWidget):
    def __init__(self):
        super().__init__()

        p = self.palette()
        p.setColor(QPalette.Window, Qt.white)
        self.setPalette(p)
        title = "Python charts"
        top = 400
        left = 400
        width = 700
        height = 500

        self.setWindowTitle(title)
        self.setGeometry(top, left, width, height)

        self.init_ui()

        self.show()

    def init_ui(self):

        #create media player object

        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)

        #create videowidget object

        videowidget = QVideoWidget()

        #create open button
        openBtn = QPushButton('Open Video')
        openBtn.clicked.connect(self.open_file)

        #create button for playing
        self.playBtn = QPushButton()
        self.playBtn.setEnabled(False)
        self.playBtn.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
        self.playBtn.clicked.connect(self.play_video)

        #create slider
        self.slider = QSlider(Qt.Horizontal)
        self.slider.setRange(0, 0)
        self.slider.sliderMoved.connect(self.set_position)

        #create label
        self.label = QLabel()
        self.label.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)

        #create hbox layout
        hboxLayout = QHBoxLayout()
        hboxLayout.setContentsMargins(0, 0, 0, 0)

        #set widgets to the hbox layout
        hboxLayout.addWidget(openBtn)
        hboxLayout.addWidget(self.playBtn)
        hboxLayout.addWidget(self.slider)

        #create vbox layout
        vboxLayout = QVBoxLayout()
        vboxLayout.addWidget(videowidget)
        vboxLayout.addLayout(hboxLayout)
        # vboxLayout.addWidget(self.plotWidget)
        vboxLayout.addWidget(self.label)

        self.setLayout(vboxLayout)

        self.mediaPlayer.setVideoOutput(videowidget)

        #media player signals

        self.mediaPlayer.stateChanged.connect(self.mediastate_changed)
        self.mediaPlayer.positionChanged.connect(self.position_changed)
        self.mediaPlayer.durationChanged.connect(self.duration_changed)
        self.mediaPlayer.error.connect(self.handle_errors)

    def open_file(self):
        filename, _ = QFileDialog.getOpenFileName(self, "Open Video")

        if filename != '':
            self.mediaPlayer.setMedia(
                QMediaContent(QUrl.fromLocalFile(filename)))
            self.playBtn.setEnabled(True)
            print(filename, "file")

    def play_video(self):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.mediaPlayer.pause()
            print(self.mediaPlayer.state(), "00000")

        else:
            self.mediaPlayer.play()
            print(self.mediaPlayer.state(), "2222")

    def mediastate_changed(self, state):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.playBtn.setIcon(self.style().standardIcon(
                QStyle.SP_MediaPause))

        else:
            self.playBtn.setIcon(self.style().standardIcon(
                QStyle.SP_MediaPlay))

    def position_changed(self, position):
        self.slider.setValue(position)

    def duration_changed(self, duration):
        self.slider.setRange(0, duration)

    def set_position(self, position):
        self.mediaPlayer.setPosition(position)

    def handle_errors(self):
        self.playBtn.setEnabled(False)
        self.label.setText("Error: " + self.mediaPlayer.errorString())
        print(self.mediaPlayer.error, 'error')
        print('error: ' + str(self.mediaPlayer.error()))
class Window(QWidget):
    def __init__(self):
        super().__init__()
 
       
       
 
        p =self.palette()
        p.setColor(QPalette.Window, Qt.white)
        self.setPalette(p)
        title = "Python charts"
        top = 400
        left = 400
        width = 700
        height = 500
 
        self.setWindowTitle(title)
        self.setGeometry(top, left, width, height)
 
        self.init_ui()
 
 
        self.show()
 
 
    def init_ui(self):
 
        #create media player object
 
    
    
        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
 
       
        #create videowidget object
 
        videowidget = QVideoWidget()
 
 
        #create open button
        openBtn = QPushButton('Open Video')
        openBtn.clicked.connect(self.open_file)
 
 
 
        #create button for playing
        self.playBtn = QPushButton()
        self.playBtn.setEnabled(False)
        self.playBtn.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
        self.playBtn.clicked.connect(self.play_video)
 
 
 
        #create slider
        self.slider = QSlider(Qt.Horizontal)
        self.slider.setRange(0,0)
        self.slider.sliderMoved.connect(self.set_position)
 
 
 
        #create label
        self.label = QLabel()
        self.label.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
        
        fig = plt.figure(figsize=(1,1))
        
        ax = fig.add_subplot(111)
        y_pos = np.arange(len(labelarr))
        d = 1./(len(final)+2.)
        ax.bar(y_pos, final,color=colorarr)
        ax.bar(y_pos,newarr,color=colorarr)
        ax.set(yticklabels='',xticklabels='')
        ax.tick_params(right= False,top= False,left= False, bottom= False)
      
      
        self.plotWidget = FigureCanvas(fig)
        #create hbox layout
        hboxLayout = QHBoxLayout()
        hboxLayout.setContentsMargins(0,0,0,0)
 
        #set widgets to the hbox layout
        hboxLayout.addWidget(openBtn)
        hboxLayout.addWidget(self.playBtn)
        hboxLayout.addWidget(self.slider)
 
 
 
        #create vbox layout
        vboxLayout = QVBoxLayout()
        vboxLayout.addWidget(videowidget)
        vboxLayout.addLayout(hboxLayout)
        vboxLayout.addWidget(self.plotWidget)
        vboxLayout.addWidget(self.label)
        
 
 
        self.setLayout(vboxLayout)
 
        self.mediaPlayer.setVideoOutput(videowidget)
 
 
        #media player signals
 
        self.mediaPlayer.stateChanged.connect(self.mediastate_changed)
        self.mediaPlayer.positionChanged.connect(self.position_changed)
        self.mediaPlayer.durationChanged.connect(self.duration_changed)
        self.mediaPlayer.error.connect(self.handle_errors) 
        
        def onclick(event):  
          print('hiiiii')
          x = int(np.round(event.xdata))
          print(x,"index")
          print(final[x],'newarray')
   
        fig.canvas.mpl_connect('button_press_event', onclick)
   
        
        
       
      
 
 
    def open_file(self):
        filename, _ = QFileDialog.getOpenFileName(self, "Open Video")
 
        if filename != '':
            self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(filename)))
            self.playBtn.setEnabled(True)
            print(filename,"file") 
 
    def play_video(self):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.mediaPlayer.pause()
            print(self.mediaPlayer.state(),"00000")
 
        else:
            self.mediaPlayer.play()
            print(self.mediaPlayer.state(),"2222")
 
    def mediastate_changed(self, state):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.playBtn.setIcon(
                self.style().standardIcon(QStyle.SP_MediaPause)
 
            )
 
        else:
            self.playBtn.setIcon(
                self.style().standardIcon(QStyle.SP_MediaPlay)
 
            )
 
    def position_changed(self, position):
        self.slider.setValue(position)
 
 
    def duration_changed(self, duration):
        self.slider.setRange(0, duration)
 
 
    def set_position(self, position):
        self.mediaPlayer.setPosition(position)
 
 
    def handle_errors(self):
        self.playBtn.setEnabled(False)
        self.label.setText("Error: " + self.mediaPlayer.errorString())
        print(self.mediaPlayer.error, 'error')
        print('error: ' + str(self.mediaPlayer.error()))
Beispiel #7
0
class MainUIClass(QMainWindow, mp3playerGUILayout3.Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainUIClass, self).__init__(parent)
        self.setupUi(self)
        self.fixLayout()
        self.mediaPlayer = QMediaPlayer()
        self.mediaPlayer.error.connect(self.erroralert)

        self.playlist = QMediaPlaylist()
        self.mediaPlayer.setPlaylist(self.playlist)

        #Connecting button clicks and functions
        self.OpenButton.clicked.connect(self.addtoqueue)
        self.PlayButton.clicked.connect(self.play)
        self.StopButton.clicked.connect(self.mediaPlayer.stop)
        self.muteButton.clicked.connect(self.mute)
        self.ForwardButton.clicked.connect(self.playlist.next)
        self.BackwardButton.clicked.connect(self.playlist.previous)

        self.addToQueue.clicked.connect(self.addtoqueue)
        self.repeatButton.clicked.connect(self.repeat)
        self.shuffleButton.clicked.connect(self.shuffle)

        #Adding valuechange functionality
        self.Timeline.setRange(0, 100)
        self.Timeline.sliderReleased.connect(self.set_position)

        self.mediaPlayer.setVolume(50)
        self.volume_on = True
        self.Volumedial.setValue(50)
        self.Volumedial.valueChanged.connect(self.set_volume)

        self.displayfilename_thread = DisplayThread()
        self.displayfilename_thread.start()
        self.displayfilename_thread.labeltext.connect(
            self.displayfilename_func)

        self.mediaPlayer.stateChanged.connect(self.mediaStateChanged)
        self.mediaPlayer.durationChanged.connect(self.durationChanged)
        self.mediaPlayer.positionChanged.connect(self.positionChanged)
        self.playlist.currentMediaChanged.connect(self.filenameChange)
        self.tableWidget.cellDoubleClicked.connect(self.getcurrentrow)
        #self.mediaPlayer.mutedChanged.connect(self.muteChange)

        self.items = 0

        self.repeated = True
        self.shuffled = True

        #p = self.palette()
        #p.setColor(self.backgroundRole(), Qt.lightGray)
        #self.setPalette(p)
        #self.dumpObjectInfo()

    @Slot()
    def addtoqueue(self):
        filename, _ = QFileDialog.getOpenFileName(
            self, "Select song")  # QDir.homePath())
        if filename != '':
            self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile(filename)))
            self.addtoview(filename)

    def addtoview(self, filename):
        self.tableWidget.insertRow(self.items)
        table_filename = QTableWidgetItem(filename.split("/")[-1])
        inputdialog = InputDialog()
        inputdialog.exec_()
        if len(inputdialog.accept_func()[0]) > 0 or len(
                inputdialog.accept_func()[1]) > 0:
            table_artist = QTableWidgetItem(inputdialog.accept_func()[0])
            table_artist.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
            table_song = QTableWidgetItem(inputdialog.accept_func()[1])
            table_song.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
        else:
            table_artist = QTableWidgetItem("..artist..")
            table_artist.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
            table_song = QTableWidgetItem("..song..")
            table_song.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
        self.tableWidget.setItem(self.items, 0, table_artist)
        self.tableWidget.setItem(self.items, 1, table_song)
        for i in range(self.playlist.mediaCount()):
            print(self.playlist.media(i).canonicalUrl().fileName())
        self.PlayButton.setEnabled(True)
        self.items += 1

    @Slot()
    def play(self):
        if self.playlist.mediaCount() == 0:
            alert = selectfileAlert()
            alert.exec_()
        elif self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.mediaPlayer.pause()
        else:
            self.mediaPlayer.play()

    @Slot()
    def set_volume(self):
        volume = self.Volumedial.value()
        self.mediaPlayer.setVolume(volume)

    @Slot(QMediaPlayer.State)
    def mediaStateChanged(self, state):
        if self.mediaPlayer.state() == QMediaPlayer.PlayingState:
            self.PlayButton.setIcon(self.style().standardIcon(
                QStyle.SP_MediaPause))
            icon = self.style().standardIcon(QStyle.SP_DialogYesButton)
            self.PlayingIcon.setPixmap(icon.pixmap(QSize(15, 15)))
        elif self.mediaPlayer.state() == QMediaPlayer.StoppedState:
            filename = "........Select song to enjoy the moment........"
            self.displayfilename_thread.filename = filename
            self.PlayButton.setIcon(self.style().standardIcon(
                QStyle.SP_MediaPlay))
            icon = self.style().standardIcon(QStyle.SP_DialogNoButton)
            self.PlayingIcon.setPixmap(icon.pixmap(QSize(15, 15)))
        else:
            self.PlayButton.setIcon(self.style().standardIcon(
                QStyle.SP_MediaPlay))
            icon = self.style().standardIcon(QStyle.SP_DialogYesButton)
            self.PlayingIcon.setPixmap(icon.pixmap(QSize(15, 15)))

    @Slot()
    def repeat(self):
        if self.repeated:
            self.playlist.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
            self.repeatButton.setFlat(True)
            self.repeated = False
            self.statusbar.showMessage("Repeat function is on")
        else:
            self.playlist.setPlaybackMode(QMediaPlaylist.CurrentItemOnce)
            self.repeatButton.setFlat(False)
            self.repeated = True
            self.statusbar.showMessage("Repeat function is off")

    @Slot()
    def shuffle(self):
        if self.shuffled:
            self.playlist.setPlaybackMode(QMediaPlaylist.Random)
            self.shuffleButton.setFlat(True)
            self.shuffled = False
            self.displayfilename_thread.exit()
            self.statusbar.clearMessage()
            self.statusbar.showMessage("Shuffle function is on", 100000)
            self.statusbar.clearMessage()
            self.displayfilename_thread.start()
        else:
            self.playlist.setPlaybackMode(QMediaPlaylist.Sequential)
            self.shuffleButton.setFlat(False)
            self.shuffled = True
            self.displayfilename_thread.exit()
            self.statusbar.clearMessage()
            self.statusbar.showMessage("Shuffle function is off", 100000)
            self.statusbar.clearMessage()
            self.displayfilename_thread.start()

    @Slot('qint64', name="positionChanged")
    def positionChanged(self, position):
        self.Timeline.setValue(position)
        self.displaytime_func(position)

    @Slot()
    def set_position(self):
        self.mediaPlayer.setPosition(
            self.Timeline.value())  #self.mediaPlayer.setPosition(position)

    @Slot('qint64', name='durationChanged')
    def durationChanged(self, duration):
        self.Timeline.setRange(0, duration)

    def displaytime_func(self, position):
        sec = round(position / 1000.)
        sec_dt = datetime.timedelta(seconds=sec)
        sec_leftdt = datetime.timedelta(
            seconds=round(self.mediaPlayer.duration() / 1000.) - sec + 1)
        sec_format = datetime.datetime(2000, 1, 1) + sec_dt
        sec_formatdt = datetime.datetime(2000, 1, 1) + sec_leftdt
        self.Timepassed.setText(sec_format.strftime("%M min %S s"))
        self.Timeleft.setText(sec_formatdt.strftime("-%M min %S s"))

    @Slot('QString')
    def displayfilename_func(self, text):
        filetext = text.split(",")[0].replace("text: ", "")
        if text.split(",")[1] == " loop: 1":
            self.statusbar.showMessage(filetext)
            #self.displayfilename.setText(filetext)
        if text.split(",")[1] == " loop: 2":
            self.statusbar.showMessage(filetext)

    @Slot(QMediaContent)
    def filenameChange(self, media):
        if media:
            self.displayfilename_thread.quit()
            filename = media.canonicalUrl().fileName()
            filename = "Now playing ..... " + filename
            self.displayfilename_thread.filename = filename
            self.displayfilename_thread.start()

    @Slot()
    def mute(self):
        if self.volume_on:
            self.muteButton.setIcon(self.style().standardIcon(
                QStyle.SP_MediaVolumeMuted))
            self.mediaPlayer.setMuted(True)
            self.volume_on = False
        else:
            self.muteButton.setIcon(self.style().standardIcon(
                QStyle.SP_MediaVolume))
            self.mediaPlayer.setMuted(False)
            self.volume_on = True

    def fixLayout(self):
        _translate = QCoreApplication.translate
        self.PlayButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
        self.BackwardButton.setIcon(self.style().standardIcon(
            QStyle.SP_MediaSkipBackward))
        self.ForwardButton.setIcon(self.style().standardIcon(
            QStyle.SP_MediaSkipForward))
        self.StopButton.setIcon(self.style().standardIcon(QStyle.SP_MediaStop))
        self.muteButton.setIcon(self.style().standardIcon(
            QStyle.SP_MediaVolume))
        icon = self.style().standardIcon(QStyle.SP_DialogNoButton)
        self.PlayingIcon.setPixmap(icon.pixmap(QSize(15, 15)))
        self.addToQueue.setIcon(self.style().standardIcon(
            QStyle.SP_FileDialogNewFolder))
        self.repeatButton.setIcon(self.style().standardIcon(
            QStyle.SP_BrowserReload))
        self.shuffleButton.setIcon(self.style().standardIcon(
            QStyle.SP_DialogOkButton))

        self.shuffleButton.setText(_translate("MainWindow", ""))
        self.repeatButton.setText(_translate("MainWindow", ""))
        self.PlayingIcon.setText(_translate("MainWindow", ""))
        self.PlayButton.setText(_translate("MainWindow", ""))
        self.BackwardButton.setText(_translate("MainWindow", ""))
        self.ForwardButton.setText(_translate("MainWindow", ""))
        self.StopButton.setText(_translate("MainWindow", ""))
        self.Timepassed.setText(_translate("MainWindow", "00 min 00 s"))
        self.muteButton.setText(_translate("MainWindow", ""))
        self.addToQueue.setText(_translate("MainWindow", ""))
        #self.displayfilename.setText(_translate("MainWindow", ""))
        #self.displayfilename2.setText(_translate("MainWindow", ""))
        self.Timeleft.setText(_translate("MainWindow", "-00 min 00 s"))
        self.tableWidget.setHorizontalHeaderLabels(["Artist", "Song"])

    def erroralert(self):
        print(self.mediaPlayer.error())
        #print("type of args: " + type(args), "  args: ",args)
    def getcurrentrow(self, row, col):
        self.playlist.setCurrentIndex(row + 1)
        self.mediaPlayer.play()