PyQt5系列教程(23):工具按鈕(QToolButton)
上期我們介紹了PyQt中的按鈕(QLabel),這期我們再來介紹一下PyQt中另一個按鈕(QToolButton)。
總體介紹
QToolButton類為命令或選項提供快速訪問按鈕,通常在QToolBar中使用。
工具按鈕是一個特殊的按鈕,可以快速訪問特定的命令或選項。與普通命令按鈕相反,工具按鈕通常不顯示文本標籤,而是顯示一個圖標。
工具按鈕通常在使用QToolBar.addAction()創建新的QAction實例時創建,或者使用QToolBar.addAction()將現有的操作添加到工具欄中。也可以像其他任何小部件一樣構建工具按鈕,並將其與其他小部件一起排列在布局中。
工具按鈕的一個經典用途是選擇工具;例如繪圖程序中的「筆」工具。這將通過使用QToolButton作為切換按鈕來實現。
QToolButton支持自動浮起。在自動浮起模式下,只有當滑鼠指向該按鈕時,該按鈕才會繪製一個3D幀。當在QToolBar中使用按鈕時,該功能會自動打開。用setAutoRaise()改變它。
工具按鈕的圖標被設置為QIcon。這使得可以為禁用和活動狀態指定不同的像素圖。當按鈕的功能不可用時使用禁用的pixmap。當滑鼠指針懸停在按鈕上時,顯示活動像素圖。
按鈕的外觀和尺寸可以通過setToolButtonStyle()和setIconSize()來調整。在QMainWindow的QToolBar中使用時,該按鈕自動調整為QMainWindow的設置。工具按鈕也可以顯示箭頭符號,而不是一個圖標,用arrowType指定。
工具按鈕也可以使用彈出按鈕。彈出菜單可以使用setMenu()來設置。使用setPopupMode()來配置菜單設置的工具按鈕可用的不同模式。默認模式是DelayedPopupMode,它有時與Web瀏覽器中的「後退」按鈕一起使用。按下按鈕一會兒,彈出一個菜單,顯示可跳轉到的頁面列表。
更多的介紹請將官網:QToolButton Class
小例子
我們以360瀏覽器為例,工具欄上面有一個網銀的按鈕,如下圖:
我們這個例子,就是模擬一下。
部分核心代碼
需要全屏展示,錄個屏算了。
https://www.zhihu.com/video/929463607962501120class Example(QWidget):n def initUI(self):nn tb = QToolButton(self)n tb.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)n # tb.setArrowType(Qt.DownArrow)n tb.setToolTip(選擇適合你的支付方式)n tb.setPopupMode(QToolButton.MenuButtonPopup)n tb.setText(支付方式)n tb.setIcon(QIcon(icon/bank.ico))n tb.setAutoRaise(True)nn menu = QMenu(self)n self.alipayAct = QAction(QIcon(icon/alipay.ico),支付寶支付, self)n self.wechatAct = QAction(QIcon(icon/wechat.ico),微信支付, self)n self.visaAct = QAction(QIcon(icon/visa.ico),Visa卡支付, self)n self.master_cardAct = QAction(QIcon(icon/master_card.ico),萬事達卡支付, self)nn menu.addAction(self.alipayAct)n menu.addAction(self.wechatAct)n menu.addSeparator()n menu.addAction(self.visaAct)n menu.addAction(self.master_cardAct)nn tb.setMenu(menu)n self.show()nn self.alipayAct.triggered.connect(self.on_click)n self.wechatAct.triggered.connect(self.on_click)n self.visaAct.triggered.connect(self.on_click)n self.master_cardAct.triggered.connect(self.on_click)n n def on_click(self):n if self.sender() == self.alipayAct:n QDesktopServices.openUrl(QUrl(https://www.alipay.com/))n elif self.sender() == self.wechatAct:n QDesktopServices.openUrl(QUrl(https://pay.weixin.qq.com/index.php))n elif self.sender() == self.visaAct:n QDesktopServices.openUrl(QUrl(https://www.visa.com.cn/))n else:n QDesktopServices.openUrl(QUrl(https://www.mastercard.com.cn/zh-cn.html))n
在這個例子中,當我們滑鼠移到工具按鈕上才會呈現出來,而且有圖標和文字信息。
代碼解析
tb = QToolButton(self)n
新建一個QToolButton對象。
tb.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)n
該屬性保持工具按鈕是僅顯示圖標,僅顯示文本,還是顯示圖標旁邊/下方的文本。默認是Qt.ToolButtonIconOnly。要使工具按鈕的樣式遵循系統設置,請將此屬性設置為Qt.ToolButtonFollowStyle。 在Unix上,將使用來自桌面環境的用戶設置。 在其他平台上,Qt.ToolButtonFollowStyle只意味著圖標。
工具按鈕的樣式,描述按鈕的文本和圖標應該如何顯示:
# tb.setArrowType(Qt.DownArrow)n
這句話我做了注釋,是為了給大家演示一下。大家可以看下沒有注釋的效果,如下圖:
出現了一個三角形。
setArrowType(Qt.ArrowType)n
設置按鈕是否顯示一個箭頭,而不是一個正常的圖標。這將顯示一個箭頭作為QToolButton的圖標。 默認情況下,這個屬性被設置為Qt.NoArrow。
具體的描述如下:
tb.setToolTip(選擇適合你的支付方式)n
這個很好理解,就是一個小貼士,當滑鼠移動到按鈕的時候就會顯示信息。
tb.setPopupMode(QToolButton.MenuButtonPopup)n
描述了彈出式菜單與工具按鈕一起使用的方式:
還是用圖片來得更直觀些:
QToolButton.DelayedPopup
QToolButton.MenuButtonPopup
QToolButton.InstantPopup
tb.setText(支付方式)ntb.setIcon(QIcon(icon/bank.ico))n
設置圖標和文字。
tb.setAutoRaise(True)n
此屬性保持是否啟用自動升起。默認是禁用的(即False)。當使用QMacStyle時,此屬性在macOS上當前被忽略。
self.alipayAct = QAction(QIcon(icon/alipay.ico),支付寶支付, self)nself.wechatAct = QAction(QIcon(icon/wechat.ico),微信支付, self)nself.visaAct = QAction(QIcon(icon/visa.ico),Visa卡支付, self)nself.master_cardAct = QAction(QIcon(icon/master_card.ico),萬事達卡支付, self)n
新建QAction對象,What』s the QAction?
QAction類提供了可以插入到窗口小部件中的抽象用戶界面操作。
在應用程序中,可以通過菜單,工具欄按鈕和鍵盤快捷鍵調用許多常用命令。由於用戶期望每個命令都以相同的方式執行,所以無論使用哪個用戶界面,都將每個命令表示為一個動作是有用的。
操作可以添加到菜單和工具欄,並會自動保持同步。例如,在文字處理器中,如果用戶按下粗體工具欄按鈕,粗體菜單項將被自動檢查。
動作可以創建為獨立的對象,但也可以在菜單的構建過程中創建。 QMenu類包含用於創建適合用作菜單項的操作的便捷功能。
QAction可能包含圖標,菜單文本,快捷方式,狀態文本,「這是什麼?」文本和工具提示。其中大部分可以在構造函數中設置。它們也可以用setIcon(),setText(),setIconText(),setShortcut(),setStatusTip(),setWhatsThis()和setToolTip()獨立設置。對於菜單項,可以使用setFont()設置單個字體。
通俗點說:就是菜單或者按鈕中需要執行的操作。
self.alipayAct.triggered.connect(self.on_click)nself.wechatAct.triggered.connect(self.on_click)nself.visaAct.triggered.connect(self.on_click)nself.master_cardAct.triggered.connect(self.on_click)n
當用戶激活動作時發出此信號。例如,當用戶點擊菜單選項,工具欄按鈕,或者按動作的快捷鍵組合,或者當調用trigger()時。值得注意的是,當setChecked()或toggle()被調用時,它不會被發射。
當我們執行各個菜單的時候發出這個信號,然後連接到我們的槽函數。
def on_click(self):n if self.sender() == self.alipayAct:n QDesktopServices.openUrl(QUrl(https://www.alipay.com/))n elif self.sender() == self.wechatAct:n QDesktopServices.openUrl(QUrl(https://pay.weixin.qq.com/index.php))n elif self.sender() == self.visaAct:n QDesktopServices.openUrl(QUrl(https://www.visa.com.cn/))n else:n QDesktopServices.openUrl(QUrl(https://www.mastercard.com.cn/zh-cn.html))n
- 首先判斷我們激活了哪個菜單
- 其次調用QDesktopServices類的openUrl方法,去打開特定的支付頁面。也就是說調用系統默認的瀏覽器去打開指定的網頁。QUrl類為使用URL提供了一個方便的介面。
最後
ok,今天的介紹暫時就到這裡吧,下期會對按鈕部分進行一個綜合的概述。如果你喜歡本篇文章,請給我點贊、讚賞(推薦,^_^),分享給你的好友們吧!
如果你想要本次教程中的相關源碼,請關注微信公眾號:學點編程吧,發送pyqt523,會自動得到相應的百度網盤下載鏈接。
題外話:本周的PyQt5就更新這一個吧!家人生病需要照顧。秋冬季是呼吸系統疾病高發期,各位要保重身體。身體最重要!
推薦閱讀:
※Flask中,用upgrade命令遷移資料庫後,生成的資料庫里沒有數據表怎麼回事?
※Python GUI教程(八):在主窗口中調用對話框
※數學不行還學AI-第4話-圖解張量(內有惡貓)
※Python數據分析之anaconda安裝和使用