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 上不存在。

这部分的问题在于窗口中的进程处理。对 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())

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

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_())

最新更新