PyQt5系列教程(22):按鈕(QPushButton)

上期我們介紹了PyQt中的液晶顯示屏(QLabel),這期我們介紹一下PyQt中常用的一個小部件標籤(QPushButton)。

總體介紹

QPushButton小部件提供了一個命令按鈕。

按鈕或命令按鈕可能是任何圖形用戶界面中最常用的小部件。按下(或者單擊)按鈕以命令計算機執行某個操作或回答問題。典型的按鈕是確定,應用,取消,關閉,是,否和幫助。

一個命令按鈕是矩形的,通常顯示一個描述其動作的文本標籤。快捷鍵可以通過在文本前面加一個符號來指定。例如:

button = new QPushButton"&Download", selfn

在這個例子中,快捷鍵是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極速打包界面軟體

TAG:PyQt | Python | Python教程 |