使用 QThread 将 Pyqt5 程序转换为 Pyside6

问题描述

我看过关于 Pyqt5 的 QThread 教程,但我的窗口是在 PySide6 中制作的,我无法转换它。

这是 PyQt5 中的代码:

from PyQt5 import QtGui
from PyQt5.QtWidgets import QApplication,QDialog,QProgressBar,QPushButton,QVBoxLayout
import sys
from PyQt5.QtCore import Qt,QThread,pyqtSignal

value = 0
class MyThread(QThread):
    # Create a counter thread
    change_value = pyqtSignal(int)

    def run(self):

        import youtube_dl as ytb

        link = 'https://www.youtube.com/watch?v=NO7LtckKDj0&ab_channel=Quinn'

        def myhook(d):

            value = d['_percent_str']
            value = value.replace('%','')
            value = value.replace(' ','')
            value = value.replace("\'",'')
            value = value.replace('\"',"")
            value = int(float(value))
            self.change_value.emit(value)
            print(value,type(value))

        ydl_opts = {
            'progress_hooks': [myhook],'quiet': True
        }
        with ytb.YoutubeDL(ydl_opts) as ydl:
            ydl.download([link])


class Window(QDialog):
    def __init__(self):
        super().__init__()
        self.title = "PyQt5 ProgressBar"
        self.top = 200
        self.left = 500
        self.width = 300
        self.height = 100
        self.setWindowIcon(QtGui.QIcon("icon.png"))
        self.setWindowTitle(self.title)
        self.setGeometry(self.left,self.top,self.width,self.height)
        vbox = QVBoxLayout()
        self.progressbar = QProgressBar()
        # self.progressbar.setOrientation(Qt.Vertical)
        self.progressbar.setMaximum(100)
        self.progressbar.setStyleSheet("QProgressBar {border: 2px solid grey;border-radius:8px;padding:1px}"
                                       "QProgressBar::chunk {background:yellow}")
        # qlineargradient(x1: 0,y1: 0.5,x2: 1,y2: 0.5,stop: 0 red,stop: 1 white);
        # self.progressbar.setStyleSheet("QProgressBar::chunk {background: qlineargradient(x1: 0,stop: 1 white); }")
        # self.progressbar.setTextVisible(False)
        vbox.addWidget(self.progressbar)
        self.button = QPushButton("Start Progressbar")
        self.button.clicked.connect(self.startProgressBar)
        self.button.setStyleSheet('background-color:yellow')
        vbox.addWidget(self.button)
        self.setLayout(vbox)
        self.show()

    def startProgressBar(self):
        self.thread = MyThread()
        self.thread.change_value.connect(self.setProgressVal)
        self.thread.start()

    def setProgressVal(self,val):
        self.progressbar.setValue(val)


App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec())

主要问题是 pyqtSignal 在 Pyside 中似乎不存在。 如果你能帮助我,非常感谢你,我是 GUI Python 新手,所以这个问题可能有点愚蠢,但我真的找不到我能理解的教程......

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...