有没有办法让QLineEdit的行为像QInputDialog?

2024-04-20 13:06:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我在PyQt开发一个基于文本的游戏。对于“window”我有一个QTextDisplay,对于实际的提示有一个QLineEdit。它们被连接起来,这样当用户在行编辑中按回车键时,它就会出现在文本显示中。不幸的是,这需要一个GUI应用程序,而不是一个简单的命令程序,因为需要有图片(不是我的决定)。在

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

另一方面,由于不喜欢while循环,我如何在Qt中编写游戏循环呢?qti应该使用线程吗?在


Tags: 用户文本命令程序应用程序游戏编辑图片
1条回答
网友
1楼 · 发布于 2024-04-20 13:06:41

我想你只需要信号和插槽就可以随心所欲了。Qt运行它自己的事件循环,您不应该尝试在它上面编写第二个事件循环。在

在处理输入交互处理的类中,添加一个插槽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会坐在那里,什么也不做,直到用户戳它,然后它会处理键盘/鼠标事件的大小,不管怎样。当用户在QLineEdit小部件中点击return时,小部件发出信号editingFinisheddoc)。我们将其连接到我们创建的Slot,它基本上只是等待一个信号来触发它(signal和slots只是一个经过深思熟虑的类型安全回调方案)。一旦插槽接收到信号,它就执行它的函数,然后返回到等待状态。(在本例中,函数从行编辑框中获取文本,清除框,然后执行游戏代码需要执行的任何操作)。在

相关问题 更多 >