PyQt4 - 在单独的线程中运行使用 python 2.7.11 内置模块的函数



我正在申请我的大学毕业论文,我被线程困住了。我试图使一个音频播放器,加载文件到一个表,并播放他们,同时考虑到指定的间隔(基本上睡眠后,每个声音播放)。我可以让列表按顺序播放,但它在同一个线程中,所以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

#为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类,因为我想要一个快速的方法在单独的线程中运行函数,这就是为什么运行函数执行作为参数

给出的函数当我在没有GUI和线程模块的情况下进行测试时,

可以工作,但是当我引入GUI时,它停止工作并崩溃了我的程序就像我说的play_stop和snd_play是Ui_Mainwindow类的函数如果没有线程,我的应用程序将无法正常工作。

我发现线程模块的问题(这是我的错,当然)对于任何有类似问题的人,这里是正确的类代码:

    class Create_thread(threading.Thread):
        def __init__(self,function):
            threading.Thread.__init__(self)
            self.function=function
        def run(self):
            self.function()

所以我只需要调用线程类的init函数。这里还有play_stop函数代码:

    def play_stop(self):
        t=Create_thread(self.snd_play) #calls the actual function to play
        t.start()

@101感谢您的回复

相关内容

  • 没有找到相关文章

最新更新