PyQt5 projem ve simpleaudio hakkında bir sorun

Bu proje üzerinde pek çok sıkıntılar gidermiştim başka bir konuda yardımlarınız sayesinde.
Şimdi biraz daha değiştirmek istedim.
Şuan çalıştırdığınız zaman “5dakika” butonu anında çalışacaktır. Sorunu üzerinde uğraşabilmemiz için bu şekilde yaptım.

Sorun şu ki :
Dakikalardan herhangi birinin süresi bittiğinde bir müzik çalıyor ( alarm misali ).
Bu müziği manuel olarak durdurabilmek istediğim için buna özel bir buton oluşturdum (“stopbutton”)

Arayüzde “Müziği Durdur” Şeklinde göreceksiniz bu butonu.
Benim buna bastığım zaman normalde müziğin durması lazım fakat bunu bir türlü ayarlayamadım.

Şuanki hali yapabildiğimiz en iyi hali diyebilirim. Hiç bir işlevi yok yani butonun şu anda.
Yardımcı olursanız sevinirim.
Sadece bu (self.stopbutton / “Müziği Durdur”) butonu çalışır hale getirmek istiyorum

şu kısımdaki

yerini self.wave_obj.play() şeklinde çalıştırmayı denedim. Ancak bu müziğin direkt çalışmasına sebep oldu. Açar açmaz.
Ve dakikalar işlevsiz hale geldi.

kısmının içinde :

Artı olarak şöyle gördüğünüz kısımlardaki “play_obj” kodunun sonuna parantez gelmesi gerekiyor.
Müziğin çalışması için.

Bu konuyu açana kadar uğraştığım kısımlarda bu netliklere ulaştım.
self.play_obj = self.wave_obj.play"“parantezsiz”" olması lazım
lambda:self.play_obj"“parantezli”" olması lazım

Bu bilgileri de ekleyeyim dedim daha rahat yardımcı olabilirsiniz belki diye.
Şimdiden teşekkür ediyorum

import sys

from PyQt5 import QtWidgets

import simpleaudio as sa

from PyQt5.QtCore import QTimer

class pencere(QtWidgets.QWidget):

    def __init__(self):

        

        super().__init__()

        self.init_ui()

        self.timer = QTimer()

        self.wave_obj = sa.WaveObject.from_wave_file("C:/Users/taylan öztürk/Desktop/NCS/Alan Walker/Wav/Force.wav")

        self.play_obj = self.wave_obj.play

                        

        self.Timer = QTimer()

    def init_ui(self):

        self.yazialani = QtWidgets.QLabel("Pomodoro İçin Hangi İşlemi Uygulayacaksınız ?")

        self.button1 = QtWidgets.QRadioButton("25 Dakika")

        self.button2 = QtWidgets.QRadioButton("5 Dakika")

        self.button3 = QtWidgets.QRadioButton("20 Dakika")

        self.stopbutton = QtWidgets.QRadioButton("Müziği Durdur")

        self.start = QtWidgets.QPushButton("Başlat")

              

                                

        v_box = QtWidgets.QVBoxLayout()

        v_box.addWidget(self.yazialani)

        v_box.addWidget(self.button1)

        v_box.addWidget(self.button2)

        v_box.addWidget(self.button3)       

        v_box.addWidget(self.stopbutton)

        v_box.addWidget(self.start)

        v_box.addStretch()

        h_box = QtWidgets.QHBoxLayout()

        h_box.addStretch()

        h_box.addLayout(v_box)

        h_box.addStretch()

        self.setLayout(h_box)

        self.start.clicked.connect(lambda : self.click(self.button1.isChecked() , self.button2.isChecked() , self.button3.isChecked() , self.stopbutton.isChecked() , self.yazialani) )

        

    def click(self,button1,button2,button3,yazialani,stopbutton):

        if button1:

            self.Timer.stop()

            self.Timer.singleShot(1500000, lambda:self.play_obj())

            self.yazialani.setText("25 Dakikalık İşlem Başlatıldı")

        if button2:

            self.Timer.stop()

            self.Timer.singleShot(1, lambda:self.play_obj())

            self.yazialani.setText("5 Dakikalık İşlem Seçildi")

        if button3:

            self.Timer.stop()

            self.Timer.singleShot(900000, lambda:self.play_obj())

            self.yazialani.setText("20 Dakikalık İşlem Seçildi")

        if stopbutton:

            self.play_obj().stop()

                

    

    

app = QtWidgets.QApplication(sys.argv)

window = pencere()

window.setStyleSheet("background:rgb(247,209,150);")

window.setWindowTitle("Pomodoro")

window.show()

sys.exit(app.exec_())
    self.wave_obj = sa.WaveObject.from_wave_file("C:/Users/taylan öztürk/Desktop/NCS/Alan Walker/Wav/Force.wav")

    self.play_obj = self.wave_obj.play

Bu kullanım çok gereksiz. 1 değişken yeterli:
self.wave_obj = sa.WaveObject.from_wave_file("C:/Users/taylan öztürk/Desktop/NCS/Alan Walker/Wav/Force.wav")

lambda:self.play_obj() kısımlarını şununla değiştirin:

lambda: self.wave_obj.play()

Ses dosyasını durdurmak için de stop_all() metodunu kullanabilirsiniz:

if stopbutton:
   sa.stop_all()
3 Beğeni

Onu da şunla değiştirebiliriz:

self.wave_obj.play

Evet, olabilir :slight_smile:

1 Beğeni

stop all işe yaradı çok teşekkür ederim :heart:

1 Beğeni