input() - 来自PyQt表单的样式输入

时间:2017-09-03 22:43:51

标签: python python-3.x pyqt user-input

我创建了一个PyQt应用程序,它基本上模仿了一个简单的终端(带有只读QTextEdit的纯文本显示,带有QLineEdit的输入,在用户按下返回时发送其内容),这样我就可以添加额外的显示人造终端旁边的元素。

使用普通的shell终端,我可以输出如下文字:

print("Hello world!")

使用GUI进行复制相对容易:

class MainWindow(QWidget):

    # Setup etc...

    def OnReturnPressed(self, e):

        # Linked to the appropriate signal of the LineEdit containing
        # user input

        input = self.GetLineEditContentsAndClear()
        MainCode(input, self.Output)

    def Output(self, text):
        # ...Outputs text to the display TextEdit


def MainCode(input, outputFuction)

    outputFunction("Hello World!")

同样,我可以从默认终端获取输入,如下所示:

name = input("Enter your name:")

但是,我不知道如何使用GUI进行等效操作,因为主要代码(如上面的输出示例中所示)必须由GUI输入触发。

我目前最好的尝试是从QWidget的QLineEdit“返回键按下”信号调用主代码,将QLineEdit中的任何文本传递给主代码,然后每当我从主代码传递到return需要新的输入,但这会导致绝对的混乱,因为我试图回到代码执行中的同一点,就像我return编辑时那样。

有没有办法编写一个类似input()的函数来等待来自GUI的输入然后返回它并从中断处继续执行?我想要的是能够做到这样的事情:

import mygui  # Contains all necessary GUI code

def MainCode():

    # Setup and initialize GUI, then run it as a separate thread
    # or process
    #
    # For the sake of the example, call it 'myguiinstance'

    # Setup other stuff

    # Main Loop
    while(true):

        input = myguiinstance.GetInput("Enter input")
        # Puts the main code on hold until the GUI returns input.

        while not CheckIfInputIsValid(input) #Defined elsewhere
            input = myguiinstance.GetInput("Invalid input. Enter input:")

        output1, output2, output3 = ProcessInput(input)

        output = format("Foo: {0}\nBar: {1}\nFoobar: {2}",
            output1, output2, output3)
        myguiinstance.Output(output)

0 个答案:

没有答案