Как рандомно перемешать все айтемы в QListWidget?

Я хочу чтоб при нажатии на кнопку все айтемы в QListWidget перемешались.

import sys
import random
import resource_rc
import mutagen
import pandas as pd
import os

from design import Ui_MainWindow

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QUrl, QDir, Qt, QSettings, QTime, QCoreApplication
from PyQt5.QtWidgets import QFileDialog, QMainWindow
from PyQt5.QtGui import QIcon
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent, QMediaPlaylist, QMediaMetaData


# from mutagen.mp3 import MP3
# from mutagen import id3 as mu
# from mutagen import *

# from os.path import expanduser
# from functools import partial
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.muted = False
        self.playPause = True
        self.rand_pressed = False
        self.setWindowFlags(Qt.FramelessWindowHint)

        self.dir = f'{QDir.currentPath()}'
        self.url = QUrl()
        self.player = QMediaPlayer()
        self.content = QMediaContent()
        self.playlist = QMediaPlaylist(self.player)
        self.player.setPlaylist(self.playlist)

        self.playlist.currentIndexChanged.connect(self.update)
        self.player.metaDataChanged.connect(self.meta_data)
        self.player.positionChanged.connect(self.position_changed)
        self.player.durationChanged.connect(self.duration_changed)

        self.ui.play_pushButton.setEnabled(False)

    self.ui.valume_Slider.sliderMoved.connect(self.volume_slider_changed)
        self.ui.horizontalSlider.sliderMoved.connect(self.play_slider_changed)

        self.ui._pushButton.clicked.connect(self.minimized)
        self.ui.pushButton.clicked.connect(self.close)
        self.ui.mute_pushButton.clicked.connect(self.volume_mute)
        self.ui.preview_pushButton.clicked.connect(self.prev)
        self.ui.next_pushButton.clicked.connect(self.next)
        self.ui.play_pushButton.clicked.connect(self.play)
        self.ui.loc_pushButton.clicked.connect(self.get_music)
        self.ui.del_pushButton.clicked.connect(self.delete)
        self.ui.clear_pushButton.clicked.connect(self.clear)
        self.ui.rand_pushButton.clicked.connect(self.sortRandom)

# ------------------------------------------------------------------------------------

    def get_music(self):
        files = QFileDialog.getOpenFileNames(None, filter='Audio Files (*.mp3 *.mp4 *.avi *.mov *.ogg *.wav)')
        for track in files[0]:
            self.playlist.addMedia(QMediaContent(self.url.fromLocalFile(track)))
            track = track.split('/')
            self.ui.listWidget.addItem(f'{track[-1][:-4]}')
        self.ui.play_pushButton.setEnabled(True)
        self.ui.listWidget.setCurrentRow(0)
        self.playlist.setCurrentIndex(0)

    def meta_data(self):
        if self.player.isMetaDataAvailable():
            if self.player.metaData(QMediaMetaData.Title) is None:
                result = "Name unknown"
                self.ui.track_label.setText(result)
            else:
                string = self.player.metaData(QMediaMetaData.Title)
                result = ""
                index = ["()","-",".","holycrds","pro"]
                for i in string:
                    if i not in index:
                        result += i
                self.ui.track_label.setText(result.translate({ord(i): None for i in 'holycrdspro'}))
            # -------------------------------------------------------
            if self.player.metaData(QMediaMetaData.Author) is None:
                result_string = "Name unknown"
                self.ui.artist_label.setText(result_string)
            else:
                my_string = self.player.metaData(QMediaMetaData.Author)
                result_string = ""
                index = ["[","]","'"]
                for i in my_string:
                    if i not in index:
                        result_string += i
                self.ui.artist_label.setText(result_string)
            # pixmap = QtGui.QPixmap()
            # # track = track.split('/')
            # metadata = mutagen.File(f'{QMediaContent(self.url.fromLocalFile())}')
            # for tag in metadata.tags.values():
            #   if tag.FrameID == 'APIC':
            #       pixmap.loadFromData(tag.data)
            #       break
            # self.image_label.setPixmap(pixmap)

    # def stop(self):
    #   self.player.stop()
    #   self.playlist.setCurrentIndex(0)
    #   self.listWidget.setCurrentRow(0)

    def play(self):
        if(self.playPause):
            self.paused()
        else:
            self.played()
    def paused(self):
        self.playlist.setCurrentIndex(self.ui.listWidget.currentRow())
        self.player.play()
        self.ui.play_pushButton.setIcon(QIcon(":/icons/play.png"))
        self.playPause = False
    def played(self):
        self.player.pause()
        self.ui.play_pushButton.setIcon(QIcon(":/icons/pause.png"))
        self.playPause = True

    def play_slider_changed(self, position):
        self.player.setPosition(position)

    def next(self):
        self.playlist.next()
        if self.playlist.currentIndex() == -1:
            self.playlist.setCurrentIndex(0)
            self.player.play()

    def prev(self):
        if self.playlist.previousIndex() == -1:
            self.playlist.setCurrentIndex(self.playlist.mediaCount()-1)
        else:
            self.playlist.previous()

    def delete(self):
        clicked = self.ui.listWidget.currentRow()
        self.ui.listWidget.takeItem(clicked)

    def clear(self):
        self.player.stop()
        self.ui.listWidget.clear()
        self.playlist.clear()
        self.ui.track_label.clear()
        self.ui.artist_label.clear()

    def update(self):
        self.ui.listWidget.setCurrentRow(self.playlist.currentIndex())
        if self.playlist.currentIndex() < 0:
            self.ui.listWidget.setCurrentRow(0)
            self.playlist.setCurrentIndex(0)

    def position_changed(self, position):
        if(self.ui.horizontalSlider.maximum() != self.player.duration()):
            self.ui.horizontalSlider.setMaximum(self.player.duration())
        self.ui.horizontalSlider.setValue(position)

        # seconds = (position / 1000) % 60
        # minutes = (position / 60000) % 60
        # hours = (position / 2600000) % 24

        # time = QTime(hours, minutes, seconds)
        # self.label.setText(time.toString())

    def duration_changed(self, duration):
        self.ui.horizontalSlider.setRange(0, duration)

    def volume_slider_changed(self, position):
        self.player.setVolume(position)

    def volume_mute(self):
        if(self.muted):
            self.player.setMuted(False)
            self.ui.mute_pushButton.setIcon(QIcon(":/icons/volume.png"))
            self.muted = False
        else:
            self.player.setMuted(True)
            self.ui.mute_pushButton.setIcon(QIcon(":/icons/mute.png"))
            self.muted = True


    def sortRandom(self): #<-- это всё что у меня получилось --
        self.rand_pressed = True
        list_item = [self.ui.listWidget.item(row).text() for row in range(self.ui.listWidget.count())]
        data = pd.DataFrame(dict(
            Путь=[self.dir],
            Список=[list_item]))
        print(data)
        random.shuffle(list_item)
        print(data)
        # self.ui.listWidget #<--------------------------------

    def minimized(self):
        self.setWindowState(self.windowState() | Qt.WindowMinimized)


    # вызывается при нажатии кнопки мыши
    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = event.pos()

    # вызывается при отпускании кнопки мыши
    def mouseReleaseEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = None

    # вызывается всякий раз, когда мышь перемещается
    def mouseMoveEvent(self, event):
        if not self.old_pos:
            return
        delta = event.pos() - self.old_pos
        self.move(self.pos() + delta)
    # def closeEvent(self,event):
    #   #сохраняешь что надо
    #   event.accepr(self.ui.listWidget.items())

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

Ответы (0 шт):