一、引言
QDialogButtonBox本身只提供4種信號,分別是accepted、rejected、clicked和helpRequested,在《PyQt(Python+Qt)學習隨筆:Designer中的QDialogButtonBox的accepted、rejected和helpRequested信號》介紹了這些按鈕中有部分會產生相同的accepted或rejected信號,有部分不會產生accepted或rejected信號,那么怎么確認點擊了按鈕只能通過clicked信號。
在《PyQt(Python+Qt)學習隨筆:Designer中的QDialogButtonBox的clicked信號參數QAbstractButton *解決辦法》介紹了怎么建立QDialogButtonBox的clicked信號與槽函數的連接的方法,並介紹該信號對應槽函數的參數button就是一個QPushButton類型的按鈕,可以通過button.text()判斷點擊的按鈕,實際上除了使用button.text()這種方法來識別點擊按鈕之外,還有一種QDialogButtonBox提供的方法來判斷點擊的按鈕的方法,這個方法就是通過QDialogButtonBox.button()方法。
二、通過兩種方法確認點擊button的實現
下面代碼為QDialogButtonBox的clicked信號連接的槽函數代碼:
def buttonBoxClicked(self,button):
standButtonId = [QDialogButtonBox.Ok, QDialogButtonBox.Open, QDialogButtonBox.Save, QDialogButtonBox.Cancel,
QDialogButtonBox.Close, QDialogButtonBox.Discard, QDialogButtonBox.Apply,
QDialogButtonBox.Reset, QDialogButtonBox.RestoreDefaults, QDialogButtonBox.Help,
QDialogButtonBox.SaveAll, QDialogButtonBox.Yes, QDialogButtonBox.YesToAll, QDialogButtonBox.No,
QDialogButtonBox.NoToAll, QDialogButtonBox.Abort, QDialogButtonBox.Retry,
QDialogButtonBox.Ignore]
standButtonIdName = ["QDialogButtonBox.Ok","QDialogButtonBox.Open","QDialogButtonBox.Save","QDialogButtonBox.Cancel","QDialogButtonBox.Close","QDialogButtonBox.Discard","QDialogButtonBox.Apply","QDialogButtonBox.Reset","QDialogButtonBox.RestoreDefaults","QDialogButtonBox.Help","QDialogButtonBox.SaveAll","QDialogButtonBox.Yes","QDialogButtonBox.YesToAll","QDialogButtonBox.No","QDialogButtonBox.NoToAll","QDialogButtonBox.Abort","QDialogButtonBox.Retry","QDialogButtonBox.Ignore"]
standButtonName = ["OK", "Open", "Save", "Cancel", "Close", "Discard", "Apply", "Reset", "Restore Defaults",
"Help", "Save All", "&Yes", "Yes to &All", "&No", "N&o to All", "Abort", "Retry", "Ignore"]
#注意standButtonName中部分含有快捷鍵的定義,快捷鍵由“ALT+字母” 組成,字母為上述名字中有&符號后面的字母。
#通過按鈕名字btnName找按鈕的buttonID
btnName = button.text()
try:index = standButtonName.index(btnName)
except Exception as e:
index = -1
print(f"Not found buttonName:{btnName}")
else:
print(f"通過按鈕名字{btnName}找到的buttonID:{standButtonIdName[index]}")
# 通過按鈕對象確認點擊按鈕的buttonID
found = False
index = -1
for btnid in standButtonId:
index += 1
btn = self.buttonBox.button(btnid) #buttonBox為QDialogButtonBox的實例對象
if btn == button:
found = True
break
if found:
print(f"通過按鈕對象確認點擊按鈕為:{standButtonIdName[index]}")