文章目录
QT5.9继承关系如下:
0 QAbstractButton
常用信号:
1 QCheckBox 复选按钮
QCheckBox 继承自QAbstractButton
复选框三种状态:
未选中 Qt.Unchecked
部分选中 Qt.PartiallyChecked
真的被选中 Qt.Checked
#设置选择状态
void setCheckState(Qt::CheckState state)
#获得选择状态
Qt::CheckState checkState() const
常用信号:
void stateChanged(int state)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys
class DemoCheckBox(QWidget):
def __init__(self):
super(DemoCheckBox, self).__init__()
self.setWindowTitle("QCheckBox示例")
self.resize(400,400)
self.mainlayout = QVBoxLayout(self)
btn1 = QCheckBox("按钮1")
btn2 = QCheckBox("按钮2")
btn3 = QCheckBox("按钮3")
# 复选框的选中状态有三种:选中、部分选中、全部选中;但在默认情况下只有选中和不选中两种状态,可以通过下列方法设置三态
btn1.setTristate(True)
'''
未选中 Qt.Unchecked
部分选中 Qt.PartiallyChecked
真的被选中 Qt.Checked
'''
btn1.setCheckState(Qt.Checked)
self.mainlayout.addWidget(btn1)
self.mainlayout.addWidget(btn2)
self.mainlayout.addWidget(btn3)
self.mainlayout.addStretch()
# 选中或清除选中时, 发射此信号 void stateChanged(int state)
btn2.stateChanged.connect(self.on_btn2_stateChanged)
def on_btn2_stateChanged(self):
sender = self.sender()
print( "%s 状态变化 "%(sender.text()), sender.checkState())
if __name__ == '__main__':
app = QApplication(sys.argv)
test = DemoCheckBox()
test.show()
sys.exit(app.exec_())
效果如下:
2 QPushButton
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys
class DemoQPushButton(QWidget):
def __init__(self):
super(DemoQPushButton, self).__init__()
self.setWindowTitle("QPushButton示例")
self.resize(400,400)
self.mainlayout = QVBoxLayout(self)
btn1 = QPushButton("按钮1",self)
btn2 = QPushButton("按钮2")
menu = QMenu()
openaction = menu.addAction("打开")
menu.addSeparator()
menu.addAction("关闭")
btn1.setMenu(menu)
self.mainlayout.addWidget(btn1)
self.mainlayout.addWidget(btn2)
#信号槽
btn2.clicked.connect(self.clicked_slot)
openaction.triggered.connect(self.on_openaction_triggered) #Action 信号
def on_openaction_triggered(self):
print(self.sender().text()) #信号发送者
def clicked_slot(self):
print(self.sender().text(), " 按下")
self.sender().setEnabled(False) #设置按钮不可点击
if __name__ == '__main__':
app = QApplication(sys.argv)
test = DemoQPushButton()
test.show()
sys.exit(app.exec_())
效果如下:
3 QRadioButton(常用处理互斥按钮组)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
import sys
class DemoQRadioButton(QWidget):
def __init__(self):
super(DemoQRadioButton, self).__init__()
self.setWindowTitle("QRadioButton例子")
self.resize(400,300)
self.mainlayout = QVBoxLayout(self)
self.mainlayout.setContentsMargins(2,0,2,0)
btn1 = QRadioButton('Button1')
btn2 = QRadioButton('Button2')
btn3 = QRadioButton('Button3')
btn4 = QRadioButton('Button4')
btn5 = QRadioButton('Button5')
group01 = QButtonGroup(self) #按键组 处理互斥按钮
group01.addButton(btn1,id=1) #设置id
group01.addButton(btn2,id=2)
group02 = QButtonGroup(self) #按键组 处理互斥按钮
group02.addButton(btn3,id=3)
group02.addButton(btn4,id=4)
group02.addButton(btn5,id=5)
childlayout = QHBoxLayout(self)
childlayout.addWidget(btn1)
childlayout.addWidget(btn2)
self.mainlayout.addLayout(childlayout)
line = QFrame()
line.setFrameStyle(QFrame.HLine|QFrame.Plain)
self.mainlayout.addWidget(line)
self.mainlayout.addWidget(btn3)
self.mainlayout.addWidget(btn4)
self.mainlayout.addWidget(btn5)
#信号槽
group01.buttonClicked.connect(self.slot_group01) #传递按键对象
group02.buttonClicked[int].connect(self.slot_group02) #传递按键id
# QAbstractButton 的几个信号
btn2.clicked.connect(lambda : print("按键2 clicked "))
btn2.pressed.connect(lambda: print("按键2 pressed "))
btn2.released.connect(lambda: print("按键2 released "))
btn2.toggled.connect(lambda: print("按键2 toggled "))
def slot_group01(self,btn):
print(btn.text(), " checked")
def slot_group02(self,id):
print("按键id ",id )
if __name__ == '__main__':
app = QApplication(sys.argv)
test = DemoQRadioButton()
test.show()
sys.exit(app.exec_())
QAbstractButton的常用信号 及 QButtonGroup信号信号如上面代码所示,效果如下
#打印日志:
按键2 pressed
按键2 toggled
按键2 released
按键2 clicked
Button2 checked
按键id 3
4 QToolButton(工具按钮 快速访问按钮)
一般在工具栏中显示,工具栏中的工具按钮一般只显示图标