文章目录
- 1. 简介
- 2. QCheckBox
- 3. QPushButton
- 4. QSlider
- 5. QProgressBar
- 6. QCalendarWidget
- 7. QPixmap
- 8. QLineEdit
- 9. QSplitter
- 10. QComboBox
- 11. 总结
1. 简介
在PyQt5中,有许多不同类型的组件,可以用于构建各种GUI界面。以下是一些常见的PyQt5组件:
- QWidget: 是所有用户界面对象的基类。它提供了一些基本的功能,比如事件处理和绘图。
- QLabel: 用于显示文本或图像。可以用于显示静态文本或者图片。
- QPushButton: 是一个按钮组件,用于触发操作或者事件。
- QLineEdit: 用于接收单行文本输入。
- QTextEdit: 用于接收多行文本输入。
- QComboBox: 提供了一个下拉列表框,用户可以从中选择一个选项。
- QCheckBox: 用于表示二进制状态,例如选中/未选中,可以与其他组件一起使用来启用或禁用某些操作。
- QRadioButton: 用于表示一组选项中的一个,用户可以选择其中之一。
- QSlider: 允许用户通过拖动滑块来选择数值。
- QSpinBox: 允许用户通过增加或减少按钮来选择数值。
- QProgressBar: 显示操作的进度。
- QCalendarWidget: 提供了一个日历界面,用户可以选择日期。
- QTableWidget: 用于显示表格数据,支持行和列的操作。
- QTreeView: 显示树形结构的数据。
- QDockWidget: 可以将部件(widget)附加到主窗口的边缘,类似于浮动面板。
这些只是PyQt5中可用组件的一部分。使用这些组件,可以轻松创建各种功能的用户界面,从简单的对话框到复杂的桌面应用程序。这里,我们将介绍一些很有用的组件:QCheckBox,QPushButton,QSlider,QProgressBar , QCalendarWidget, QPixmap,QLineEdit,QSplitter,和 QComboBox。
2. QCheckBox
QCheckBox是PyQt5中的复选框组件,允许用户选择或取消选择一个或多个选项。下面是一个简单的介绍和使用案例,
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QCheckBox
class CheckBoxExample(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建一个垂直布局管理器
vbox = QVBoxLayout()
# 创建一个标签
self.label = QLabel("Nothing checked")
# 将标签添加到布局中
vbox.addWidget(self.label)
# 创建两个复选框,并为其添加文本和状态变化的信号槽连接
self.checkbox1 = QCheckBox("Option 1", self)
self.checkbox1.stateChanged.connect(self.checkboxStateChanged)
vbox.addWidget(self.checkbox1)
self.checkbox2 = QCheckBox("Option 2", self)
self.checkbox2.stateChanged.connect(self.checkboxStateChanged)
vbox.addWidget(self.checkbox2)
# 设置布局管理器
self.setLayout(vbox)
# 设置窗口的标题和初始大小
self.setWindowTitle('QCheckBox Example')
self.setGeometry(300, 300, 300, 150)
self.show()
def checkboxStateChanged(self, state):
# 根据复选框的状态更新标签文本
if self.checkbox1.isChecked() and self.checkbox2.isChecked():
self.label.setText("Option 1 and Option 2 checked")
elif self.checkbox1.isChecked():
self.label.setText("Option 1 checked")
elif self.checkbox2.isChecked():
self.label.setText("Option 2 checked")
else:
self.label.setText("Nothing checked")
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = CheckBoxExample()
sys.exit(app.exec_())
这个例子创建了一个简单的窗口,其中包含两个复选框和一个标签。当用户勾选或取消勾选复选框时,标签会相应地更新。
QCheckBox通过QCheckBox(text, parent)构造函数创建,其中text是复选框显示的文本,parent是父级窗口。stateChanged信号与checkboxStateChanged槽函数连接,以便在复选框的状态发生变化时进行响应。checkboxStateChanged槽函数根据复选框的状态更新标签的文本。QVBoxLayout用于管理垂直方向上的布局。setWindowTitle和setGeometry方法用于设置窗口的标题和初始大小。show方法用于显示窗口。
这个例子展示了如何创建和使用QCheckBox,以及如何将其与其他组件和信号连接起来,实现交互功能。
运行结果如下

3. QPushButton
QPushButton是PyQt5中的按钮组件,用于在GUI应用程序中触发操作或事件。下面是一个使用QPushButton的介绍和使用案例,
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QLabel
class ButtonExample(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建一个垂直布局管理器
vbox = QVBoxLayout()
# 创建一个按钮
self.button = QPushButton('Click me', self)
# 创建一个标签,用于显示按钮点击后的输出
self.label = QLabel("Output will be displayed here")
# 将按钮和标签添加到布局中
vbox.addWidget(self.button)
vbox.addWidget(self.label)
# 设置布局管理器
self.setLayout(vbox)
# 为按钮绑定点击事件的处理函数
self.button.clicked.connect(self.buttonClicked)
# 设置窗口的标题和初始大小
self.setWindowTitle('QPushButton Example')
self.setGeometry(300, 300, 300, 150)
self.show()
def buttonClicked(self):
# 按钮被点击时执行的操作
self.label.setText('Button clicked!')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = ButtonExample()
sys.exit(app.exec_())
这个例子创建了一个简单的窗口,其中包含一个按钮。当用户点击按钮时,会触发一个事件。
QPushButton通过QPushButton(text, parent)构造函数创建,其中text是按钮显示的文本,parent是父级窗口。- 将按钮添加到垂直布局管理器中。
- 使用
clicked信号连接按钮的点击事件和buttonClicked槽函数。 buttonClicked是一个自定义的槽函数,当按钮被点击时会被调用。QVBoxLayout用于管理垂直方向上的布局。setWindowTitle和setGeometry方法用于设置窗口的标题和初始大小。show方法用于显示窗口。
这个例子演示了如何创建一个简单的按钮,以及如何为按钮的点击事件绑定处理函数。
运行结果如下

4. QSlider
QSlider是PyQt5中的滑块组件,允许用户通过拖动滑块来选择数值。下面是一个使用QSlider的介绍和使用案例,
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QSlider
from PyQt5.QtCore import Qt
class SliderExample(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建一个垂直布局管理器
vbox = QVBoxLayout()
# 创建一个标签,用于显示滑块当前值
self.label = QLabel("Slider Value: 0")
# 创建一个滑块
self.slider = QSlider(Qt.Horizontal, self)
self.slider.setMinimum(0) # 设置最小值
self.slider.setMaximum(100) # 设置最大值
self.slider.setValue(0) # 设置初始值
self.slider.setTickInterval(10) # 设置刻度间隔
self.slider.setTickPosition(QSlider.TicksBelow) # 设置刻度位置
# 将标签和滑块添加到布局中
vbox.addWidget(self.label)
vbox.addWidget(self.slider)
# 设置布局管理器
self.setLayout(vbox)
# 为滑块的数值变化信号绑定槽函数
self.slider.valueChanged.connect(self.sliderValueChanged)
# 设置窗口的标题和初始大小
self.setWindowTitle('QSlider Example')
self.setGeometry(300, 300, 300, 150)
self.show()
def sliderValueChanged(self):
# 滑块数值变化时执行的操作
slider_value = self.slider.value()
self.label.setText(f"Slider Value: {slider_value}")
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = SliderExample()
sys.exit(app.exec_())
这个例子创建了一个简单的窗口,其中包含一个标签和一个滑块。当用户拖动滑块时,标签会显示滑块的当前值。
QSlider通过QSlider(orientation, parent)构造函数创建,其中orientation可以是Qt.Horizontal(水平方向)或Qt.Vertical(垂直方向),parent是父级窗口。- 使用
setMinimum和setMaximum方法设置滑块的最小值和最大值。 - 使用
setValue方法设置滑块的初始值。 - 使用
setTickInterval方法设置滑块的刻度间隔。 - 使用
setTickPosition方法设置刻度的位置。 - 将滑块的
valueChanged信号连接到自定义的槽函数sliderValueChanged上。 sliderValueChanged槽函数在滑块数值变化时更新标签的文本。QVBoxLayout用于管理垂直方向上的布局。setWindowTitle和setGeometry方法用于设置窗口的标题和初始大小。show方法用于显示窗口。
这个例子演示了如何创建一个简单的滑块,并在滑块数值变化时更新界面的其他部分。
运行结果如下

5. QProgressBar
QProgressBar是PyQt5中的进度条组件,用于显示操作的进度。下面是一个使用QProgressBar的介绍和使用案例,
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QProgressBar
from PyQt5.QtCore import QBasicTimer
class ProgressBarExample(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建一个垂直布局管理器
vbox = QVBoxLayout()
# 创建一个按钮,用于触发进度条的更新
self.start_button = QPushButton('Start', self)
# 创建一个进度条
self.progress_bar = QProgressBar(self)
self.progress_bar.setMinimum(0) # 设置最小值
self.progress_bar.setMaximum(100) # 设置最大值
# 将按钮和进度条添加到布局中
vbox.addWidget(self.start_button)
vbox.addWidget(self.progress_bar)
# 设置布局管理器
self.setLayout(vbox)
# 为按钮绑定点击事件的处理函数
self.start_button.clicked.connect(self.startProgress)
# 初始化定时器
self.timer = QBasicTimer()
self.step = 0
# 设置窗口的标题和初始大小
self.setWindowTitle('QProgressBar Example')
self.setGeometry(300, 300, 300, 150)
self.show()
def startProgress(self):
# 当按钮被点击时启动定时器,每100毫秒调用一次timerEvent
if self.timer.isActive():
self.timer.stop()
self.start_button.setText('Start')
else:
self.timer.start(100, self)
self.start_button.setText('Stop')
def timerEvent(self, event):
# 定时器事件,每次调用使进度条的值增加1
if self.step >= 100:
self.timer.stop()
self.start_button.setText('Start')
return
self.step = self.step + 1
self.progress_bar.setValue(self.step)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = ProgressBarExample()
sys.exit(app.exec_())
这个例子创建了一个简单的窗口,其中包含一个按钮和一个进度条。当用户点击按钮时,进度条开始显示操作的进度。
QProgressBar通过QProgressBar(parent)构造函数创建,其中parent是父级窗口。- 使用
setMinimum和setMaximum方法设置进度条的最小值和最大值。 - 将按钮点击事件与
startProgress方法绑定,用于启动或停止进度条的更新。 QBasicTimer用于定时器的控制,每次定时器事件触发时,timerEvent方法被调用,使进度条的值增加1。timerEvent方法用于处理定时器事件,每次调用时使进度条的值增加1,直到达到最大值为止。QVBoxLayout用于管理垂直方向上的布局。setWindowTitle和setGeometry方法用于设置窗口的标题和初始大小。show方法用于显示窗口。
这个例子演示了如何创建一个简单的进度条,并在按钮点击时启动进度条的更新。
运行结果如下

6. QCalendarWidget
QCalendarWidget是PyQt5中的日历组件,用于显示和选择日期。下面是一个使用QCalendarWidget的介绍和使用案例,
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QCalendarWidget, QLabel
from PyQt5.QtCore import QDate
class CalendarExample(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建一个垂直布局管理器
vbox = QVBoxLayout()
# 创建一个日历组件
self.calendar = QCalendarWidget(self)
# 设置最小日期和最大日期
self.calendar.setMinimumDate(QDate(1900, 1, 1))
self.calendar.setMaximumDate(QDate(2100, 12, 31))
# 创建一个标签,用于显示选择的日期
self.label = QLabel(self)
self.label.setText("Selected Date: ")
# 将日历组件和标签添加到布局中
vbox.addWidget(self.calendar)
vbox.addWidget(self.label)
# 设置布局管理器
self.setLayout(vbox)
# 连接日历组件的selectionChanged信号到自定义的槽函数
self.calendar.selectionChanged.connect(self.updateDateLabel)
# 设置窗口的标题和初始大小
self.setWindowTitle('QCalendarWidget Example')
self.setGeometry(300, 300, 400, 300)
self.show()
def updateDateLabel(self):
# 获取选择的日期,并更新标签的文本
selected_date = self.calendar.selectedDate()
self.label.setText("Selected Date: " + selected_date.toString())
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = CalendarExample()
sys.exit(app.exec_())
这个例子创建了一个简单的窗口,其中包含一个日历组件和一个标签。当用户选择日期时,标签会显示选择的日期。
QCalendarWidget通过QCalendarWidget(parent)构造函数创建,其中parent是父级窗口。- 使用
setMinimumDate和setMaximumDate方法设置日历的最小日期和最大日期。 - 创建一个标签,用于显示选择的日期。
- 将日历组件的
selectionChanged信号连接到自定义的槽函数updateDateLabel上。 updateDateLabel槽函数在用户选择日期时被调用,获取选择的日期并更新标签的文本。QVBoxLayout用于管理垂直方向上的布局。setWindowTitle和setGeometry方法用于设置窗口的标题和初始大小。show方法用于显示窗口。
这个例子演示了如何创建一个简单的日历组件,并在用户选择日期时更新界面的其他部分。
运行结果如下

7. QPixmap
QPixmap是PyQt5中用于处理图像的类,可以加载、显示和操作各种图像格式的图像数据。下面是一个使用QPixmap的介绍和使用案例,
import sys
from PyQt5.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget
from PyQt5.QtGui import QPixmap
class QPixmapExample(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建一个垂直布局管理器
vbox = QVBoxLayout()
# 创建一个QLabel用于显示图片
self.label = QLabel(self)
# 加载一张图片到QPixmap
pixmap = QPixmap("cat.png") # 替换为你自己的图片路径
# 设置QLabel的尺寸为图片的尺寸
self.label.setPixmap(pixmap)
# 添加QLabel到布局中
vbox.addWidget(self.label)
# 设置布局
self.setLayout(vbox)
# 设置窗口的标题和初始大小
self.setWindowTitle('QPixmap Example')
self.setGeometry(300, 300, 300, 200)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = QPixmapExample()
sys.exit(app.exec_())
这个例子创建了一个简单的窗口,其中包含一个QLabel用于显示图片。具体步骤如下:
QPixmap通过QPixmap(filename)构造函数创建,其中filename是图片文件的路径。- 使用
QLabel.setPixmap()方法将QPixmap对象设置到QLabel中,以显示图片。 - 通过
QVBoxLayout布局管理器,将QLabel添加到布局中。 - 使用
setLayout()方法设置布局。 setWindowTitle()和setGeometry()方法用于设置窗口的标题和初始大小。- 最后,使用
show()方法显示窗口。
这个例子演示了如何使用QPixmap加载并显示一张图片。QPixmap还提供了其他方法来进行图像操作,例如缩放、裁剪和旋转等,可以根据需要进行进一步的图像处理。
运行结果如下

8. QLineEdit
QLineEdit是PyQt5中的文本输入框组件,用于接收单行文本输入。下面是一个使用QLineEdit的介绍和使用案例,
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout, QLineEdit
class LineEditExample(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建一个垂直布局管理器
vbox = QVBoxLayout()
# 创建一个标签
self.label = QLabel("Enter your name:")
# 创建一个文本输入框
self.line_edit = QLineEdit(self)
# 将标签和文本输入框添加到布局中
vbox.addWidget(self.label)
vbox.addWidget(self.line_edit)
# 设置布局管理器
self.setLayout(vbox)
# 连接文本输入框的textChanged信号到自定义的槽函数
self.line_edit.textChanged.connect(self.onTextChanged)
# 设置窗口的标题和初始大小
self.setWindowTitle('QLineEdit Example')
self.setGeometry(300, 300, 300, 150)
self.show()
def onTextChanged(self, text):
# 文本输入框文本变化时执行的操作
self.label.setText("Entered text: " + text)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = LineEditExample()
sys.exit(app.exec_())
这个例子创建了一个简单的窗口,其中包含一个标签和一个文本输入框。当用户在文本输入框中输入文本时,标签会显示输入的文本。
QLineEdit通过QLineEdit(parent)构造函数创建,其中parent是父级窗口。- 使用
textChanged信号连接到自定义的槽函数onTextChanged,以便在文本输入框的文本发生变化时进行响应。 onTextChanged槽函数在文本输入框的文本变化时被调用,用于更新标签的文本显示。QVBoxLayout用于管理垂直方向上的布局。setWindowTitle和setGeometry方法用于设置窗口的标题和初始大小。show方法用于显示窗口。
这个例子演示了如何创建一个简单的文本输入框,并在用户输入文本时更新界面的其他部分。
运行结果如下:

9. QSplitter
QSplitter是PyQt5中的分割窗口组件,用于在窗口中创建可调整大小的分割区域。下面是一个使用QSplitter的介绍和使用案例,
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTextEdit, QPushButton, QHBoxLayout, QSplitter
class SplitterExample(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建一个垂直布局管理器
vbox = QVBoxLayout()
# 创建一个QSplitter,用于创建分割窗口
splitter = QSplitter(self)
# 创建两个文本编辑框
text_edit1 = QTextEdit()
text_edit2 = QTextEdit()
# 将文本编辑框添加到分割窗口中
splitter.addWidget(text_edit1)
splitter.addWidget(text_edit2)
# 设置分割窗口的初始大小
splitter.setSizes([200, 200])
# 创建一个按钮,用于调整分割窗口大小
button = QPushButton("Adjust Splitter")
# 将按钮添加到布局中
hbox = QHBoxLayout()
hbox.addWidget(button)
# 将分割窗口和按钮添加到垂直布局中
vbox.addWidget(splitter)
vbox.addLayout(hbox)
# 设置布局
self.setLayout(vbox)
# 设置按钮点击事件的处理函数
button.clicked.connect(self.adjustSplitter)
# 设置窗口的标题和初始大小
self.setWindowTitle('QSplitter Example')
self.setGeometry(300, 300, 500, 300)
self.show()
def adjustSplitter(self):
# 调整分割窗口的大小
sizes = [100, 300]
self.findChild(QSplitter).setSizes(sizes)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = SplitterExample()
sys.exit(app.exec_())
这个例子创建了一个简单的窗口,其中包含一个分割窗口和一个按钮。分割窗口中包含两个文本编辑框,用户可以拖动分割窗口来调整两个文本编辑框的大小。具体步骤如下:
QSplitter通过QSplitter(orientation, parent)构造函数创建,其中orientation可以是Qt.Horizontal(水平方向)或Qt.Vertical(垂直方向),parent是父级窗口。- 使用
addWidget方法将要放入分割窗口的组件(这里是两个文本编辑框)添加到分割窗口中。 - 使用
setSizes方法设置分割窗口的初始大小,以便用户在开始时就能看到两个部分的大小。 - 创建一个按钮,用于调整分割窗口的大小。
- 设置按钮点击事件的处理函数
adjustSplitter,在按钮被点击时调整分割窗口的大小。 QHBoxLayout用于创建水平方向上的布局,以便将按钮放置在底部。QVBoxLayout用于管理垂直方向上的布局,以便将分割窗口和按钮放置在窗口内。setWindowTitle和setGeometry方法用于设置窗口的标题和初始大小。show方法用于显示窗口。
这个例子演示了如何使用QSplitter创建可调整大小的分割窗口,以及如何在窗口中添加和管理其他组件。
运行结果如下

10. QComboBox
QComboBox是PyQt5中的下拉列表组件,允许用户从预定义的选项中选择一个。下面是一个使用QComboBox的介绍和使用案例,
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QComboBox
class ComboBoxExample(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建一个垂直布局管理器
vbox = QVBoxLayout()
# 创建一个标签
self.label = QLabel("Select your programming language:")
# 创建一个下拉列表
self.combo_box = QComboBox(self)
self.combo_box.addItem("Python")
self.combo_box.addItem("Java")
self.combo_box.addItem("C++")
self.combo_box.addItem("JavaScript")
# 设置下拉列表默认选中项
self.combo_box.setCurrentIndex(0)
# 将标签和下拉列表添加到布局中
vbox.addWidget(self.label)
vbox.addWidget(self.combo_box)
# 设置布局
self.setLayout(vbox)
# 连接下拉列表的currentIndexChanged信号到自定义的槽函数
self.combo_box.currentIndexChanged.connect(self.onComboBoxChanged)
# 设置窗口的标题和初始大小
self.setWindowTitle('QComboBox Example')
self.setGeometry(300, 300, 300, 150)
self.show()
def onComboBoxChanged(self, index):
# 下拉列表项发生变化时执行的操作
selected_item = self.combo_box.itemText(index)
self.label.setText("Selected language: " + selected_item)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = ComboBoxExample()
sys.exit(app.exec_())
这个例子创建了一个简单的窗口,其中包含一个标签和一个下拉列表。当用户在下拉列表中选择不同的选项时,标签会显示选中的选项。
QComboBox通过QComboBox(parent)构造函数创建,其中parent是父级窗口。- 使用
addItem方法添加预定义的选项到下拉列表中。 - 使用
setCurrentIndex方法设置下拉列表的默认选中项。 - 连接下拉列表的
currentIndexChanged信号到自定义的槽函数onComboBoxChanged上,以便在下拉列表的选项发生变化时进行响应。 onComboBoxChanged槽函数在下拉列表的选项变化时被调用,用于更新标签的文本显示。QVBoxLayout用于管理垂直方向上的布局。setWindowTitle和setGeometry方法用于设置窗口的标题和初始大小。show方法用于显示窗口。
这个例子演示了如何创建一个简单的下拉列表,并在用户选择不同的选项时更新界面的其他部分。
运行结果如下

11. 总结
在这些示例中,我们使用了PyQt5中的不同组件来构建GUI应用程序。每个组件都有特定的功能和用途:
- QPushButton: 用于触发操作或事件,可以包含文本或图像。
- QSlider: 允许用户通过拖动滑块来选择数值,通常用于调整范围内的数值。
- QProgressBar: 用于显示操作的进度,通常在长时间操作时显示进度信息。
- QCheckBox: 允许用户选择或取消选择一个或多个选项,通常用于启用或禁用一组选项。
- QCalendarWidget: 用于显示和选择日期,通常用于日历应用程序或日期选择器。
- QPixmap: 用于加载、显示和操作图像数据。
- QLineEdit: 用于接收单行文本输入。
- QSplitter: 用于创建可调整大小的分割窗口,允许用户拖动分割窗口来调整大小。
- QComboBox: 用于在预定义选项中选择一个,通常用于提供选项选择功能。
通过结合使用这些组件,可以构建丰富多样的GUI应用程序,从简单的按钮操作到复杂的图像处理和数据输入,满足用户的各种需求。每个组件都可以与信号和槽连接,使得在用户交互时能够实现相应的动作或更新界面的其他部分。 PyQt5提供了丰富的文档和示例,以及灵活的布局管理器,使得GUI应用程序开发变得更加简单和灵活。



















