Изучение PyQt: создание всплывающих окон «да/нет» в Python

Вы хотите добавить интерактивные всплывающие окна с опциями «Да» и «Нет» в свое приложение PyQt? Не смотрите дальше! В этой статье блога мы углубимся в различные методы создания всплывающих окон «Да/Нет» с использованием PyQt в Python. Мы будем вести себя непринужденно и по ходу дела будем приводить примеры кода, которые помогут вам лучше понять концепции.

Метод 1: использование QMessageBox

Самый простой способ создать всплывающее окно «Да/Нет» в PyQt — использовать встроенный класс QMessageBox. Вот простой пример:

from PyQt5.QtWidgets import QApplication, QMessageBox
app = QApplication([])
result = QMessageBox.question(None, "Confirmation", "Are you sure?", QMessageBox.Yes | QMessageBox.No)
if result == QMessageBox.Yes:
    print("User clicked Yes")
else:
    print("User clicked No")
app.exec_()

Метод 2. Пользовательское диалоговое окно с кнопками

Если вы предпочитаете более индивидуальный подход, вы можете создать собственное диалоговое окно с кнопками. Вот пример:

from PyQt5.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QPushButton
app = QApplication([])
class YesNoDialog(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle("Confirmation")
        layout = QVBoxLayout()
        layout.addWidget(QLabel("Are you sure?"))
        yes_button = QPushButton("Yes")
        yes_button.clicked.connect(self.on_yes_clicked)
        layout.addWidget(yes_button)
        no_button = QPushButton("No")
        no_button.clicked.connect(self.on_no_clicked)
        layout.addWidget(no_button)
        self.setLayout(layout)
    def on_yes_clicked(self):
        print("User clicked Yes")
        self.accept()
    def on_no_clicked(self):
        print("User clicked No")
        self.reject()
dialog = YesNoDialog()
result = dialog.exec_()
if result == QDialog.Accepted:
    print("Dialog accepted")
else:
    print("Dialog rejected")
app.exec_()

Метод 3: Сигналы и слоты

Для более продвинутого подхода вы можете использовать сигналы и слоты для обработки выбора пользователя. Вот пример:

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton
from PyQt5.QtCore import pyqtSignal
app = QApplication([])
class YesNoWidget(QWidget):
    yes_clicked = pyqtSignal()
    no_clicked = pyqtSignal()
    def __init__(self, parent=None):
        super().__init__(parent)
        layout = QVBoxLayout()
        layout.addWidget(QLabel("Are you sure?"))
        yes_button = QPushButton("Yes")
        yes_button.clicked.connect(self.yes_clicked.emit)
        layout.addWidget(yes_button)
        no_button = QPushButton("No")
        no_button.clicked.connect(self.no_clicked.emit)
        layout.addWidget(no_button)
        self.setLayout(layout)
widget = YesNoWidget()
def on_yes_clicked():
    print("User clicked Yes")
def on_no_clicked():
    print("User clicked No")
widget.yes_clicked.connect(on_yes_clicked)
widget.no_clicked.connect(on_no_clicked)
widget.show()
app.exec_()

Заключение

В этой статье мы рассмотрели три различных метода создания всплывающих окон «Да/Нет» в PyQt с использованием Python. Мы начали с простого класса QMessageBox, перешли к созданию пользовательского диалога и, наконец, использовали сигналы и слоты для большей гибкости. Выберите метод, который лучше всего соответствует вашим потребностям, и улучшите взаимодействие с пользователем в ваших приложениях PyQt!

Реализуя эти всплывающие окна «Да/Нет» в своем приложении PyQt, вы можете обеспечить лучший пользовательский опыт, позволяя пользователям принимать обоснованные решения. Так что вперед и начинайте интегрировать эти методы в свои проекты!