Python Pyside2 暂停脚本直到用户 returns 来自滑块或 qlineedit 的值

Python Pyside2 pause script till user returns a value from a slider or qlineedit

是否可以在满足某些条件时暂停 python 脚本,以便用户可以通过弹出窗口输入内容 window,最好是 pyside2 滑块或 qlineedit,然后继续用户给出值后的脚本。

我唯一能找到的是 qMessageBox 问题,但我可以放入的唯一选项是 2 个按钮,在这种情况下没有用。

任何帮助将不胜感激。

谢谢!!

您可以使用 QDialog。 http://pyside.github.io/docs/pyside/PySide/QtGui/QDialog.html

https://wiki.qt.io/Qt_for_Python_Tutorial_SimpleDialog

做如下的事情。

from PySide import QtGui  # from PySide2 import QtWidgets or from qtpy import QtWidgets

dialog = QtGui.QDialog()
lay = QtGui.QFormLayout()
dialog.setLayout(lay)

slider = QtGui.QSlider()
lay.addRow(QtGui.QLabel('Slider'), slider)

... # Accept buttons

ans = dialog.exec_()  # This will block until the dialog closes
# Check if dialog was accepted?

value = slider.value()

... # Continue code.

与exec_QMessageBox类似的是这个例子。 https://gist.github.com/tcrowson/8152683242018378a00b

您或许可以使用 QMessageBox 并设置布局来改变外观。

这是怎么回事?

Essential PySide 通过 运行 事件循环工作。它运行这个无限的 while 循环,从队列中取出事件并对其进行处理。任何鼠标移动或按钮点击都是一个事件。

app = QApplication([])

app.exec_()  # This is running the event loop until the application closes.
print('here')  # This won't print until the application closes

您可以使用任何小部件手动复制它。

app = QApplication([])  # Required may be automatic with IPython

slider = QSlider()  # No Parent
slider.show()

# Slider is not visible until the application processes the slider.show() event
app.processEvents()
while slider.isVisible():  # When user clicks the X on the slider it will hide the slider
    app.processEvents()  # Process events like the mouse moving the slider

print('here')  # This won't print until the Slider closes

... # Continue code script