我正在開發一個軟件,它有一個虛擬鋼琴,可以用MIDI鍵盤控制。我想要做的是我想要一個線程觀看midi輸入,當有數據傳入時,相應的過程應該被觸發(在這裏播放聲音和動畫鍵)。我如何用Qt線程和事件來做到這一點?PyQt中的線程化
2
A
回答
3
下面是關於如何使用自定義的信號良好的頁面:
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/new_style_signals_slots.html
- 舊風格: http://pyqt.sourceforge.net/Docs/PyQt4/old_style_signals_slots.html
- 新風格: http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html
這裏是一個頁面,顯示如何使用QThread: http://joplaete.wordpress.com/2010/07/21/threading-with-pyqt4/
這幾乎是你所需要的。你用一個run()函數創建QThread,這個函數將循環和監控你的midi端口,然後發出一個自定義信號。您將在啓動應用程序時啓動此線程。你可以將你創建的QThread的自定義信號連接到你的主應用程序的處理程序或任何應該通知的窗口小部件。
0
這裏有小例子:
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_()
相關問題
- 1. 線程化函數-PyQt GUI
- 2. PyQt的線程從線程
- 3. PyQT和線程
- 4. PyQT類e線程
- 5. PyQt的多線程例子
- 6. PyQt中的線程和信號問題
- 7. PyQt線程屬性錯誤
- 8. PyQt信號跨線程
- 9. 終端線程使用PyQt
- 10. PyQt和Maya,線程= False?
- 11. 控制PyQt中的異步線程 - 多線程或多處理?
- 12. Python - 使用PyQt進行線程編程
- 13. pyQt和線程應用程序崩潰
- 14. PyQt的多線程,不能爲父母
- 15. PyQT線程最簡單的方法
- 16. pyqt多線程 - 無法同時運行單獨的線程?
- 17. 優化您的PyQt應用程序
- 18. PyQt國際化
- 19. PyQt子類化
- 20. 在PyQt中StandardContextMenu國際化
- 21. PyQt - 從另一個線程修改GUI
- 22. PyQt:從GUI發送信息到線程
- 23. pyqt:如何正確退出線程
- 24. 將值發送給工作線程PyQt?
- 25. 保持PyQt UI響應線程
- 26. 與python pyqt一起使用線程?
- 27. 使工作線程等待GUI線程中的用戶輸入? Python/PyQt
- 28. 從編程化變化中分離用戶交互:PyQt,QComboBox
- 29. 簡化python中的線程
- 30. 從python線程(不是主線程)啓動pyQt線程有什麼不好?
創建一個線程。發出一個信號。如果您需要更廣泛的答案,您需要更具體地瞭解您嘗試過的以及不起作用的東西,而不是要求提供如何使用QThreads和信號的完整通用示例。 – jdi 2012-03-23 19:01:52
我有一些按鈕作爲我的鋼琴鍵。我已經完成了使用電腦鍵盤來播放這些鍵的程序。現在我必須用我的MIDI鍵盤來演奏。所以現在我通過按一個鍵完成它,程序將進入MIDI讀取循環,然後觸發相應的動作。但是這裏的其他Qt函數沒有被執行。所以我只是想實現一個單獨的事件,當midi端口中有數據時發出信號。我怎麼用PyQt做? – 2012-03-23 19:36:52