qq_35543914 2021-05-23 20:46 采纳率: 0%
浏览 41

Qtabiewidget怎样按钮按下自动循环播放列表内容,如果下一首按钮按下则播放下一首。

from PyQt5 .Qt import *
import sys,os
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1105, 811)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(10, 70, 291, 601))
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(0)
        self.tableWidget.setRowCount(0)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(30, 680, 93, 28))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(190, 680, 93, 28))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(350, 680, 93, 28))
        self.pushButton_3.setObjectName("pushButton_3")
        self.horizontalSlider = QtWidgets.QSlider(self.centralwidget)
        self.horizontalSlider.setGeometry(QtCore.QRect(410, 500, 561, 22))
        self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalSlider.setObjectName("horizontalSlider")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(320, 510, 72, 15))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(980, 540, 72, 15))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(650, 420, 72, 15))
        self.label_3.setObjectName("label_3")
        self.verticalSlider = QtWidgets.QSlider(self.centralwidget)
        self.verticalSlider.setGeometry(QtCore.QRect(1000, 360, 22, 160))
        self.verticalSlider.setOrientation(QtCore.Qt.Vertical)
        self.verticalSlider.setObjectName("verticalSlider")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1105, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "上一首"))
        self.pushButton_2.setText(_translate("MainWindow", "播放"))
        self.pushButton_3.setText(_translate("MainWindow", "下一首"))
        self.label.setText(_translate("MainWindow", "TextLabel"))
        self.label_2.setText(_translate("MainWindow", "TextLabel"))
        self.label_3.setText(_translate("MainWindow", "TextLabel"))
        path = "D:/我的音乐/"  # 待遍历的文件路径,
        dirs = os.listdir(path)
        self.tableWidget.setRowCount(len(dirs))
        self.tableWidget.setColumnCount(1)
        self.tableWidget.setHorizontalHeaderLabels(['地址'])
        index = 0
        for i in dirs:
            if os.path.splitext(i)[1] == ".mp3":
                self.tableWidget.setItem(index, 0, QTableWidgetItem(i))
                index += 1

        self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.tableWidget.setColumnWidth(0, 260)

        self.player = QMediaPlayer()
        self.dccc=QMediaPlaylist()
        
        q = self.tableWidget.item(2, 0).text()
        self.label_3.setText(q)
        yy = path + q
        self.player.setMedia(QMediaContent(QUrl.fromLocalFile(yy)))
        self.player.play()

        self.verticalSlider.valueChanged[int].connect(self.volume)
        self.player.setVolume(25)
        self.label_2.setText("25")
        self.horizontalSlider.sliderPressed.connect(self.setControlIn)
        self.horizontalSlider.sliderReleased.connect(self.setControlOut)
        self.horizontalSlider.sliderMoved.connect(self.setControlIn)
        self.player.pause()
        self.pushButton_2.clicked.connect(self.action)
        self.tableWidget.cellPressed.connect(self.djnr)
        self.player.positionChanged.connect(self.playState)
        self.player.durationChanged.connect(self.playTime)
        self.pushButton_3.clicked.connect(self.xyq)



    def __init__(self):
        super().__init__()
        self.control_flag = 0

    def formatTime(self, num):
        num = int(num)  # num=整数
        if num > 0:  # 如果0大于整数
            min = str(int(num / 60 + 100))[1:3]  # min=
            sec = str(int(num % 60 + 100))[1:3]
            return "%s:%s" % (str(min), str(sec))
        return "00:00"



    def djnr(self, row, col):
        try:
            bfnrw = self.tableWidget.item(row, col).text()
            self.label_3.setText(bfnrw)
            print(bfnrw)
            adeded = "D:/我的音乐/" + bfnrw
            self.player = QMediaPlayer()
            self.player.setMedia(QMediaContent(QUrl.fromLocalFile(adeded)))
            self.pushButton_2.setText("播放中")
            self.player.play()
            self.player.positionChanged.connect(self.playState)
            self.player.durationChanged.connect(self.playTime)
        except:
            self.pushButton_2.setText("暂停中")
            self.label_3.setText("无法播放内容")
            self.player.pause()
            print("ghh")

    def setControlIn(self):
        self.control_flag = 1

    def setControlOut(self):
        self.control_flag = 0
        time = int(self.player.duration() / 1000)
        pos = int(self.horizontalSlider.value() / 100 * time * 1000)
        self.player.setPosition(pos)

    def playState(self):
        dur = int(self.player.position() / 1000)
        time = int(self.player.duration() / 1000)
        self.label.setText("%s/%s" % (self.formatTime(dur), self.formatTime(time)))
        self.label.adjustSize()
        # 控制进度
        if self.control_flag == 0:
            self.horizontalSlider.setValue(int(dur / time * 100))

    def playTime(self):
        time = int(self.player.duration() / 1000)
        self.label.setText("%s/%s" % (self.formatTime(0), self.formatTime(time)))
        self.label.adjustSize()

    def volume(self, num):
        self.player.setVolume(num)
        self.label_2.setText(str(num))
        self.label_2.adjustSize()

    def action(self):
        if self.pushButton_2.text() == "播放中":
            self.pushButton_2.setText("已暂停")
            self.player.pause()
        else:
            self.pushButton_2.setText("播放中")
            self.player.play()

    def xyq(self):

        self.tableWidget.currentRow() + 1:
           


if __name__=="__main__":
    app = QApplication(sys.argv)
    windows = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(windows)
    windows.show()
    sys.exit(app.exec_())
  • 写回答

2条回答 默认 最新

  • 关注

    为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关代码图片或者报错信息。便于技术专家团更好地理解问题,并给出解决方案。

    可以编辑题目,修改完成之后评论区回复我下,我安排专家帮您看下问题如何解答~

    评论

报告相同问题?

悬赏问题

  • ¥15 更换了一个新的win10系统,再下载VS时碰到的问题,是C++组件的?
  • ¥15 关于罗技鼠标宏lua文件的问题
  • ¥15 halcon ocr mlp 识别问题
  • ¥15 已知曲线满足正余弦函数,根据其峰值,还原出整条曲线
  • ¥20 无法创建新的堆栈防护界面
  • ¥15 sessionStorage在vue中的用法
  • ¥15 wordpress更换域名后用户图片头像不显示
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework),并且基于qt实现打开一个web
  • ¥30 AD9854 为什么输出波形幅度受限,AI机器人勿扰
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework