首页 > 解决方案 > PyQT5 的输入应用程序对话框没有停留在 windows 10 屏幕上

问题描述

我正在开发一个 PyQt5 应用程序,它以字符串格式从用户那里获取输入,然后在代码中进一步利用该变量。

问题:在 while 循环中调用输入框代码(理想情况下,该框应该停留并等待用户的输入,从而也保持 while 循环执行),而不是它不会停留在屏幕上,而是闪烁并在 windows 10 上执行脚本时会在几分之一秒内消失。但是当我单独执行下面提到的代码片段时,就不会出现此类问题。

代码片段

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QLabel

def call_qt():
    app = QApplication(sys.argv)
    gui = QWidget()
    text, ok = QInputDialog.getText(gui, "User Input",
                """Do you wish to Continue [Y/N]?""")
    #print(text, ok)
    if ok:
        app.exit()
    else:
        app.exit()

    return text

print(call_qt())

我无法弄清楚,这个代码片段可能有什么问题。你能帮我解决这个问题吗?另外,我是 PyQt5 的新手。

困惑:Ubuntu 18 上不存在同样的问题。

标签: pythonpyqt5

解决方案


同样的问题应该发生在 ubuntu 上。当您点击 OK 时,应用程序会自行终止,您将无法看到输出。试试这个代码,它会在小部件上打印结果

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QInputDialog, QVBoxLayout, QLabel)


def call_qt(main_widow):
    text, ok = QInputDialog.getText(main_widow, "User Input", "Do you wish to Continue [Y/N]?")
    return text, ok

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main_widow = QWidget()
    layout = QVBoxLayout()
    label = QLabel()
    layout.addWidget(label)
    main_widow.setLayout(layout)
    main_widow.show()
    text, ok = call_qt(main_widow)
    # if ok:
    #     sys.exit()
    label.setText(text)
    sys.exit(app.exec_())

推荐阅读