如何解决使用 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 举报,一经查实,本站将立刻删除。