Сценарий Python Pyside2 pause, пока пользователь не вернет значение из ползунка или qlineedit

Можно ли приостановить сценарий Python, когда выполняются определенные условия, чтобы пользователь мог войти во входные данные через всплывающее окно, предпочтительно слайдер pyside2 или qlineedit, а затем возобновить выполнение сценария после того, как пользователь задал значение.

Единственное, что я смог найти, это вопрос qMessageBox, но единственные варианты, которые я могу вставить, - это две кнопки, которые в этом случае бесполезны.

Любая помощь будет высоко оценена.

Спасибо!!

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 и установить макет, чтобы изменить внешний вид.

Что здесь происходит?

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
Другие вопросы по тегам