如何停止QThread在python PyQt5中的重复功能?

时间:2019-08-27 18:50:13

标签: python multithreading pyqt5 qthread

我正在使用pafy模块下载youTube视频,当我单击“获取质量”按钮时,它可以在第一时间完美运行,但是当尝试获取其他视频的质量时,有时会重复该功能。

“获取质量”按钮将获取视频的名称和质量

如果我使用Terminate(),它将第二次无法使用...

我的整个代码和widget.ui在这里:https://pastebin.com/0kityt79

看看这些图片,您会明白我的意思。

我第一次单击“获取质量”

我第二次单击“获取质量”

df_replace2 =  df.replace(to_replace = r"(\r)(?![A-Z])", value = "", regex=True)
df_replace3 = df_replace2.replace(to_replace = r"(\r)(?![a-z])", value = " ", regex=True)

1 个答案:

答案 0 :(得分:0)

问题不在于QThread部分,而是在于每次您单击按钮时,都在workersQYD对象之间添加了信号插槽连接。只需在QYD.__init__中创建您需要的所有连接,而不是QYD.getQuality。另外,您不必启动线程,也不必每次按按钮都将工作程序移至线程,因此也可以将所有内容移至QYD.__init__。因此,总而言之,QYD应该类似于

class KYD(QWidget,myui):

    urlSignal = pyqtSignal(str)

    def __init__(self,parent=None):
        super(QWidget,self).__init__(parent)

        self.get_quality_btn.clicked.connect(self.getQuality_vdieos)

        self.mythread=QThread()
        self.worker=workers()
        self.worker.moveToThread(self.mythread)

        self.worker.info.connect(self.information)
        self.worker.urlLink.connect(self.insertQulaity)
        self.urlSignal.connect(self.worker.qualities)

        self.mythread.start()

    def getQuality_vdieos(self):
        try:
            url=self.Url.text()
            self.urlSignal.emit(url) 
        except Exception as e:
            print(str(e))