シグナルとスロットだけでやりたいことができると思います。Qt は独自のイベント ループを実行します。その上に 2 番目のイベント ループを記述しようとしないでください。
入力の解釈を処理するクラスで、スロットdeal_with_input
を追加し、信号editingFinished
をそれに接続します。
元:
class main_window(QTextDisplay):
def __init__(self,input_widget,parent=self,*arg,**kwargs):
QTextDisplay.__init__(self,parent=parent) # and what ever other args you use
self.input_widget = input_widget
self.input_widget.editingFinished.connect(self.proc_input)
## what ever other set up you do
@QtCore.Slot()
def proc_input(self):
input_str = self.input_widget.text()
if input_str = '':
return
self.input_widget.clear()
# do what ever it is you do with the input text, update the display
正確なクラス設計について疑問を呈することはできますが (おそらく、このロジックをテキスト表示ウィジェットに埋め込みたくないでしょう)、ロジックは保持されます。
基本的に、Qt はそこに座って、ユーザーが突くまで何もせず、キーボード/マウス イベントのサイズ変更などを処理します。ユーザーがウィジェットで return キーをQLineEdit
押すと、ウィジェットはシグナルeditingFinished
( doc ) を送信します。これを作成した に接続しますSlot
。これは基本的にシグナルがトリガーされるのを待つだけです (シグナルとスロットはよく考え抜かれたタイプ セーフなコールバック スキームです)。スロットがシグナルを受信すると、その機能を実行し、待機状態に戻ります。(この場合、関数は行編集ボックスからテキストを取得し、ボックスをクリアしてから、ゲーム コードで必要なことを実行します)。