当前位置:   article > 正文

【pyqt5学习】——QAbstractButton学习(普通按钮QPushButton、工具按钮QToolButton、单选按钮QRadioButton、复选框按钮QCheckBox)

qabstractbutton

目录

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)完整代码

  1. from PyQt5.QtWidgets import *
  2. from PyQt5.QtGui import *
  3. import sys
  4. # QPushButton——普通按钮
  5. class QPushbuttonDemo(QWidget):
  6. def __init__(self):
  7. super(QPushbuttonDemo, self).__init__()
  8. self.initUI()
  9. def initUI(self):
  10. self.resize(30,300)
  11. self.setWindowTitle("普通按钮QPushButton学习")
  12. layout = QVBoxLayout()
  13. # 将普通按钮设置为特殊模式——开关按钮,有两个状态(按下和未按下)
  14. self.button1 = QPushButton("第一个按钮")
  15. self.button1.setText("First Button")
  16. print(self.button1.isChecked()) # False
  17. self.button1.setCheckable(True) # 将按钮设置为开关状态的特殊模式
  18. self.button1.toggle() # 将按钮按下,只有将button属性设置为checkable该行才有用
  19. print(self.button1.isChecked()) # TRUE
  20. self.button1.clicked.connect(self.showState) # 将按钮点击信号绑定事件
  21. self.button1.toggled.connect(self.showState) # 将按钮开关信号绑定事件,和上述一样
  22. # 给普通按钮添加图标
  23. self.button2 = QPushButton("图标按钮")
  24. self.button2.setIcon(QIcon(QPixmap("icon.jpg")))
  25. layout.addWidget(self.button1)
  26. layout.addWidget(self.button2)
  27. self.setLayout(layout)
  28. def showState(self):
  29. if self.button1.isChecked():
  30. print(self.button1.text() + "已按下")
  31. else:
  32. print(self.button1.text() + "未按下")
  33. if __name__ == '__main__':
  34. app = QApplication(sys.argv)
  35. mainWin = QPushbuttonDemo()
  36. mainWin.show()
  37. sys.exit(app.exec_())

 运行结果:

 

3、单选按钮QRadioButton学习

在同一个布局或者同一个容器里面的单选按钮,只有一个单选按钮可以被选中,即当选择一个按钮时,其它的按钮就会被取消选择。

两种状态——选中和不被选中

 1)将按钮设置为选中状态setChecked()

self.button1.setChecked(True)

2)信号toggled和clicked

clicked——常用的信号,就是“选择按钮”信号

toggled——“按钮状态发生改变”信号

注:上述两个信号在普通按钮中的效果是不一样的,当选中一个按钮时,之前被选择的按钮会取消按钮,这时候“按钮状态改变”的按钮有两个,而被点击(选择)的按钮只有一个

  1. self.button1.clicked.connect(self.showState) # 点击的时候会触发事件
  2. self.button2.toggled.connect(self.showState) # 状态发生变化了就会触发事件

3)获取发射信号的控件self.sender()

radioButton = self.sender() # 获得信号发射的控件

4)完整代码

  1. # QRadioButton——单选按钮
  2. class QRadioButtonDemo(QWidget):
  3. def __init__(self):
  4. super(QRadioButtonDemo, self).__init__()
  5. self.initUI()
  6. def initUI(self):
  7. self.resize(30,300)
  8. self.setWindowTitle("单选按钮QRadioButton学习")
  9. layout = QVBoxLayout()
  10. self.button1 = QRadioButton("第一个按钮")
  11. self.button1.setText("First Button")
  12. self.button1.setChecked(True)
  13. self.button2 = QRadioButton("第二个按钮")
  14. self.button2.setText("Second Button")
  15. self.button1.clicked.connect(self.showState1) # 点击的时候会触发事件
  16. self.button2.toggled.connect(self.showState2) # 状态发生变化了就会触发事件
  17. layout.addWidget(self.button1)
  18. layout.addWidget(self.button2)
  19. self.setLayout(layout)
  20. def showState1(self):
  21. radioButton = self.sender() # 获得信号发射的控件
  22. if radioButton.isChecked() == True:
  23. print(radioButton.text() + "被选中_-------------------")
  24. else:
  25. print(radioButton.text() + "未被选中_-------------------------")
  26. def showState2(self):
  27. radioButton = self.sender() # 获得信号发射的控件
  28. if radioButton.isChecked() == True:
  29. print(radioButton.text() + "被选中")
  30. else:
  31. print(radioButton.text() + "未被选中")
  32. if __name__ == '__main__':
  33. app = QApplication(sys.argv)
  34. mainWin = QRadioButtonDemo()
  35. mainWin.show()
  36. 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表示选中

  1. self.checkbox3.setCheckState(0) # 未选中
  2. self.checkbox3.setCheckState(1) # 半选中
  3. self.checkbox3.setCheckState(2) # 选中

或者:

  1. self.checkbox1.setCheckState(Qt.PartiallyChecked) # 半选中
  2. self.checkbox1.setCheckState(Qt.Checked) # 选中

默认为不选中

②方法二—— setChecked()

  1. self.checkbox1.setChecked(True) # 选中
  2. 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 ——状态发生改变的信号

两者是一样的效果,原因和普通按钮一样

  1. self.checkbox1.clicked.connect(self.clickedSlot)
  2. self.checkbox3.stateChanged.connect(self.stateChangedSlot)

 6)完整代码

  1. # 复选框控件QCheckBox控件
  2. '''
  3. 三种状态:
  4. 选中:0
  5. 半选中:1
  6. 未选中:2
  7. '''
  8. from PyQt5.Qt import *
  9. class QCheckBoxDemo(QWidget):
  10. def __init__(self):
  11. super(QCheckBoxDemo, self).__init__()
  12. self.InitUI()
  13. def InitUI(self):
  14. self.resize(500,30)
  15. self.setWindowTitle("复选框控件学习")
  16. layout = QHBoxLayout()
  17. self.checkbox1 = QCheckBox("复选框1")
  18. self.checkbox2 = QCheckBox("复选框2")
  19. self.checkbox3 = QCheckBox("复选框3")
  20. # 设置为选中,默认不选中
  21. self.checkbox1.setChecked(True)
  22. # 设置为半选中
  23. self.checkbox3.setTristate(True) ## 将三种状态同时存在的开关打开
  24. self.checkbox3.setCheckState(1) ## 设置为半选中
  25. layout.addWidget(self.checkbox1)
  26. layout.addWidget(self.checkbox2)
  27. layout.addWidget(self.checkbox3)
  28. self.checkbox1.clicked.connect(self.clickedSlot)
  29. self.checkbox3.stateChanged.connect(self.stateChangedSlot)
  30. self.setLayout(layout)
  31. # clicked
  32. def clickedSlot(self):
  33. print(self.checkbox1.text() + ",isChecked=" +str(self.checkbox1.isChecked()) + ",checkedState=",str(self.checkbox1.checkState()))
  34. # stateChanged
  35. def stateChangedSlot(self):
  36. print(self.checkbox3.text() + ",isChecked=" +str(self.checkbox3.isChecked()) + ",checkedState=",str(self.checkbox3.checkState()))
  37. if __name__ == '__main__':
  38. app = QApplication(sys.argv)
  39. mainWin = QCheckBoxDemo()
  40. mainWin.show()
  41. sys.exit(app.exec_())

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/838925
推荐阅读
相关标签
  

闽ICP备14008679号