如何解决当 QThread 包含 PyAudio() 流时,PySide2 和 PySide6 GUI 会冻结,而 PyQt5 运行良好这是一个错误吗?
使用 pyside2
或 PySide6
时,在 PyAudio
中打开 QThread
流时,许多与 GUI
和网络浏览器相关的操作将导致 {{ 1}} 冻结。
但是使用 GUI
和相同的代码不会遇到任何问题。我想知道这是 PyQt5
的错误吗?
我在 PySide
上运行它,使用 Windows10
、pyside2(5.15.0)
、PySide6(6.0.0)
。
代码如下:
PyQt5(5.15.0)
运行后,先点击import sys,pyaudio
from pyside2.QtCore import *
from pyside2.QtWidgets import *
from pyside2.QtGui import *
import threading,webbrowser
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
widget = Widget()
self.setCentralWidget(widget)
self.show()
class Widget(QWidget):
def __init__(self):
super().__init__()
self.btn1 = QPushButton('''Open Being''')
self.btn1.clicked.connect(lambda: webbrowser.open('https://www.bing.com'))
self.btn2 = QPushButton('''Get pyaudio''')
self.btn2.clicked.connect(self.getPyaudioThread)
layout = QVBoxLayout()
layout.addWidget(self.btn1)
layout.addWidget(self.btn2)
self.setLayout(layout)
def getPyaudioThread(self):
self.pyaudioThread = PyaudioThread()
self.pyaudioThread.start()
class PyaudioThread(QThread):
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
def __init__(self):
super().__init__()
def record(self,stream):
while True:
stream.read(self.CHUNK)
def run(self):
self.p = pyaudio.PyAudio()
stream = self.p.open(channels=self.CHANNELS,format=self.FORMAT,rate=self.RATE,input=True,frames_per_buffer=self.CHUNK)
# threading.Thread(target=self.record,args=[stream]).start()
print('pyaudio required')
def main():
app = QApplication(sys.argv)
mainWindow = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
按钮,然后点击Get pyaudio
按钮,然后整个Open Being
都会冻结。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。