Сценарий 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