Как можно сделать кнопку неактивной, пока все поля не будут заполнены?

  • 24 августа 2023 г. 8:46
Ответы на вопрос 4
Приветствую! Вы можете использовать встроенные события сигналов и слотов в PyQt, чтобы реализовать это.

1. Создайте два поля для ввода (QLineEdit) и одну кнопку (QPushButton) в вашем приложении.
2. В соответствующих слотах полей для ввода, установите функцию, которая будет следить за изменением в полях ввода (следить за событием `textChanged`).
3. В этих функциях проверяйте, являются ли все поля для ввода пустыми. Если все поля заполнены, включите кнопку. Если хотя бы одно поле пустое, отключите кнопку.

Вот пример кода, который демонстрирует реализацию этой функциональности:

```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, QPushButton, QVBoxLayout, QWidget


class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('My App')

        self.input1 = QLineEdit()
        self.input1.textChanged.connect(self.validate_inputs)

        self.input2 = QLineEdit()
        self.input2.textChanged.connect(self.validate_inputs)

        self.button = QPushButton('Start')
        self.button.setEnabled(False)

        layout = QVBoxLayout()
        layout.addWidget(self.input1)
        layout.addWidget(self.input2)
        layout.addWidget(self.button)

        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

    def validate_inputs(self):
        if self.input1.text() and self.input2.text():
            self.button.setEnabled(True)
        else:
            self.button.setEnabled(False)


if __name__ == '__main__':
    app = QApplication([])
    window = MyWindow()
    window.show()
    app.exec_()
```

При запуске этого кода, кнопка "Start" будет неактивной, пока оба поля для ввода не будут заполнены. Как только оба поля будут заполнены, кнопка станет активной.
self.allNeededLineEditsAreNotEmpty:
    allNeededLineEdits = [
        self.lineEdit_to_networks_dir,
        self.lineEdit_to_markup_dir,
    ]
    is_filled = False
    for lineEdit in allNeededLineEdits:
        if lineEdit.text() != "":
            is_filled = True
            break
    self.pushButton_start_work.setEnabled(is_filled) 
 self.allNeededLineEditsAreNotEmpty 
    allNeededLineEdits = [
        self.lineEdit_to_networks_dir,
        self.lineEdit_to_markup_dir,
    ]
    is_filled = False
    for lineEdit in allNeededLineEdits:
        if lineEdit.text() != "":
            is_filled = True
            break
    self.pushButton_start_work.setEnabled(is_filled)
Похожие вопросы