我正在大学申请毕业论文,我仍然坚持使用线程。 我试图制作一个音频播放器,将文件加载到一个表中并在考虑指定的时间间隔时播放它们(基本上在播放每个声音后休眠)。我可以让列表按顺序播放,但它在同一个线程中,因此GUI会在发生这种情况时受到攻击。我使用PyQt4作为GUI,因为它是制作GUI的最快方式,而且我有视力障碍,所以我不想浪费时间编写所有UI内容。 我已经看到了一些QThread示例,但我似乎无法让我的线程工作。 我使用winsound播放声音,它们从内部列表加载,该列表与GUI上显示的表格相对应 file_list是一个Ui_MainWindow实例变量(基本上是主应用程序类的变量),所有函数也在该类中定义 这是相关代码:
import sys
from PyQt4 import QtGui, QtCore
from winsound import PlaySound, SND_FILENAME
#some用于Ui_MainWindow类的更多代码
def play_stop(self):
t=Create_thread(self.snd_play) t.started.connect(func)
t.start()
def snd_play(self):
if not self.is_playing:
self.is_playing=True
for e in self.file_list:
PlaySound(e, SND_FILENAME)
self.is_playing=False
class Create_thread(QtCore.QThread):
def __init__(self,function):
QtCore.QThread.__init__(self)
self.function=function
def run(self):
self.function()
def main():
app=QtGui.QApplication([])
window=Ui_MainWindow()
window.setupUi(window)
window.show()
sys.exit(app.exec_())
我创建了一个Create_thread类,因为我想要一个快速的方法在不同的线程中运行函数,这就是run函数执行作为参数给出的函数的原因
当我在没有GUI和线程模块的情况下进行测试时这很有效但是当我介绍GUI时它停止了工作并且崩溃了我的程序 就像我说的那样,play_stop和snd_play是Ui_Mainwindow类的功能 任何帮助都将非常感激,因为没有线程我的应用程序将无法正常工作。
答案 0 :(得分:1)
我发现了线程模块的问题(当然是我的错) 对于任何有类似问题的人来说,这里有正确的班级代码:
class Create_thread(threading.Thread):
def __init__(self,function):
threading.Thread.__init__(self)
self.function=function
def run(self):
self.function()
所以我只需要调用Thread类的 init 函数。 这里还有play_stop功能代码:
def play_stop(self):
t=Create_thread(self.snd_play) #calls the actual function to play
t.start()
@ 101感谢您的回复