PyQt5 控件學習(一個一個學習之QToolButton)


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_())
QToolButton 一般是只顯示圖標,不顯示文本,這是它和QPushButton 的最大不同

 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_())
View Code

但是,如果我們實在是想在工具按鈕上一起顯示文字和圖標

如下:

 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_())
View Code

 

 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_())
View Code

 

 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_())
給Qpushbutton 按鈕設置菜單復習

 

我們把上面的代碼放到工具按鈕上,

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_())
View Code

 

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_())
View Code

注意:不同的菜單彈出模式是對工具按鈕的信號發射是有影響的!

用的時候自己試下就知道了。

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_())
View Code

 

如何區分不同的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_())
View Code

這種方式比 針對每個行為綁定具體的槽函數好的多!

 

總結:

QToolButton 講完了,下面是按鈕控件中的   QRadioButton :https://www.cnblogs.com/zach0812/p/11372228.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM