PyQt5系列教程(22):按鈕(QPushButton)
上期我們介紹了PyQt中的液晶顯示屏(QLabel),這期我們介紹一下PyQt中常用的一個小部件標籤(QPushButton)。
總體介紹
QPushButton小部件提供了一個命令按鈕。
按鈕或命令按鈕可能是任何圖形用戶界面中最常用的小部件。按下(或者單擊)按鈕以命令計算機執行某個操作或回答問題。典型的按鈕是確定,應用,取消,關閉,是,否和幫助。
一個命令按鈕是矩形的,通常顯示一個描述其動作的文本標籤。快捷鍵可以通過在文本前面加一個&符號來指定。例如:
button = new QPushButton("&Download", self)n
在這個例子中,快捷鍵是Alt + D。
按鈕顯示一個文本標籤,還可以選擇一個小圖標。這些可以使用構造函數設置,稍後使用setText()和setIcon()更改。如果該按鈕被禁用,文本和圖標的外觀與GUI風格相關,以使按鈕看起來「禁用」。
當按鈕被滑鼠,空格鍵或鍵盤快捷鍵激活時,按鈕發出clicked()信號。連接到這個信號來執行按鈕的動作。按鈕也提供較少使用的信號,例如pressed()和released()。
對話框中的命令按鈕默認為自動默認按鈕,當用戶在對話框中按下Enter或Return鍵時,該按鈕被激活。你可以用setAutoDefault()來改變它。請注意,自動默認按鈕保留一個額外的空間,這是繪製默認按鈕指示器所必需的。如果你不想要這個按鈕周圍的空間,可以調用setAutoDefault(False)。
最重要的模式或狀態是:
- 可用或不可用(變灰,禁用)。
- 標準按鈕,開關按鈕或菜單按鈕。
- 打開或關閉(僅用於開關按鈕)。
- 默認或正常。對話框中的默認按鈕通常可以使用Enter或Return鍵「激活」。
- 自動重複與否。
- 按下或不按。
注意:在macOS上,當按鈕的寬度變得小於50或者其高度變得小於30時,按鈕的角從圓變為方。使用setMinimumSize()函數來防止這種行為。
命令按鈕的變體是菜單按鈕。這些不僅提供了一個命令,而且提供了多個命令,因為當它們被點擊時,它們彈出一個選項菜單。使用setMenu()方法將一個彈出菜單與一個按鈕相關聯。
更多的介紹請見幫助文檔:QPushButton Class
QPushButton的小例子
部分核心代碼
class Example(QWidget):n def initUI(self):nn bt1 = QPushButton("這是什麼",self)nn self.bt2 = QPushButton(發送驗證碼,self)nn menu = QMenu(self)n menu.addAction(我是)n menu.addSeparator()n menu.addAction(世界上)n menu.addSeparator()n menu.addAction(最帥的)nn bt1.setMenu(menu)nn self.count = 10nn self.bt2.clicked.connect(self.Action)nn self.time = QTimer(self)n self.time.setInterval(1000)n self.time.timeout.connect(self.Refresh)nn self.show()nn def Action(self):n if self.bt2.isEnabled():n self.time.start()n self.bt2.setEnabled(False)n n def Refresh(self):n if self.count > 0:n self.bt2.setText(str(self.count)+秒後重發)n self.count -= 1n else:n self.time.stop()n self.bt2.setEnabled(True)n self.bt2.setText(發送驗證碼)n self.count = 10n
上面這個例子中我們實現了兩個功能:菜單按鈕、帶倒計時的按鈕(賬戶註冊的時候經常會碰到)。這個例子總體來說並不難,主要是給用來講解一下按鈕的一些簡單用法。
menu = QMenu(self)nmenu.addAction(我是)nmenu.addSeparator()nmenu.addAction(世界上)nmenu.addSeparator()nmenu.addAction(最帥的)nbt1.setMenu(menu)n
設置菜單按鈕其實很簡單,首先我們新建一個QMenu對象, 這個我們在《界面搭建》一文中介紹過。這裡的addSeparator(),其實就是給菜單增加一個分隔符。如下圖:
然後將這個菜單添加到QPushButton對象中就行了,很簡單是不是。
第二個例子,我們使用到QTimer這個類,我們前面很多次都用到了這個和時間相關的類。後面會專門的講解的。
- QTimer類提供重複性和單次定時器。QTimer類為定時器提供高級編程介面。要使用它,請創建一個QTimer,將其timeout()信號連接到相應的插槽,然後調用start()。從此以後,它將以固定的時間間隔發出timeout()信號。
- setInterval()該屬性擁有以毫秒為單位的超時時間間隔。此屬性的默認值為0。
self.count = 10self.time = QTimer(self)nself.time.setInterval(1000)nself.time.timeout.connect(self.Refresh)n
我們計劃是當點擊按鈕後進入10秒倒計時,所以這裡設置了變數self.count = 10
然後我們新建了QTimer對象,並定義了超時時間和超時後對應的槽函數。
def Action(self):n if self.bt2.isEnabled():n self.time.start()n self.bt2.setEnabled(False)n
單我們單擊按鈕後,進行判斷若按鈕沒有被禁用,則激活定時器,同時將按鈕禁用,即禁止點擊。
def Refresh(self):n if self.count > 0:n self.bt2.setText(str(self.count)+秒後重發)n self.count -= 1n else:n self.time.stop()n self.bt2.setEnabled(True)n self.bt2.setText(發送驗證碼)n self.count = 10n
進入超時狀態後,我們開始倒計時。同時讓按鈕上的文字不斷的在變化。
當倒計時完成的時候,我們停止定時器。將按鈕恢復成正常的狀態。同時重置倒計時的值,為下次的使用做好準備。
最後
ok,今天的介紹暫時就到這裡吧,下期可能還是和按鈕相關吧。如果你喜歡本篇文章,請給我點贊、讚賞(推薦,^_^),分享給你的好友們吧!
如果你想要本次教程中的相關源碼,請關注微信公眾號:學點編程吧,發送pyqt522,會自動得到相應的百度網盤下載鏈接。
推薦閱讀:
※PyQt5系列教程(4):我猜、我猜、我猜猜猜
※PyQt5系列教程(7):界面搭建
※有哪些顏值高的 PyQt/Qt 應用?
※PyQt5番外篇(2-2):沖頂大會語音答題輔助小工具之解析篇——界面搭建
※教程 | pyqt5極速打包界面軟體