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