目錄
1、按鈕介紹
2、普通按鈕QPushButton學習
1)特殊模式——開關按鈕(toggle)
①將按鈕設置為可選擇的
②將按鈕按下
判斷按鈕是否被按下?isChecked()
2)給按鈕設置前置圖標setIcon()
??編輯
3)按鈕信號
4)完整代碼
3、單選按鈕QRadioButton學習
?1)將按鈕設置為選中狀態setChecked()
2)信號toggled和clicked
3)獲取發射信號的控件self.sender()
4)完整代碼
?4、復選框QCheckBox學習
1)三種狀態(未選中、半選中、選中)
2) 設置狀態
①方法一——setCheckState
②方法二—— setChecked()
3)開啟三種狀態 ——setTristate(True)
4)獲取復選框的狀態isChecked()、checkState()?
5)信號——clicked、stateChanged?
?6)完整代碼
1、按鈕介紹
共四種按鈕類型
QPushButton
QToolButton
QRadioButton
QCheckBox
有共同的父類:QAbstractButton
2、普通按鈕QPushButton學習
1)特殊模式——開關按鈕(toggle)
普通按鈕的特殊模式即為開關狀態,按鈕只有按下和未按下兩種狀態,具體設置為:
①將按鈕設置為可選擇的
self.button1.setCheckable(True) # 將按鈕設置為開關狀態的特殊模式
②將按鈕按下
self.button1.toggle() # 將按鈕按下,只有將button屬性設置為checkable該行才有用
注:上述一般是結合使用,若未將按鈕的Checkable屬性設置為TRUE,toggle是沒有效果的
按下狀態按鈕會呈現淺藍色:
?
未按下則顯示灰色:
?
判斷按鈕是否被按下?isChecked()
?通過按鈕名稱.isChecked()方法可以判斷按鈕是否被按下?
2)給按鈕設置前置圖標setIcon()
self.button2.setIcon(QIcon(QPixmap("icon.jpg")))
?
3)按鈕信號
clicked——常用的信號,就是“點擊按鈕”信號
toggled——這個信號只有開關模式的按鈕才有,“按鈕狀態發生改變”信號
注:上述兩個信號在普通按鈕中的效果是一樣的,因為要使得一個按鈕的狀態改變就必須點擊按鈕,因此效果一樣
4)完整代碼
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import sys# QPushButton——普通按鈕
class QPushbuttonDemo(QWidget):def __init__(self):super(QPushbuttonDemo, self).__init__()self.initUI()def initUI(self):self.resize(30,300)self.setWindowTitle("普通按鈕QPushButton學習")layout = QVBoxLayout()# 將普通按鈕設置為特殊模式——開關按鈕,有兩個狀態(按下和未按下)self.button1 = QPushButton("第一個按鈕")self.button1.setText("First Button")print(self.button1.isChecked()) # Falseself.button1.setCheckable(True) # 將按鈕設置為開關狀態的特殊模式self.button1.toggle() # 將按鈕按下,只有將button屬性設置為checkable該行才有用print(self.button1.isChecked()) # TRUEself.button1.clicked.connect(self.showState) # 將按鈕點擊信號綁定事件self.button1.toggled.connect(self.showState) # 將按鈕開關信號綁定事件,和上述一樣# 給普通按鈕添加圖標self.button2 = QPushButton("圖標按鈕")self.button2.setIcon(QIcon(QPixmap("icon.jpg")))layout.addWidget(self.button1)layout.addWidget(self.button2)self.setLayout(layout)def showState(self):if self.button1.isChecked():print(self.button1.text() + "已按下")else:print(self.button1.text() + "未按下")if __name__ == '__main__':app = QApplication(sys.argv)mainWin = QPushbuttonDemo()mainWin.show()sys.exit(app.exec_())
?運行結果:
?
3、單選按鈕QRadioButton學習
在同一個布局或者同一個容器里面的單選按鈕,只有一個單選按鈕可以被選中,即當選擇一個按鈕時,其它的按鈕就會被取消選擇。
兩種狀態——選中和不被選中
?1)將按鈕設置為選中狀態setChecked()
self.button1.setChecked(True)
2)信號toggled和clicked
clicked——常用的信號,就是“選擇按鈕”信號
toggled——“按鈕狀態發生改變”信號
注:上述兩個信號在普通按鈕中的效果是不一樣的,當選中一個按鈕時,之前被選擇的按鈕會取消按鈕,這時候“按鈕狀態改變”的按鈕有兩個,而被點擊(選擇)的按鈕只有一個
self.button1.clicked.connect(self.showState) # 點擊的時候會觸發事件self.button2.toggled.connect(self.showState) # 狀態發生變化了就會觸發事件
3)獲取發射信號的控件self.sender()
radioButton = self.sender() # 獲得信號發射的控件
4)完整代碼
# QRadioButton——單選按鈕
class QRadioButtonDemo(QWidget):def __init__(self):super(QRadioButtonDemo, self).__init__()self.initUI()def initUI(self):self.resize(30,300)self.setWindowTitle("單選按鈕QRadioButton學習")layout = QVBoxLayout()self.button1 = QRadioButton("第一個按鈕")self.button1.setText("First Button")self.button1.setChecked(True)self.button2 = QRadioButton("第二個按鈕")self.button2.setText("Second Button")self.button1.clicked.connect(self.showState1) # 點擊的時候會觸發事件self.button2.toggled.connect(self.showState2) # 狀態發生變化了就會觸發事件layout.addWidget(self.button1)layout.addWidget(self.button2)self.setLayout(layout)def showState1(self):radioButton = self.sender() # 獲得信號發射的控件if radioButton.isChecked() == True:print(radioButton.text() + "被選中_-------------------")else:print(radioButton.text() + "未被選中_-------------------------")def showState2(self):radioButton = self.sender() # 獲得信號發射的控件if radioButton.isChecked() == True:print(radioButton.text() + "被選中")else:print(radioButton.text() + "未被選中")
if __name__ == '__main__':app = QApplication(sys.argv)mainWin = QRadioButtonDemo()mainWin.show()sys.exit(app.exec_())
?
?可以看到:
1)當在按鈕2被選中的情況下,選擇按鈕1,這時候由于按鈕1被點擊因此會調用槽函數showState1,且因為按鈕2由選中的狀態切換為取消選擇狀態,因此showState2槽函數也會被調用;
2)當在按鈕1被選擇的情況下,選擇按鈕2時,因為按鈕2狀態發生改變,因此會調用showState2槽函數,而由于按鈕1未被點擊,因此showState1槽函數不會被調用
?4、復選框QCheckBox學習
1)三種狀態(未選中、半選中、選中)
復選框QCheckBox區別于單選按鈕,復選框可以同時選中多個,有三種狀態(未選中、半選中、選中)
未選中——0
半選中——1
選中——2
?
2) 設置狀態
①方法一——setCheckState
self.checkbox3.setCheckState(num) # 其中num=1,2,3其中0表示未選中、1表示半選擇,2表示選中
self.checkbox3.setCheckState(0) # 未選中self.checkbox3.setCheckState(1) # 半選中self.checkbox3.setCheckState(2) # 選中
或者:
self.checkbox1.setCheckState(Qt.PartiallyChecked) # 半選中 self.checkbox1.setCheckState(Qt.Checked) # 選中
默認為不選中
②方法二—— setChecked()
self.checkbox1.setChecked(True) # 選中 self.checkbox1.setChecked(False) # 未選中
3)開啟三種狀態 ——setTristate(True)
默認是兩種狀態——選中和未選中
如果需要三種狀態則需要開啟
self.checkbox3.setTristate(True) ## 將三種狀態同時存在的開關打開
4)獲取復選框的狀態isChecked()、checkState()?
?self.checkbox3.isChecked()
這里只能獲得TRUE或者False,其中半選中和選中都為true
self.checkbox1.checkState()?
這里獲得狀態碼,數字的形式
未選中——0
半選中——1
選中——2
5)信號——clicked、stateChanged?
?clicked——點擊信號
stateChanged ——狀態發生改變的信號
兩者是一樣的效果,原因和普通按鈕一樣
self.checkbox1.clicked.connect(self.clickedSlot)self.checkbox3.stateChanged.connect(self.stateChangedSlot)
?6)完整代碼
# 復選框控件QCheckBox控件
'''
三種狀態:
選中:0
半選中:1
未選中:2
'''
from PyQt5.Qt import *class QCheckBoxDemo(QWidget):def __init__(self):super(QCheckBoxDemo, self).__init__()self.InitUI()def InitUI(self):self.resize(500,30)self.setWindowTitle("復選框控件學習")layout = QHBoxLayout()self.checkbox1 = QCheckBox("復選框1")self.checkbox2 = QCheckBox("復選框2")self.checkbox3 = QCheckBox("復選框3")# 設置為選中,默認不選中self.checkbox1.setChecked(True)# 設置為半選中self.checkbox3.setTristate(True) ## 將三種狀態同時存在的開關打開self.checkbox3.setCheckState(1) ## 設置為半選中layout.addWidget(self.checkbox1)layout.addWidget(self.checkbox2)layout.addWidget(self.checkbox3)self.checkbox1.clicked.connect(self.clickedSlot)self.checkbox3.stateChanged.connect(self.stateChangedSlot)self.setLayout(layout)# clickeddef clickedSlot(self):print(self.checkbox1.text() + ",isChecked=" +str(self.checkbox1.isChecked()) + ",checkedState=",str(self.checkbox1.checkState()))# stateChangeddef stateChangedSlot(self):print(self.checkbox3.text() + ",isChecked=" +str(self.checkbox3.isChecked()) + ",checkedState=",str(self.checkbox3.checkState()))if __name__ == '__main__':app = QApplication(sys.argv)mainWin = QCheckBoxDemo()mainWin.show()sys.exit(app.exec_())