QAbstractButton:該類爲抽象類,不能實例化,必須由其他的類繼承它,來實現不同的功能
常見的按鈕類有:QPushButton、QToolButton、QRadiaButton、QCheckBox
按鈕類常用的方法如下所示:
isDown() |
按鈕是否被按下 |
isChecked() |
按鈕是否已經標記 |
isEnable() |
按鈕是否可以被點擊 |
isCheckAble() |
按鈕是否可標記 |
setAutoRepeat() |
用戶在長按時是否可以自動重複執行 |
常用信號與槽標記
Pressed |
鼠標在按鈕上按下左鍵時觸發 |
Released |
鼠標在按鈕上釋放時觸發 |
Clicked |
左鍵被按下然後釋放時, |
Toggled |
按鈕的標記狀態發生改變時觸發 |
QPushButton按鈕:是一個普通的按鈕類,繼承QAbstractButton類它的常用方法如下表
setCheckable() |
按鈕是否被選,設置爲True,則保持爲已點擊和釋放狀態 |
toggle() |
按鈕狀態之間進行切換 |
setIcon() |
設置按鈕圖標 |
setEnable() |
設置按鈕是否可用 |
isChecked() |
返回按鈕狀態 |
setDefault() |
設置按鈕默認狀態 |
setText() |
設置按鈕顯示文本 |
text() |
返回按鈕文本 |
案例一:爲按鈕設置快捷鍵,假如想爲按鈕設置快捷鍵Alt+D 則爲按鈕設置文本“&Down” 這樣 “&D”就是快捷鍵Alt+D。
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Form(QDialog):
def __init__(self,parent=None):
super(Form,self).__init__(parent)
self.resize(300,400)
self.layout=QVBoxLayout()
self.initUI()
def initUI(self):
self.btn1=QPushButton("Button1")
self.btn1.setCheckable(True)
self.btn1.toggle()
self.btn1.clicked.connect(lambda:self.whichbtn(self.btn1))
self.btn1.clicked.connect(self.btnstate)
self.layout.addWidget(self.btn1)
self.btn2=QPushButton("image")
self.btn2.setIcon(QIcon("../images/python.jpg"))
self.btn2.clicked.connect(lambda:self.whichbtn(self.btn2))
self.layout.addWidget(self.btn2)
self.setLayout(self.layout)
self.btn3=QPushButton("Disbaled")
self.btn3.setEnabled(False)
self.layout.addWidget(self.btn3)
self.btn4=QPushButton("&Download") #設置快捷鍵Alt+D &D
self.btn4.setDefault(True)
self.btn4.clicked.connect(lambda:self.whichbtn(self.btn4))
self.layout.addWidget(self.btn4)
self.setWindowTitle("Button Demo")
def btnstate(self):
if self.btn1.isCheckable():
print("button pressed")
else:
print("button released")
def whichbtn(self,btn):
print("clicked button is "+btn.text())
if __name__=="__main__":
app=QApplication(sys.argv)
demo=Form()
demo.show()
sys.exit(app.exec_())
QRadioButton:提供了可供選擇的按鈕和文本標籤,即單選按鈕,一次只能選擇一個,類似於 on off ,當該按鈕被選爲on 或者off時,發送toggled信號。
#按鈕類QRadioButton按鈕實例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class RadioDemo(QWidget):
def __init__(self,parent=None):
super(RadioDemo,self).__init__(parent)
self.resize(300,400)
self.layout=QHBoxLayout()
self.initUI()
def initUI(self):
self.btn1=QRadioButton("Button1")
self.btn1.setChecked(True) #默認設置爲被選中
self.btn1.toggled.connect(lambda :self.btnstate(self.btn1))
self.layout.addWidget(self.btn1)
self.btn2=QRadioButton("Button2")
self.btn2.toggled.connect(lambda :self.btnstate(self.btn2))
self.layout.addWidget(self.btn2)
self.setLayout(self.layout)
self.setWindowTitle("RadioButton Demo")
def btnstate(self,btn):
if btn.text() == "Button1":
if btn.isChecked() == True:
print(btn.text()+" is selected ")
else:
print(btn.text()+"is deselected")
if __name__=="__main__":
app=QApplication(sys.argv)
demo=RadioDemo()
demo.show()
sys.exit(app.exec_())
QCheckBox:該類是一組複選框按鈕,即可以選擇多個選項。該類按鈕有三種狀態:1.選中、2.半選中、3.未選中。選中的概念爲一般時按鈕上打勾,未選中則是按鈕是個空白框,半選中爲按鈕整個按鈕狂時被黑色填滿
常用方法
setChecked() |
設置複選框狀態,True爲選中 |
setText() |
設置複選框文本 |
text() |
返回複選框的文本 |
isChecked() |
返回複選框是否被選中 |
setTriState() |
設置複選框爲三態複選框 |
三態狀態分爲:
Qt.Checked |
值爲2 |
組件沒有被選中 |
Qt.PaetiallyChecked |
1 |
組件被半選中 |
Qt.Unchecked |
0 |
組件被選中 |
#按鈕類QRadioButton按鈕實例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
class CheckBoxDemo(QWidget):
def __init__(self,parent=None):
super(CheckBoxDemo,self).__init__(parent)
self.setWindowTitle("CheckBox Demo")
#self.resize(300,300)
self.groupBox=QGroupBox("checkboxes")
self.groupBox.setFlat(True)
self.layout=QHBoxLayout()
self.initUI()
self.AddWidget()
self.groupBox.setLayout(self.layout)
self.mainLayout=QVBoxLayout()
self.mainLayout.addWidget(self.groupBox)
self.setLayout(self.mainLayout)
def initUI(self):
self.checkBox1=QCheckBox("&CheckBox1")
self.checkBox1.setChecked(True)
self.checkBox1.stateChanged.connect(lambda :self.btnstate(self.checkBox1))
self.checkBox2=QCheckBox("CheckBox2")
self.checkBox2.toggled.connect(lambda :self.btnstate(self.checkBox2))
self.checkBox3=QCheckBox("CheckBox3")
self.checkBox3.setTristate(True) #設置三態模式
self.checkBox3.setCheckState(Qt.PartiallyChecked)
self.checkBox3.stateChanged.connect(lambda :self.btnstate(self.checkBox3))
def AddWidget(self):
self.layout.addWidget(self.checkBox1)
self.layout.addWidget(self.checkBox2)
self.layout.addWidget(self.checkBox3)
def btnstate(self,btn):
chk1Status=self.checkBox1.text()+", isChecked="+str(self.checkBox1.isChecked() )+", checkstate="+ \
str(self.checkBox1.checkState())+"\n"
chk2Status=self.checkBox2.text()+", isChecked="+str(self.checkBox2.isChecked() )+", checkstate="+ \
str(self.checkBox2.checkState())+"\n"
chk3Status=self.checkBox3.text()+", isChecked="+str(self.checkBox3.isChecked() )+", checkstate="+ \
str(self.checkBox3.checkState())+"\n"
print(chk1Status+str("---")+chk2Status+"---"+chk3Status)
if __name__=="__main__":
app=QApplication(sys.argv)
demo=CheckBoxDemo()
demo.show()
sys.exit(app.exec_())
QComboBox :下拉列表框,該類控件是一個集按鈕和下拉選項於一體的控件,被稱爲下拉列表框
常用方法
addItem() |
添加一個下拉選項 |
addItems() |
從列表中添加下拉選項 |
Clear() |
刪除下拉列表中所有選項 |
count() |
返回下拉選項集合中的數目 |
currentText() |
返回選中選項的文本 |
itemText(i) |
獲取索引爲 i 的 item 的選項文本 |
currentIndex() |
返回選中項的索引 |
setItemText(int index,text) |
改變序號爲index項的文本 |
常用信號
Activated |
當用戶選中一個下拉選項時發射該信號 |
currentIndexChanged |
當下拉選項的索引發生改變時發射該信號 |
highlighted |
當選中一個已經選中的下拉選項時,發射該信號 |
#按鈕類QCheckBox按鈕實例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class ComboxDemo(QWidget):
def __init__(self,parent=None):
super(ComboxDemo, self).__init__(parent)
self.setWindowTitle("Combox 例子")
self.resize(300,90)
self.layout=QVBoxLayout()
self.lbl=QLabel("")
self.cb=QComboBox()
self.cb.addItem("C")
self.cb.addItem("C++")
self.cb.addItems(["java","C#","Python"])
self.cb.currentIndexChanged.connect(self.selectionchange)
self.layout.addWidget(self.cb)
self.layout.addWidget(self.lbl)
self.setLayout(self.layout)
def selectionchange(self,i):
self.lbl.setText(self.cb.currentText())
print("Item in the list are:")
for count in range(self.cb.count()):
print('item '+str(count)+" "+self.cb.itemText(count))
print("Current index ",i," selection changed ",self.cb.currentText())
if __name__=="__main__":
app=QApplication(sys.argv)
demo=ComboxDemo()
demo.show()
sys.exit(app.exec_())
QSpinBox:該類是一個計數器控件,允許用戶選擇一個整數值,通過向上、向下按鈕或按鍵上的上下增加減少當前顯示的值,也可以輸入值。默認情況下取值範圍爲0~99,每次改變的步長值1
常用方法:
setMinimum() |
設置計數器下邊界 |
setMaximum() |
設置計數器上邊界 |
setRange() |
設置計數器最大值、最小值、步長值 |
setValue() |
設置計數器當前值 |
Value() |
返回計數器當前值 |
singleStep() |
設置計數器步長值 |
#按鈕類QSpinBox按鈕實例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class SpinBoxDemo(QWidget):
def __init__(self,parent=None):
super(SpinBoxDemo, self).__init__(parent)
self.setWindowTitle("QSpinBox")
self.resize(300,100)
layout=QVBoxLayout()
self.ll=QLabel("")
self.ll.setAlignment(Qt.AlignCenter)
layout.addWidget(self.ll)
self.sp=QSpinBox()
layout.addWidget(self.sp)
self.sp.valueChanged.connect(self.valuechange)
self.setLayout(layout)
def valuechange(self):
self.ll.setText("current value: "+str(self.sp.value()))
if __name__=="__main__":
app=QApplication(sys.argv)
demo=SpinBoxDemo()
demo.show()
sys.exit(app.exec_())
QSlider滑動條:該控件提供了一個垂直或水平的滑動條。是一個控制有界值的控件。允許用戶垂直或者水平在某一範圍拖動。
常用方法
setMinimum() |
設置最小值 |
setMaxmum() |
設置最大值 |
setSingleStep() |
設置遞增步長值 |
setValue() |
設置滑動控件的值 |
value() |
獲得滑動控件值 |
setTickInterval() |
設置刻度間隔 |
setTickPosition() |
設置刻度標記位置 |
常用信號
valueChanged |
當滑塊值發生變化時 |
sliderPressed |
當用戶按下滑塊時 |
sliderMoved |
當用戶拖動滑塊時 |
sliderReleased |
當用戶釋放滑塊時 |
#按鈕類QSplider按鈕實例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class SliderDemo(QWidget):
def __init__(self,parent=None):
super(SliderDemo,self).__init__(parent)
self.setWindowTitle("滑動條")
self.resize(300,100)
layout=QVBoxLayout()
self.ll=QLabel("Hello PyQT5")
self.ll.setAlignment(Qt.AlignCenter)
layout.addWidget(self.ll)
#水平方向
self.sl=QSlider(Qt.Horizontal)
#設置最小值
self.sl.setMinimum(10)
#設置最大值
self.sl.setMaximum(50)
#步長
self.sl.setSingleStep(3)
#設置當前值
self.sl.setValue(20)
#刻度位置,刻度在下方
self.sl.setTickPosition(QSlider.TicksBelow)
#設置刻度間隔
self.sl.setTickInterval(5)
layout.addWidget(self.sl)
#信號與槽
self.sl.valueChanged.connect(self.valuechange)
self.setLayout(layout)
def valuechange(self):
print("current slider value=%s "%self.sl.value())
size=self.value()
self.ll.setFont(QFont("Arial",size))
if __name__=="__main__":
app=QApplication(sys.argv)
demo=SliderDemo()
demo.show()
sys.exit(app.exec_())