PyQt5 clicked和clicked[bool]信號區別

網友的解釋(跟實踐有衝突)

在使用命令按鈕QPushButton時,最常用的信號列表如下:

關於“將當前狀態傳遞給外界”這句作用難以理解,其實就是:控件中的clicked()信號和clicked(bool)信號是兩個不同的信號

1、clicked()

映射槽函數時,clicked()信號映射到的槽函數是不帶參的,比如槽函數可以寫作def ClickedAction(self),與按鈕動作連接的語句爲self.btn.clicked.connect(self.ClickedAction);

2、clicked(bool)

clicked(bool)信號映射到的槽函數可以是帶參數的,比如槽函數可以寫作def ClickedAction(self,status),其中參數status就是按鈕當前的狀態(Tru or False),而與按鈕動作連接的語句self.btn.clicked[bool].connect(self.ClickedAction),無需使用lambda傳入status。
很顯然,clicked(bool)只是當按鈕的setCheckable()設置爲True時纔有可能使得status爲True(即設置後按鈕想點燈開關一樣,能夠按一下保持一直開,再按下保持一直關),否則開關點擊一下後仍爲關閉狀態,status一直爲False。clicked例子很簡單,在此不說了,clicked[bool]相關情況下的實例如下:

(1)默認爲setCheckable(False)的按鈕

#按鈕及其動作定義
self.btn=QPushButton('驗證')
#self.btn.setCheckable(True)
self.btn.setFont(QFont('TypeLand 康熙字典體試用版',20))
self.btn.clicked.connect(self.ClickedAction)  #注意這裏不用傳入參數status,動作會自動獲取status
 
 
#動作定義
def ClickedAction(self,status):
    print(f"按下按鈕了,此後按鈕狀態爲:{status}")

#結果
按下按鈕了,此後按鈕狀態爲:False

(2)setCheckable(True)的按鈕

#按鈕及其動作定義
self.btn=QPushButton('驗證')
self.btn.setCheckable(True)
self.btn.setFont(QFont('TypeLand 康熙字典體試用版',20))
self.btn.clicked.connect(self.ClickedAction)  #注意這裏不用傳入參數status,動作會自動獲取status
 
 
#動作定義
def ClickedAction(self,status):
    print(f"按下按鈕了,此後按鈕狀態爲:{status}")

# 結果
按下按鈕了,此後按鈕狀態爲:True

我的實驗

上面說了一堆別人的見解,但是我實際操作發現。不管是clicked還是clicked[bool],槽函數如果帶參都是可以的,而且都能獲取到status的值的

其中statu在setCheckable(True)的時候,第一次點擊的值爲True,否則都是爲False

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章