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

678

被折叠的 条评论
为什么被折叠?



