1.簡介
QPushButton是界面中常見的按鈕控件,提供按鈕的功能。我們在使用時,對QPushButton關注的重點在於顯示的樣式和點擊後執行的功能,下面就這兩點進行說明。
2.樣式
2.1 QPushButton的樣式主要分邊框、背景及字體
import sys
from PySide2.QtWidgets import QPushButton, QApplication
if __name__ == "__main__":
app = QApplication(sys.argv)
button = QPushButton() # 定義一個按鈕
button.setText("button") # 設置按鈕顯示的文字
button.setStyleSheet("background: rgba(2,231,226,0.20);border: 3px solid blue;\
border-radius: 25px;font-family: Microsoft YaHei;font-size: 24pt;color: #FFFFFF;") # 設置樣式
button.show()
sys.exit(app.exec_())
這裏使用setStyleSheet來設置樣式,樣式屬性分很多種,每種用分號隔開。下面就設置項進行說明
background: rgba(2,231,226,0.20); # 設置背景色及背景透明度,0.20爲透明度
border: 3px solid blue; # 設置邊框寬度爲3px, 邊框線爲實線,邊框色爲#02E7E2
border-radius: 25px; # 設置邊框圓角爲25px
font-family: Microsoft YaHei; # 顯示字體爲微軟雅黑
font-size: 24pt; # 顯示字體大小24pt
color: #FFFFFF; # 顯示字體顏色爲白色
字體使用微軟雅黑,這種字體是Windows系統自帶的,而其他如幼圓、仿宋等字體在系統不一定存在。這在設置字體時需要注意。
2.2 QPushButton對鼠標動作的反應
import sys
from PySide2.QtWidgets import QPushButton, QApplication
if __name__ == "__main__":
app = QApplication(sys.argv)
button = QPushButton() # 定義一個按鈕
button.setText("button") # 設置按鈕顯示的文字
button.setStyleSheet('''
QPushButton{background: rgba(2,231,226,0.20);
border: 3px solid blue;
border-radius: 25px;
font-family: Microsoft YaHei;
font-size: 24pt;
color: #FFFFFF;}
QPushButton:pressed{background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #dadbde, stop: 1 #f6f7fa);}''') # 設置樣式
button.show()
sys.exit(app.exec_())
這裏對setStyleSheet的內容進行了擴充,''' '''內QPushButton{}是對button的設置,與2.1相同;不同之處在QPushButton:pressed{},這裏是鼠標點擊按鈕後,按鈕的樣式,使用了一個線性漸變的背景。
qlineargradient(x1: 0,
y1: 0,
x2: 0,
y2: 1,
stop: 0 #dadbde,
stop: 1 #f6f7fa)
#(x1, y1) 漸變起始點
#(x2, y2) 漸變結束點
#這裏的起始點和結束點不是真的位置點,而是邏輯點,這裏(0,0)和(0,1) 是一個垂直方向,
#表示漸變從上往下;若設置(0,0)和(1,1)就從左上角到右下角的漸變
#stop設置漸變色,這裏設置一個起始點的顏色stop: 0 #dadbde和終點的顏色stop: 1 #f6f7fa
#如果還想在中間加顏色,可以設置stop: 0.5 white或stop: 0.61 blue
3.按鈕點擊
利用qt的信號和槽功能可以實現按鈕點擊後,執行相應的動作。信號即我們點擊按鈕後,按鈕發出的信號,就像我們扇某人一耳光,被扇的人會發出哭的信號一樣;槽即接收到信號後,執行的函數,這裏還是以前面扇耳光的例子,如果我們扇的是一個孩子,那麼孩子的爸媽接收到孩子被打的信號,爸媽會做什麼,爸媽可能回送我們一耳光,也可能報警,爸媽做的事就是槽。
這個過程用代碼實現
import sys
from PySide2.QtWidgets import QPushButton, QApplication
# 增加一個簡單的類
class testSlot():
def __init__(self):
pass
def test(self):
print("test print")
if __name__ == "__main__":
app = QApplication(sys.argv)
button = QPushButton() # 定義一個按鈕
button.setText("button") # 設置按鈕顯示的文字
button.setStyleSheet('''
QPushButton{background: rgba(2,231,226,0.20);
border: 3px solid blue;
border-radius: 25px;
font-family: Microsoft YaHei;
font-size: 24pt;
color: #FFFFFF;}
QPushButton:pressed{background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 #dadbde, stop: 1 #f6f7fa);}''') # 設置樣式
testslot = testSlot() # 創建一個類實例
# 使用button的clicked信號連接testslot的test()函數
# button被點擊後發出clicked信號,testslot接收到此信號後執行test()
button.clicked.connect(testslot.test)
button.show()
sys.exit(app.exec_())