我觉得你可以用信号和插槽来做你想做的事情。 Qt运行它自己的事件循环,你不应该尝试在它之上写第二个事件循环。
在处理interpreating输入的类添加的槽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
您可以通过精确一流的设计quible(也许你不想要这个逻辑在你的文本显示控件内嵌),但逻辑将举行。
基本上,Qt会坐在那里,什么都不做,直到用户戳它,然后它会处理键盘/鼠标事件的大小调整,无论如何。当用户点击返回QLineEdit
小部件时,小部件发出信号editingFinished
(doc)。我们将它连接到我们创建的Slot
,它基本上只是等待信号触发它(信号和插槽只是一个深思熟虑的类型安全的回调方案)。一旦插槽接收到信号,它就执行它的功能,然后返回等待。 (在这种情况下,该功能从行编辑框抓取文本,清除该框,然后执行您的游戏代码需要执行的操作)。