У меня есть игра памяти, сделанная в PyQt5. Когда пользователь выигрывает, я хотел бы показать сообщение с тремя вариантами (кнопками):
- 'играть снова'
- «обменять карты»
- 'покидать'
Я думаю, что способ реализовать это - использовать QMessageBox, но я не мог понять, как его правильно использовать. Я знаю, что это должно быть что-то вроде:
reply = QMessageBox.question(self,
'title',
'text',
button1 | button2 | button3,
defaultButton)
if reply == button1:
# play again
elif reply == button2:
# change cards
else:
# close application
Я также знаю, что существуют StandardButtons
, которые я могу использовать для выхода (QMessageBox.Close
, но я не уверен), но я не знаю, как добавить их и другие пользовательские кнопки, чтобы они работали.
ИЗМЕНИТЬ 1
Хорошо, я думаю, что сделал несколько шагов в правильном направлении, хотя чего-то все еще не хватает. Я смог добавить пользовательские кнопки в свой QMessageBox
, я могу print
что-то сделать, когда одна из них нажата, но любой метод, который я вызываю после, ничего не делает. Кроме того, если выбрать «выход», он просто закроет окно сообщения (я использую метод QCloseEvent
, возможно, это неправильно).
Вот обновленный код вместе с несколькими комментариями:
msgBox = QMessageBox()
msgBox.setStandardButtons(QMessageBox.Close)
restartBtn = msgBox.addButton('play again', QMessageBox.ActionRole)
changeBtn = msgBox.addButton('change cards', QMessageBox.ActionRole)
ret = msgBox.exec()
if ret == QMessageBox.Close:
QCloseEvent() # should close the app, but it closes the message box
elif msgBox.clickedButton() == restartBtn:
print('RESTART')
self.restart # should call 'restart' method, but it doesn't
elif msgBox.clickedButton() == changeBtn:
print('CHANGE')
changeBtn.clicked.connect(self.showDialog) # should call 'showDialog' method, but it doesn't
Как видите, я пробовал и с self.methodname
, и с button.clicked.connect(self.methodname)
, но ни один не работал.