QSlider работает как кнопка
Я делаю музыкальный плеер с помощью PyQy5 и pygame, проблема в том что ползунок громкости работает как кнопка.
Проблема в том что ползунок отключает звук в начале и больше он никак не изменяется, т.е. у него есть два положения ON и OFF.
Код дизайна:
from PyQt5 import QtCore, QtGui, QtWidgets
from os import system
import pygame
import subprocess
pygame.init()
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(841, 439)
Dialog.setAutoFillBackground(False)
Dialog.setStyleSheet("QDialog{ \n"
" backgraund-color: black\n"
"}\n"
"QPushButton1: hover{\n"
" backgraund-color: silver;\n"
" color: white\n"
"}\n"
"\n"
"\n"
"\n"
"\n"
"")
self.progressBar = QtWidgets.QProgressBar(Dialog)
self.progressBar.setGeometry(QtCore.QRect(20, 270, 781, 23))
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName("progressBar")
self.horizontalSlider = QtWidgets.QSlider(Dialog)
self.horizontalSlider.setGeometry(QtCore.QRect(20, 250, 741, 22))
self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)
self.horizontalSlider.setObjectName("horizontalSlider")
self.verticalSlider = QtWidgets.QSlider(Dialog)
self.verticalSlider.setGeometry(QtCore.QRect(310, 80, 22, 160))
self.verticalSlider.setOrientation(QtCore.Qt.Vertical)
self.verticalSlider.setObjectName("verticalSlider")
self.toolButton = QtWidgets.QToolButton(Dialog)
self.toolButton.setGeometry(QtCore.QRect(23, 1, 59, 19))
self.toolButton.setObjectName("toolButton")
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(150, 310, 59, 28))
self.pushButton.setStyleSheet("QPushButton {\n"
" backgraund-color: black;\n"
"}\n"
"\n"
"QPushButton:hover{\n"
" backgraund-color: silver;\n"
"}")
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(Dialog)
self.pushButton_2.setGeometry(QtCore.QRect(20, 310, 59, 28))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton_3 = QtWidgets.QPushButton(Dialog)
self.pushButton_3.setGeometry(QtCore.QRect(85, 310, 59, 28))
self.pushButton_3.setStyleSheet("QPushButton")
self.pushButton_3.setObjectName("pushButton_3")
self.toolButton_2 = QtWidgets.QToolButton(Dialog)
self.toolButton_2.setGeometry(QtCore.QRect(120, 1, 59, 19))
self.toolButton_2.setObjectName("toolButton_2")
self.graphicsView = QtWidgets.QGraphicsView(Dialog)
self.graphicsView.setGeometry(QtCore.QRect(20, 50, 256, 192))
self.graphicsView.setObjectName("graphicsView")
self.treeView = QtWidgets.QTreeView(Dialog)
self.treeView.setGeometry(QtCore.QRect(500, 50, 256, 192))
self.treeView.setObjectName("treeView")
self.lcdNumber = QtWidgets.QLCDNumber(Dialog)
self.lcdNumber.setGeometry(QtCore.QRect(660, 310, 91, 31))
self.lcdNumber.setObjectName("lcdNumber")
self.textBrowser = QtWidgets.QTextBrowser(Dialog)
self.textBrowser.setGeometry(QtCore.QRect(230, 310, 421, 31))
self.textBrowser.setObjectName("textBrowser")
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.toolButton.setToolTip(_translate("Dialog", "<html><head/><body><p>What this?</p><p><br/></p></body></html>"))
self.toolButton.setText(_translate("Dialog", "settings"))
self.pushButton.setText(_translate("Dialog", ">"))
self.pushButton_2.setText(_translate("Dialog", "<"))
self.pushButton_3.setText(_translate("Dialog", "pause"))
self.toolButton_2.setToolTip(_translate("Dialog", "<html><head/><body><p>Opened your file</p></body></html>"))
self.toolButton_2.setText(_translate("Dialog", "open file"))
код:
import sys
from PyQt5 import QtWidgets
import lol
from tkinter import filedialog
from tkinter import *
import os
import os.path
import subprocess
import pygame
class ExampleApp(QtWidgets.QMainWindow, lol.Ui_Dialog):
def __init__(self):
# Это здесь нужно для доступа к переменным, методам
# и т.д. в файле design.py
super().__init__()
self.setupUi(self)
self.toolButton_2.clicked.connect(open)
self.verticalSlider.valueChanged[int].connect(intr)
# Это нужно для инициализации нашего дизайн
def main():
app = QtWidgets.QApplication(sys.argv) # Новый экземпляр QApplication
window = ExampleApp() # Создаём объект класса ExampleApp
window.show() # Показываем окно
app.exec_() # и запускаем приложение
def open():
folder_selected = pygame.mixer.music.load(filedialog.askopenfilename())
pygame.mixer.music.play()
def intr(open):
pygame.mixer.music.set_volume(open)
if __name__ == '__main__':
main()
Помогите пожалуйста звук должен изменяться плавно. Заранее всем спасибо.
Ответы (1 шт):
Я не смог воспроизвести ваш пример, но я покажу вам один вариант, как бы я сделал музыкальный плеер с помощью PyQt5.
Я думаю, что вам не сложно будет применить его в своем коде.
Qt Multimedia является важным модулем, который предоставляет богатый набор типов QML и классов C++ для обработки мультимедийного контента. Он также предоставляет необходимые API для доступа к функциям камеры и радио.
import sys
from PyQt5.Qt import QUrl, Qt
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from PyQt5.QtWidgets import QApplication, QWidget, QSlider, QPushButton, QGridLayout
class Demo(QWidget):
def __init__(self):
super(Demo, self).__init__()
self.player = QMediaPlayer(self)
self.volumeslider = QSlider(Qt.Horizontal)
self.volumeslider.setFocusPolicy(Qt.NoFocus)
self.volumeslider.valueChanged[int].connect(self.change_volume)
self.volumeslider.setValue(100)
self.volume = self.volumeslider.value()
play_btn = QPushButton('Play')
play_btn.clicked.connect(self.playMedia)
pause_btn = QPushButton('Pause')
pause_btn.clicked.connect(self.pauseMedia)
stop_btn = QPushButton('Stop')
stop_btn.clicked.connect(self.stopMedia)
layout = QGridLayout(self)
layout.addWidget(play_btn, 0, 0)
layout.addWidget(pause_btn, 0, 1)
layout.addWidget(stop_btn, 0, 2)
layout.addWidget(self.volumeslider, 1, 0, 1, 3)
self.player.setMedia(QMediaContent(QUrl('http://rfm-live-mp3-64.scdn.arkena.com/rfm.mp3')))
self.player.setVolume(self.volume)
self.player.play()
def change_volume(self, value):
self.player.setVolume(value)
def playMedia(self):
self.player.play()
def pauseMedia(self):
self.player.pause()
def stopMedia(self):
self.player.stop()
if __name__ == '__main__':
app = QApplication(sys.argv)
demo = Demo()
demo.show()
sys.exit(app.exec_())
