0 前言
控件内不能含有其他控件的,称为基本控件,为了演示方便,把QGroupBox也放到这里
基本控件继承关系:
QWidget
- QComboBox
- QAbstractButton
- QCheckBox
- QPushButton
- QRadioButton
- QToolButton
1 按钮 QPushButton
QPushButton提供基本按钮,当setCheckable(True)
时,启用QPushButton的status
属性,具有True
和False
两种状态。status==True
时按钮为蓝色,status==False
时按钮为白色。status
默认通过左键点击改变,也可以通过toggle()
方法改变。status
可通过信号clicked.connect
和toggled.connect
向槽函数传递
1.1 方法列表
QPushButton类 | 说明 |
---|---|
self=QPushButton(QIcon, text, parent) | 创建实例和文字QIcon ->控件图标,QIcon类,可省略text ->字符串,非必须parent ->父控件,使用布局时可省略 |
self.setText(text) | 设置控件文字text ->字符串 |
=self.text() | 读取控件文字,返回字符串 |
self.setEnabled(True) | 设置按钮是否可以使用 |
self.setCheckable(False) | 启用时,向槽函数传入status 属性 |
self.toggle() | 改变status |
=self.isChecked() | 返回按钮的status |
self.setDefault(bool) | 设置默认status |
继承自QAbstractButton类的方法 | |
self.clicked.connect(fun) | 单击信号 |
self.toggled.connect(fun) | 按钮status 改变时触发槽函数,发送(self, status) |
继承自QWidget类的方法 | |
x , y , width , height , ... | 几何类方法,详见窗口的几何数据 |
1.2 示例 不带状态的开关按钮
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.move(500, 400)
self.setFixedSize(300, 300)
self.setWindowTitle('不带状态的开关按钮')
vlayout = QVBoxLayout()
self.setLayout(vlayout)
self.label = QLabel('关闭') # 此处self不能省略,否则无法将label传入槽函数
self.label.setAlignment(Qt.AlignCenter) # Qt.AlignCenter需要导入PyQt5.QtCore库
vlayout.addWidget(self.label)
btn = QPushButton(QIcon('switch.jpg'), '开关')
btn.clicked.connect(self.labelSwitch) # 信号
vlayout.addWidget(btn)
def labelSwitch(self): # 槽函数
if self.label.text() == '运行中':
self.label.setText('关闭')
else:
self.label.setText('运行中')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
1.3 示例 带状态的开关按钮
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.move(500, 400)
self.setFixedSize(300, 300)
self.setWindowTitle('带状态的开关按钮')
vlayout = QVBoxLayout()
self.setLayout(vlayout)
self.label = QLabel('运行中')
self.label.setAlignment(Qt.AlignCenter)
vlayout.addWidget(self.label)
btn = QPushButton(QIcon('switch.jpg'), '开关')
btn.setCheckable(True)
btn.clicked.connect(self.labelSwitch)
vlayout.addWidget(btn)
def labelSwitch(self, status): # 槽函数多了一个status参数
if status == True:
self.label.setText('运行中')
else:
self.label.setText('关闭')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
2 单选按钮 QRadioButton
单选按钮QRadioButton具有True和False两种状态
- 当有组合框QGroupBox时,一个组合框中只能有1个QRadioButton处于
True
状态 - 当没有组合框QGroupBox时,在整个界面中只能有1个QRadioButton处于
True
状态
QGroupBox属于QWidget的一种,可以放置布局,也可以被放进布局中
2.1 方法列表
QRadioButton类 | 说明 |
---|---|
self=QRadioButton(text, parent) | 创建实例和文字text ->字符串,非必须parent ->父控件,使用布局时可省略 |
self.setChecked(bool) | 设置按钮选中状态 |
=self.isChecked() | 读取按钮选中状态,返回布尔值 |
继承自QAbstractButton类的方法 | |
self.setText(text) | 设置控件文字text ->字符串 |
=self.text() | 读取控件文字,返回字符串 |
self.toggled.connect(fun) | 按钮状态改变时触发槽函数 |
2.2 示例 多组状态按钮
import sys
from PyQt5.QtWidgets import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.move(500, 400)
self.setFixedSize(300, 300)
self.setWindowTitle('显示文件内容')
layout_h1 = QHBoxLayout()
btn11 = QRadioButton('Btn11')
btn11.setChecked(True)
layout_h1.addWidget(btn11)
btn12 = QRadioButton('Btn12')
layout_h1.addWidget(btn12)
group1 = QGroupBox()
group1.setLayout(layout_h1)
layout_h2 = QHBoxLayout()
btn21 = QRadioButton('Btn21')
btn21.setChecked(True)
layout_h2.addWidget(btn21)
btn22 = QRadioButton('Btn22')
layout_h2.addWidget(btn22)
btn23 = QRadioButton('Btn23')
layout_h2.addWidget(btn23)
group2 = QGroupBox()
group2.setLayout(layout_h2)
layout_v = QVBoxLayout()
layout_v.addWidget(group1)
layout_v.addWidget(group2)
self.setLayout(layout_v)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
3 复选按钮 QCheckBox
复选按钮 QCheckBox具有True
和False
两种状态,可以通过setTriState()
方法变为三种状态,这里不讨论
3.1 方法列表
QCheckBox类 | 说明 |
---|---|
self=QCheckBox(text, parent) | 创建实例和文字text ->字符串,非必须parent ->父控件,使用布局时可省略 |
self.setChecked(bool) | 设置按钮选中状态 |
=self.isChecked() | 读取按钮选中状态,返回布尔值 |
继承自QAbstractButton类的方法 | |
self.setText(text) | 设置控件文字text ->字符串 |
=self.text() | 读取控件文字,返回字符串 |
self.toggled.connect(fun) | 按钮状态改变时触发槽函数 |
3.2 示例 多组状态切换按钮
import sys
from PyQt5.QtWidgets import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.move(500, 400)
self.setFixedSize(300, 300)
self.setWindowTitle('显示文件内容')
layout_h1 = QHBoxLayout()
btn11 = QCheckBox('Btn11')
btn11.setChecked(True)
layout_h1.addWidget(btn11)
btn12 = QCheckBox('Btn12')
layout_h1.addWidget(btn12)
group1 = QGroupBox()
group1.setLayout(layout_h1)
layout_h2 = QHBoxLayout()
btn21 = QCheckBox('Btn21')
btn21.setChecked(True)
layout_h2.addWidget(btn21)
btn22 = QCheckBox('Btn22')
btn22.setChecked(True)
layout_h2.addWidget(btn22)
btn23 = QCheckBox('Btn23')
layout_h2.addWidget(btn23)
group2 = QGroupBox()
group2.setLayout(layout_h2)
layout_v = QVBoxLayout()
layout_v.addWidget(group1)
layout_v.addWidget(group2)
self.setLayout(layout_v)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
4 工具按钮 QToolButton
QToolButton工具按钮,一般在工具栏中显示,工具栏中的工具按钮一般只显示图标,供用户快捷的使用一些功能
4.1 方法列表
QToolButton类 | 说明 |
---|---|
self=QToolButton(parent) | 创建实例parent ->父控件,使用布局时可省略 |
self.setIcon(icon) | 设置图标icon ->QIcon类 |
self.setToolTip(info) | 设置鼠标指向时悬浮提示信息info ->字符串 |
self.setToolButtonStyle() | 设置PyQt5.QtCore中的显示风格:Qt.ToolButtonIconOnly : 只显示图标(默认风格)Qt.ToolButtonTextOnly : 只显示文本Qt.ToolButtonTextBesideIcon : 文本显示在图标旁Qt.ToolButtonTextUnderIcon : 文本显示在图标下方Qt.ToolButtonFollowStyle : 遵循风格 |
self.setArrowType() | 设置PyQt5.QtCore中的箭头图标:Qt.NoArrow : 无箭头Qt.UpArrow : 上箭头Qt.DownArrow : 下箭头Qt.LeftArrow : 左箭头Qt.RightArrow : 右箭头 |
self.setAutoRaise(False) | 设置按键扁平化,光标接触时相应 |
继承自QAbstractButton类的方法 | |
self.setText(text) | 设置文本 |
self.text() | 读取文本 |
继承自QWidget类的方法 | |
x , y , width , height , ... | 几何类方法,详见窗口的几何数据 |
4.2 示例 箭头按钮
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.move(500, 400)
self.setFixedSize(300, 300)
self.setWindowTitle('显示文件内容')
hlayout = QHBoxLayout()
self.tb = QToolButton()
self.tb.setArrowType(Qt.UpArrow)
hlayout.addWidget(self.tb)
self.setLayout(hlayout)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
5 下拉选项 QComboBox
5.1 方法列表
QComboBox类 | 说明 |
---|---|
self=QComboBox(parent) | 创建实例parent ->父控件,使用布局时可省略 |
self.addItem(text) | 添加一个下拉选项 |
self.addItems(list) | 从列表中添加下拉选项 |
self.clear() | 删除下拉选项集合中的所有选项 |
=self.currentText() | 返回选中选项的文本,返回字符串 |
=self.itemText(idx) | 获取索引为i的item的选项文本,返回字符串 |
self.currentIndexChanged.connect() | 当下拉选项的索引发生改变时发射该信号,发送(self, idx) |
继承自QWidget类的方法 | |
x , y , width , height , ... | 几何类方法,详见窗口的几何数据 |
5.2 QComboBox按钮的使用
import sys
from PyQt5.QtWidgets import *
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.move(500, 400)
self.setFixedSize(300, 300)
vlayout =QVBoxLayout()
self.setLayout(vlayout)
self.label = QLabel()
vlayout.addWidget(self.label)
self.combo = QComboBox()
self.combo.addItems(['C', 'C++', 'Python', 'Java'])
self.combo.currentIndexChanged.connect(self.showLang)
vlayout.addWidget(self.combo)
def showLang(self, idx):
self.label.setText(self.combo.currentText())
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())