QToolButton 的繼承圖:
QToolButton 之描述:
一個主窗口,我們一般分為 從上到下,標題欄 ,菜單欄(文字) ,工具欄(一般都是圖標,沒文字),工作區,狀態欄。
我們這里說的是工具欄
QToolButton 之繼承:
它繼承自QAbstractButton !
QToolButton 之功能作用:

1 from PyQt5.Qt import * #剛開始學習可以這樣一下導入 2 import sys 3 #1,創建app 4 app = QApplication(sys.argv) 5 6 7 #2,控件的操作: 8 #創建控件 9 window = QWidget() 10 11 12 #設置控件 13 window.setWindowTitle("QCommandLinkButton功能作用") 14 window.resize(500,500) 15 16 bool_btn = QToolButton(window) 17 bool_btn.setText("工具按鈕") 18 ############################當有圖標顯示時候,文本就不會顯示了############################### 19 #它和QPushButton 的不同,就是在於它一般只顯示圖標,不顯示文本,而 20 #QpushButton 既顯示文本又顯示圖標。 21 22 bool_btn.setIcon(QIcon("icon.ico")) 23 #注:圖標大小也可修改! 24 ############################當有圖標顯示時候,文本就不會顯示了############################### 25 26 27 #展示控件 28 window.show() 29 30 #3,進入消息循環 31 sys.exit(app.exec_())

1 from PyQt5.Qt import * #剛開始學習可以這樣一下導入 2 import sys 3 #1,創建app 4 app = QApplication(sys.argv) 5 6 7 #2,控件的操作: 8 #創建控件 9 window = QWidget() 10 11 12 #設置控件 13 window.setWindowTitle("QCommandLinkButton功能作用") 14 window.resize(500,500) 15 16 bool_btn = QToolButton(window) 17 18 bool_btn.setIcon(QIcon("icon.ico")) 19 ########################################################### 20 bool_btn.setToolTip("這是一個新建按鈕") 21 ########################################################### 22 23 24 25 #展示控件 26 window.show() 27 28 #3,進入消息循環 29 sys.exit(app.exec_())
但是,如果我們實在是想在工具按鈕上一起顯示文字和圖標
如下:

1 from PyQt5.Qt import * #剛開始學習可以這樣一下導入 2 import sys 3 #1,創建app 4 app = QApplication(sys.argv) 5 6 7 #2,控件的操作: 8 #創建控件 9 window = QWidget() 10 11 12 #設置控件 13 window.setWindowTitle("QCommandLinkButton功能作用") 14 window.resize(500,500) 15 16 bool_btn = QToolButton(window) 17 18 bool_btn.setIcon(QIcon("icon.ico")) 19 bool_btn.setText("工具按鈕") 20 21 bool_btn.setToolTip("這是一個新建按鈕") 22 23 bool_btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) 24 25 26 27 28 #展示控件 29 window.show() 30 31 #3,進入消息循環 32 sys.exit(app.exec_())

1 from PyQt5.Qt import * #剛開始學習可以這樣一下導入 2 import sys 3 #1,創建app 4 app = QApplication(sys.argv) 5 6 7 #2,控件的操作: 8 #創建控件 9 window = QWidget() 10 11 12 #設置控件 13 window.setWindowTitle("QCommandLinkButton功能作用") 14 window.resize(500,500) 15 16 bool_btn = QToolButton(window) 17 18 bool_btn.setArrowType(Qt.UpArrow) 19 bool_btn.setArrowType(Qt.RightArrow) 20 #注意,如果箭頭和圖標同時存在的話,箭頭的優先級高 21 22 23 #展示控件 24 window.show() 25 26 #3,進入消息循環 27 sys.exit(app.exec_())

1 from PyQt5.Qt import * #剛開始學習可以這樣一下導入 2 import sys 3 #1,創建app 4 app = QApplication(sys.argv) 5 6 7 #2,控件的操作: 8 #創建控件 9 window = QWidget() 10 11 12 #設置控件 13 window.setWindowTitle("QCommandLinkButton功能作用") 14 window.resize(500,500) 15 16 bool_btn = QToolButton(window) 17 18 bool_btn.setIcon(QIcon("icon.ico")) 19 bool_btn.setIconSize(QSize(50,50)) 20 21 ############################自動提升效果############################### 22 bool_btn.setAutoRaise(True) 23 #當鼠標放上去的時候,會有自動提升的效果 24 25 ############################自動提升效果############################### 26 27 ############################一般的扁平化效果############################### 28 29 btn = QPushButton(window) 30 btn.setFlat(True) 31 btn.move(100,100) 32 btn.setIcon(QIcon("icon.ico")) 33 btn.setIconSize(QSize(50,50)) #當鼠標放上去的時候,也不會提升上來。 34 35 ############################一般的扁平化效果############################### 36 37 38 39 40 #展示控件 41 window.show() 42 43 #3,進入消息循環 44 sys.exit(app.exec_())

1 from PyQt5.Qt import * #剛開始學習可以這樣一下導入 2 import sys 3 #1,創建app 4 app = QApplication(sys.argv) 5 6 7 #2,控件的操作: 8 #創建控件 9 window = QWidget() 10 11 12 #設置控件 13 window.setWindowTitle("QCommandLinkButton功能作用") 14 window.resize(500,500) 15 16 bool_btn = QToolButton(window) 17 18 bool_btn.setIcon(QIcon("icon.ico")) 19 bool_btn.setIconSize(QSize(50,50)) 20 21 bool_btn.setAutoRaise(True) 22 #當鼠標放上去的時候,會有自動提升的效果 23 24 25 ############################給QPushButton按鈕設置菜單############################### 26 27 btn = QPushButton(window) 28 btn.setFlat(True) 29 btn.move(100,100) 30 btn.setText("菜單") 31 32 menu = QMenu(btn) 33 34 sub_menu = QMenu(menu) 35 sub_menu.setTitle("子菜單") 36 relative_action = QAction("最近打開") 37 sub_menu.addAction(relative_action) 38 39 40 new_action = QAction("新建") 41 menu.addAction(new_action) 42 43 open_action = QAction("打開") 44 menu.addAction(open_action) 45 46 menu.addSeparator() 47 menu.addMenu(sub_menu) 48 49 50 btn.setMenu(menu) 51 ############################給QPushButton按鈕設置菜單############################### 52 53 54 55 56 #展示控件 57 window.show() 58 59 #3,進入消息循環 60 sys.exit(app.exec_())
我們把上面的代碼放到工具按鈕上,

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys #1,創建app app = QApplication(sys.argv) #2,控件的操作: #創建控件 window = QWidget() #設置控件 window.setWindowTitle("QCommandLinkButton功能作用") window.resize(500,500) tool_btn = QToolButton(window) tool_btn.setIcon(QIcon("icon.ico")) tool_btn.setIconSize(QSize(50,50)) tool_btn.setAutoRaise(True) #當鼠標放上去的時候,會有自動提升的效果 ############################給工具按鈕設置菜單############################### # btn = QPushButton(window) # btn.setFlat(True) # btn.move(100,100) # btn.setText("菜單") menu = QMenu(tool_btn) sub_menu = QMenu(menu) sub_menu.setTitle("子菜單") relative_action = QAction("最近打開") sub_menu.addAction(relative_action) new_action = QAction("新建") menu.addAction(new_action) open_action = QAction("打開") menu.addAction(open_action) menu.addSeparator() menu.addMenu(sub_menu) tool_btn.setMenu(menu) ############################給工具按鈕設置菜單############################### #展示控件 window.show() #3,進入消息循環 sys.exit(app.exec_())
但是 ,卻不能顯示菜單效果,這時因為有個東西要設置的。
這里涉及到菜單的彈出模式:
它的默認彈出模式是,按住一會才會彈出菜單。
按住不松的應用場景:
按住不送的話,會展示歷史記錄! 這是它的應用場景。
可以通過setPopupMode來改變菜單彈出方式。
tool_btn.setPopupMode(QToolButton.MenuButtonPopup)效果如下:

1 from PyQt5.Qt import * #剛開始學習可以這樣一下導入 2 import sys 3 #1,創建app 4 app = QApplication(sys.argv) 5 6 7 #2,控件的操作: 8 #創建控件 9 window = QWidget() 10 11 12 #設置控件 13 window.setWindowTitle("QCommandLinkButton功能作用") 14 window.resize(500,500) 15 16 tool_btn = QToolButton(window) 17 18 tool_btn.setIcon(QIcon("icon.ico")) 19 tool_btn.setIconSize(QSize(50,50)) 20 21 tool_btn.setAutoRaise(True) 22 #當鼠標放上去的時候,會有自動提升的效果 23 24 25 ############################給工具按鈕設置菜單############################### 26 27 # btn = QPushButton(window) 28 # btn.setFlat(True) 29 # btn.move(100,100) 30 # btn.setText("菜單") 31 32 menu = QMenu(tool_btn) 33 34 sub_menu = QMenu(menu) 35 sub_menu.setTitle("子菜單") 36 relative_action = QAction("最近打開") 37 sub_menu.addAction(relative_action) 38 39 40 new_action = QAction("新建") 41 menu.addAction(new_action) 42 43 open_action = QAction("打開") 44 menu.addAction(open_action) 45 46 menu.addSeparator() 47 menu.addMenu(sub_menu) 48 49 50 tool_btn.setMenu(menu) 51 tool_btn.setPopupMode(QToolButton.MenuButtonPopup) 52 ############################給工具按鈕設置菜單############################### 53 54 55 56 #展示控件 57 window.show() 58 59 #3,進入消息循環 60 sys.exit(app.exec_())
tool_btn.setPopupMode(QToolButton.InstantPopup)

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys #1,創建app app = QApplication(sys.argv) #2,控件的操作: #創建控件 window = QWidget() #設置控件 window.setWindowTitle("QCommandLinkButton功能作用") window.resize(500,500) tool_btn = QToolButton(window) tool_btn.setIcon(QIcon("icon.ico")) tool_btn.setIconSize(QSize(50,50)) tool_btn.setAutoRaise(True) #當鼠標放上去的時候,會有自動提升的效果 ############################給工具按鈕設置菜單############################### # btn = QPushButton(window) # btn.setFlat(True) # btn.move(100,100) # btn.setText("菜單") menu = QMenu(tool_btn) sub_menu = QMenu(menu) sub_menu.setTitle("子菜單") relative_action = QAction("最近打開") sub_menu.addAction(relative_action) new_action = QAction("新建") menu.addAction(new_action) open_action = QAction("打開") menu.addAction(open_action) menu.addSeparator() menu.addMenu(sub_menu) tool_btn.setMenu(menu) tool_btn.setPopupMode(QToolButton.InstantPopup) ############################給工具按鈕設置菜單############################### #展示控件 window.show() #3,進入消息循環 sys.exit(app.exec_())
注意:不同的菜單彈出模式是對工具按鈕的信號發射是有影響的!
用的時候自己試下就知道了。
QToolButton 之信號:
點擊某個action時觸發:

from PyQt5.Qt import * #剛開始學習可以這樣一下導入 import sys #1,創建app app = QApplication(sys.argv) #2,控件的操作: #創建控件 window = QWidget() #設置控件 window.setWindowTitle("QCommandLinkButton功能作用") window.resize(500,500) tool_btn = QToolButton(window) tool_btn.setIcon(QIcon("icon.ico")) tool_btn.setIconSize(QSize(50,50)) tool_btn.setAutoRaise(True) #當鼠標放上去的時候,會有自動提升的效果 ############################給工具按鈕設置菜單############################### # btn = QPushButton(window) # btn.setFlat(True) # btn.move(100,100) # btn.setText("菜單") menu = QMenu(tool_btn) sub_menu = QMenu(menu) sub_menu.setTitle("子菜單") relative_action = QAction("最近打開") sub_menu.addAction(relative_action) new_action = QAction("新建") menu.addAction(new_action) open_action = QAction("打開") menu.addAction(open_action) menu.addSeparator() menu.addMenu(sub_menu) tool_btn.setMenu(menu) tool_btn.setPopupMode(QToolButton.InstantPopup) ############################給工具按鈕設置菜單############################### ########################################################### tool_btn.triggered.connect(lambda action:print("點擊了 菜單下的action",action)) ########################################################### #展示控件 window.show() #3,進入消息循環 sys.exit(app.exec_())
如何區分不同的action 呢?
其實每個action 在添加的時候都都可以綁定一個任意的數據,(使用 setData() 給action添加數據)
然后,我們可以在triggered信號連接的函數中的action.data() 來進行判斷具體是哪個action.
通過給action 綁定數據來判斷具體是哪個行為

1 from PyQt5.Qt import * #剛開始學習可以這樣一下導入 2 import sys 3 #1,創建app 4 app = QApplication(sys.argv) 5 6 7 #2,控件的操作: 8 #創建控件 9 window = QWidget() 10 11 12 #設置控件 13 window.setWindowTitle("QCommandLinkButton功能作用") 14 window.resize(500,500) 15 16 tool_btn = QToolButton(window) 17 18 tool_btn.setIcon(QIcon("icon.ico")) 19 tool_btn.setIconSize(QSize(50,50)) 20 21 tool_btn.setAutoRaise(True) 22 #當鼠標放上去的時候,會有自動提升的效果 23 24 25 ############################給工具按鈕設置菜單############################### 26 27 # btn = QPushButton(window) 28 # btn.setFlat(True) 29 # btn.move(100,100) 30 # btn.setText("菜單") 31 32 menu = QMenu(tool_btn) 33 34 sub_menu = QMenu(menu) 35 sub_menu.setTitle("子菜單") 36 relative_action = QAction("最近打開") 37 sub_menu.addAction(relative_action) 38 39 40 new_action = QAction("新建") 41 new_action.setData("new") 42 menu.addAction(new_action) 43 44 open_action = QAction("打開") 45 open_action.setData("open") 46 menu.addAction(open_action) 47 48 menu.addSeparator() 49 menu.addMenu(sub_menu) 50 51 52 tool_btn.setMenu(menu) 53 tool_btn.setPopupMode(QToolButton.InstantPopup) 54 ############################給工具按鈕設置菜單############################### 55 56 57 58 ##########################通過給action 綁定數據來區分不同action################################# 59 def tool_btn_triggered_slot(action): 60 if action.data() == "new": 61 print("你點擊的是新建") 62 elif action.data() == "open": 63 print("你點擊的是打開") 64 65 66 tool_btn.triggered.connect(tool_btn_triggered_slot) 67 68 ##########################通過給action 綁定數據來區分不同action################################# 69 70 71 #展示控件 72 window.show() 73 74 #3,進入消息循環 75 sys.exit(app.exec_())
這種方式比 針對每個行為綁定具體的槽函數好的多!
總結:
QToolButton 講完了,下面是按鈕控件中的 QRadioButton :https://www.cnblogs.com/zach0812/p/11372228.html