2013-01-21 66 views
0

我正在PyQt的基于文本的游戏工作。我有一个用于“窗口”的QTextDisplay和一个用于实际提示的QLineEdit。它们被连接起来,以便当用户在行编辑中点击返回键时,它会出现在文本显示中。不幸的是,这需要是一个GUI应用程序,而不是一个简单的命令程序,因为需要有图片(而不是我的决定)。有没有办法让QLineEdit像QInputDialog一样工作?

我希望执行暂停并等待用户输入到行编辑中(很像input()在命令应用程序中工作)。 QInputDialog以这种方式运行,除了启动一个对话框。这非常麻烦。我尝试while循环,但它看起来不像PyQt喜欢它们(它挂起,实际上并没有击中app.exec_())。

在旁注中,由于while循环的不喜欢,我该如何去编写Qt中的游戏循环?我应该使用QThread吗?

回答

0

我觉得你可以用信号和插槽来做你想做的事情。 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小部件时,小部件发出信号editingFinisheddoc)。我们将它连接到我们创建的Slot,它基本上只是等待信号触发它(信号和插槽只是一个深思熟虑的类型安全的回调方案)。一旦插槽接收到信号,它就执行它的功能,然后返回等待。 (在这种情况下,该功能从行编辑框抓取文本,清除该框,然后执行您的游戏代码需要执行的操作)。

相关问题