Я подаю заявку на выпускную работу в университете, и я застрял с потоками. Я пытаюсь создать аудиоплеер, который загружает файлы в таблицу и воспроизводит их, принимая во внимание указанные интервалы (в основном, спит после каждого воспроизводимого звука). Я могу получить список для воспроизведения по порядку, но он находится в том же потоке, поэтому графический интерфейс получает stcuk, пока это происходит. Я использовал PyQt4 для графического интерфейса, потому что это был самый быстрый способ создания графического интерфейса, и у меня слабое зрение, поэтому я не хочу тратить время на кодирование всего пользовательского интерфейса. Я видел несколько примеров QThread, но, похоже, мне не удается заставить мою многопоточность работать. Я использую winsound для воспроизведения звуков, и они загружаются из внутреннего списка, который соответствует таблице, отображаемой в графическом интерфейсе, file_list - это переменная экземпляра Ui_MainWindow (в основном переменная основного класса приложения), и все функции также определены в этом class Вот соответствующий код:
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, потому что мне нужен был быстрый способ запуска функций в отдельных потоках, поэтому функция запуска выполняет функцию, указанную в качестве аргумента.
это работало, когда я тестировал без графического интерфейса и с модулем потоковой передачи, но когда я представил графический интерфейс, он перестал работать и разбил мою программу, как я сказал, что play_stop и snd_play являются функциями класса Ui_Mainwindow. Любая помощь будет принята с благодарностью, потому что без потоковой обработки мое приложение не будет работать должным образом.
threading
с PyQt, и в вашем случае я бы сказал, что это проще. - person all or None   schedule 21.08.2016