Потоки в PyQt - PullRequest
       78

Потоки в PyQt

2 голосов
/ 23 марта 2012

Я занимаюсь разработкой программного обеспечения с виртуальным пианино, которым можно управлять с помощью миди-клавиатуры. То, что я пытаюсь сделать, это то, что я хочу, чтобы поток смотрел входы midi и когда поступают данные, должен быть запущен соответствующий процесс (здесь проигрывается звук и анимация клавиши). Как я могу сделать это с Qt Threading и событиями?

Ответы [ 2 ]

3 голосов
/ 23 марта 2012

Вот хорошая страница о том, как использовать пользовательские сигналы: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/new_style_signals_slots.html

А вот страница, показывающая, как использовать QThread: http://joplaete.wordpress.com/2010/07/21/threading-with-pyqt4/

Это почти все, что вам нужно. Вы создаете QThread с функцией run (), которая будет зацикливать и отслеживать ваш миди-порт, а затем подавать пользовательский сигнал. Вы начнете эту тему со своего запуска приложения. И вы должны подключить созданный вами собственный сигнал QThread к обработчикам в вашем главном приложении или к любому виджету, о котором следует уведомлять.

0 голосов
/ 24 марта 2012

Вот небольшой пример:

import time
import sys

from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import SIGNAL, QObject


class DoSomething(QtCore.QThread):
    def __init__(self):
        QtCore.QThread.__init__(self)

    def run(self):
        time.sleep(3)
        self.emit(SIGNAL('some_signal'))


def signalHandler():
    # We got signal!
    print 'Got signal!'
    sys.exit(0)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)

    # Create new thread object.
    d = DoSomething()

    # Connect signalHandler function with some_signal which 
    # will be emited by d thread object.
    QObject.connect(d, SIGNAL('some_signal'), signalHandler, QtCore.Qt.QueuedConnection)

    # Start new thread.
    d.start()

    app.exec_()
...