Python Pyside2暂停脚本,直到用户从滑块或qlineedit返回值

时间:2018-09-19 18:26:31

标签: python pyside2

是否可以在满足某些条件时暂停python脚本,以便用户可以通过弹出窗口(最好是pyside2滑块或qlineedit)输入输入,然后在用户提供值后恢复脚本。

我唯一能找到的是qMessageBox问题,但是我只能在其中输入的是2个按钮,在这种情况下没有用。

任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用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并设置布局以更改外观。

发生了什么事?

基本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