如果要取得 QMessageBox 點擊事件,可以將最後 exec() 執行方法宣告為變數,該變數為一組數字,如果是預設按鈕,可以直接透過 if 判斷式進行判斷,就可以知道點擊了哪個按鈕。
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
def show():
mbox = QtWidgets.QMessageBox(Form)
mbox.setText('hello')
mbox.setStandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No | QtWidgets.QMessageBox.Cancel)
mbox.setDefaultButton(QtWidgets.QMessageBox.Yes)
ret = mbox.exec() # 取得點擊的按鈕數字
if ret == QtWidgets.QMessageBox.Yes:
print(1)
elif ret == QtWidgets.QMessageBox.No:
print(2)
elif ret == QtWidgets.QMessageBox.Cancel:
print(3)
btn = QtWidgets.QPushButton(Form)
btn.move(10, 10)
btn.setText('open')
btn.clicked.connect(show)
Form.show()
sys.exit(app.exec_())
如果是自訂按鈕,則 ret 可以採用「順序」的方式,最先添加的按鈕順序為 0,接著依序增加,只要知道順序,就能知道點擊了哪顆按鈕。
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
def show():
mbox = QtWidgets.QMessageBox(Form)
mbox.setText('hello')
a = mbox.addButton('Apple',3) # 前方多了變數 a,順序 0
b = mbox.addButton('Banana',3) # 前方多了變數 b,順序 1
c = mbox.addButton('Orange',3) # 前方多了變數 c,順序 2
mbox.setDefaultButton(b) # 預先選取 b
ret = mbox.exec()
print(ret)
if ret == 0:
print('Apple')
if ret == 1:
print('Banana')
if ret == 2:
print('Orange')
btn = QtWidgets.QPushButton(Form)
btn.move(10, 10)
btn.setText('open')
btn.clicked.connect(show)
Form.show()
sys.exit(app.exec_())
如果不想要使用「順序」作為判斷依據,也可以使用 mbox.clickedButton().text()
方法取得點擊按鈕的文字,再透過 if 判斷式就能知道點擊了哪顆按鈕。
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
Form.setWindowTitle('oxxo.studio')
Form.resize(300, 200)
def show():
mbox = QtWidgets.QMessageBox(Form)
mbox.setText('hello')
a = mbox.addButton('Apple',3) # 前方多了變數 a
b = mbox.addButton('Banana',3) # 前方多了變數 b
c = mbox.addButton('Orange',3) # 前方多了變數 c
mbox.setDefaultButton(b) # 預先選取 b
mbox.exec()
text = mbox.clickedButton().text() # 取得點擊的按鈕文字
if text == 'Apple':
print('Apple')
if text == 'Banana':
print('Banana')
if text == 'Orange':
print('Orange')
btn = QtWidgets.QPushButton(Form)
btn.move(10, 10)
btn.setText('open')
btn.clicked.connect(show)
Form.show()
sys.exit(app.exec_())