Ich habe ein Memory-Spiel in PyQt5 gemacht. Wenn der Benutzer gewinnt, würde Ich mag eine Nachricht mit drei Optionen (Tasten) zeigen:Verwenden Sie QMessageBox in PyQt5, um mein Spiel neu zu starten oder die Anwendung zu beenden
- 'wieder spielen'
- 'change Karten' 'beenden'
I Ich denke, der Weg, dies zu implementieren, besteht darin, eine QMessageBox zu verwenden, aber ich konnte nicht verstehen, wie man sie richtig benutzt. Ich weiß, dass es so etwas wie sein muss:
reply = QMessageBox.question(self,
'title',
'text',
button1 | button2 | button3,
defaultButton)
if reply == button1:
# play again
elif reply == button2:
# change cards
else:
# close application
Ich weiß auch, gibt es StandardButtons
, die ich zum Verlassen verwenden können (QMessageBox.Close
, aber ich bin mir nicht sicher), aber ich weiß nicht, wie kann ich sie hinzufügen und andere benutzerdefinierte Schaltflächen, damit es funktioniert.
EDIT 1
Ok, ich glaube ich ein paar Schritte in die richtige Richtung gemacht, auch wenn etwas fehlt stil ist. Ich konnte benutzerdefinierte Tasten zu meinem QMessageBox
hinzufügen, ich bin in der Lage, print
etwas, wenn einer von ihnen angeklickt wird, aber jede Methode, die ich anrufe, macht nichts. Wenn "quit" ausgewählt ist, schließt es auch das Meldungsfeld (ich verwende die QCloseEvent
Methode, vielleicht ist es falsch). Hier
ist der aktualisierte Code, zusammen mit einigen Bemerkungen:
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
Wie Sie sehen können, habe ich versucht, beide mit self.methodname
und mit button.clicked.connect(self.methodname)
, aber keiner arbeitete.
Akzeptiert, da es meine eigene Antwort vervollständigt. Danke nochmal)! – umbe1987