Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQT5';的输入应用程序对话框未保留在windows 10屏幕上_Python_Pyqt5 - Fatal编程技术网

Python PyQT5';的输入应用程序对话框未保留在windows 10屏幕上

Python PyQT5';的输入应用程序对话框未保留在windows 10屏幕上,python,pyqt5,Python,Pyqt5,我正在开发一个PyQt5应用程序,它以字符串格式接收用户的输入,然后在代码中进一步使用该变量。 问题:在while循环中调用输入框代码时(理想情况下,输入框应该停留并等待用户的输入,从而保持while循环的执行),相反,它不会停留在屏幕上,在windows 10上执行脚本时,它会在几秒钟内闪烁并消失。但是当我单独执行下面提到的代码片段时,这种类型的问题就不会出现了 代码片段 import sys from PyQt5.QtWidgets import QApplication, QWidget,

我正在开发一个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上不存在。

同样的问题应该在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_())

这部分的问题是windows中的进程处理。执行QT应用程序的线程化,并在while循环中调用此线程。这应该可以解决问题

from queue import Queue
que = Queue()


def call_qt(out_que):
    import sys
    from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QLabel
    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()

    out_que.put()


while True:
    t = Threading.thread(target=call_qt, args=(que,))
    t.start()
    t.join()
    print("text: ",que.get())

我看了你的片段,我的问题似乎不中肯。让我总结一下:我无法运行PyQt5应用程序两次,似乎旧流程仍然存在。我尝试了“app.exit()”、“sys.exit()”、“del-app”。但它似乎仍然不起作用。我从这里了解到了我的问题:基本上,无法在windows中运行两次QT代码,似乎应用程序正在闪烁和消失。