私は、受信したMIDIデータに応じて「受け入れられた」状態で終了するQMesssageBoxを取得しようとしているプロジェクトに取り組んでいます。 MIDI入力ライブラリ(pygame.midi)は、データが到着したかどうかを確認するために入力をポーリングする必要があるため、QThreadを処理してバッファにデータが到着したときに "dataReceived"シグナルを送出します。私はその後、QMessageBoxの受け入れ()スロットにこの信号を添付:PyQt - QThreadからQMessageBoxを閉じる
def midiLearn(self, mainWindowInstance, widget):
class midiLearnWait(QtCore.QThread):
dataReceived = QtCore.pyqtSignal()
def __init__(self, midiInputDevice, parent=None):
super(midiLearnWait, self).__init__(parent)
self.midiInputDevice = midiInputDevice
def run(self):
if self.midiInputDevice.poll():
self.dataReceived.emit()
if self.midiInputDevice:
midiLearnMessage = QtGui.QMessageBox(1, 'MIDI Learn', 'Please move a controller.',
QtGui.QMessageBox.Cancel)
midiInputThread = midiLearnWait(self.midiInputDevice)
#just trigger accept for testing
midiInputThread.dataReceived.connect(lambda: midiLearnMessage.accept())
midiInputThread.start()
ret = midiLearnMessage.exec_()
if ret == QtGui.QMessageBox.Cancel:
return
else:
QtGui.QMessageBox.warning(mainWindowInstance, 'MIDI Error', 'No MIDI input selected.')
残念ながら、これは動作するようには思えない - MIDIデータがプログラムに送信されますと、メッセージボックスが受け入れれることは決してありません。 MIDIライブラリをどのように設定したか、またはこのGUIコードをどうやってやったかで問題があるかどうかは、私が完全には分かっていません。誰かが私がどのようにコードのGUIの側面を設定しようとしたかで何らかのエラーを指摘できれば、それは大いに感謝するだろう。
'dataReceived'が発行されていますか?私はあなたのコードと私の 'QMessageBox'を正常に' accept'sを複製しようとしました。 – Avaris
@Avarisあなたが正しいです、私は完全に調査することなく私の質問を投稿しました!私がself.midiInputDevice.poll()の条件を削除した場合、messageBoxも私のために受け入れます。問題は他の場所にあるはずです。 – Bitrex