как отобразить сообщение с двумя кнопками в python qt designer - PullRequest
0 голосов
/ 18 апреля 2020

Я создаю небольшой клон тральщика, и у меня есть функция для события, когда пользователь нажимает на бомбу, когда на кнопке отображается «Бум», но я также хочу добавить функцию, где появляется что-то вроде меню, запрашивающее Пользователь, которого они потеряли, и предоставьте им две кнопки, одну для продолжения, другую с просьбой начать новую игру.

def buttonClickedkill(self):
    # sender() tells us who caused the action to take place
    clicked = self.sender()
    #letter=clicked.text()  # the buttons have the letters on them
    #print(f"Button -{letter}- was clicked!")
    # 1) Disable the button
    clicked.setEnabled(False)
    clicked.setText("boom")
    QMainWindow.__init__(self)

, поэтому я хочу добавить еще одну функцию, где появляется всплывающее окно и говорит что-то вроде:

извините, вы взорвали бомбу и умерли!

продолжить? Новая игра!

с двумя кнопками «продолжить» и «новая игра», у меня есть новая функция игры и все.

также не могли бы вы предоставить мне необходимый сценарий, который закроет окно, как только будет нажата одна из кнопок?

1 Ответ

1 голос
/ 18 апреля 2020

Это точный вариант использования QMessageBox. Например:

reply = QMessageBox.question(self, 'Title', 'You lost! Continue?')

Эта строка вызывает всплывающее окно и блокирует основной GUI, пока пользователь не нажмет кнопку. Поскольку я выбрал QMessageBox.question, по умолчанию используются кнопки «да» и «нет». Вы можете спросить переменную reply, нажал ли пользователь кнопку «да» (QMessageBox.Yes) или «нет» (QMessageBox.No).

Рабочий пример:

import sys

from PyQt5.QtWidgets import (QApplication, QLabel, QMainWindow, 
                             QMessageBox, QPushButton, QVBoxLayout, 
                             QWidget)


class MyApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.widget = QWidget(self)
        self.setCentralWidget(self.widget)
        layout = QVBoxLayout()
        self.widget.setLayout(layout)

        self.button = QPushButton(parent=self, text="Click Me!")
        self.button.clicked.connect(self.button_clicked_kill)
        self.text = QLabel(parent=self, text='')

        layout.addWidget(self.button)
        layout.addWidget(self.text)

    def button_clicked_kill(self):
        reply = QMessageBox.question(self, 'Title', 'You lost! Continue?')
        if reply == QMessageBox.Yes:
            self.text.setText('User answered yes')
        if reply == QMessageBox.No:
            self.text.setText('User answered no')


if __name__ == '__main__':
    app = QApplication()
    gui = MyApp()
    gui.show()
    sys.exit(app.exec_())

Который генерирует:

enter image description here

...