day02——QWidget
今天的重点是:窗口与子控件、布局管理、信号与槽(初步体验)。
🧩 Day 2 学习目标
-
认识
QWidget—— PyQt 里最基础的“窗口容器”。 -
区分 顶层窗口 和 子控件。
-
学习用 布局管理器 排布多个控件。
-
初步体验 信号与槽机制(按钮点击触发动作)。
1. QWidget:所有窗口的基石
-
QWidget是 PyQt 中最基础的控件类。 -
所有的可视化控件(
QLabel,QPushButton,QLineEdit等)都继承自QWidget。 -
顶层窗口:没有父控件的
QWidget,会单独显示为一个独立的窗口。 -
子控件:创建时指定父控件,会嵌入到父窗口内部。
例子:
from PyQt6.QtWidgets import QApplication, QLabel, QWidget
import sys
# 创建应用
app = QApplication(sys.argv)
# 创建主窗口
window = QWidget()
window.setWindowTitle("day02 - 窗口与子控件")
window.resize(400, 300)
# 创建一个子控件Qlabel 放到主窗口中
label = QLabel("hello, i am a label", parent = window)
label.move(50, 50)
label.resize(200, 50)
label.setStyleSheet("background-color: lightblue; color: white;")
# 显示窗口
window.show()
# 进入事件循环
sys.exit(app.exec())
此时:
-
window是主窗口。 -
label作为window的子控件,不会单独成为窗口。
运行结果如下:

2. 布局管理器:自动排布多个控件
手动 move(x, y) 定位控件很麻烦。布局管理器能帮你自动排布。
常见布局
-
QVBoxLayout:垂直排列(从上到下)。 -
QHBoxLayout:水平排列(从左到右)。 -
QGridLayout:网格排列(类似表格)。
例子:
from PyQt6.QtWidgets import QApplication, QLabel, QPushButton, QWidget, QVBoxLayout
import sys
# 创建应用
app = QApplication(sys.argv)
# 创建主窗口
window = QWidget()
window.setWindowTitle("day02 - 布局管理")
window.resize(400, 300)
# 创建一个label标签
label = QLabel("hello, i am a label", window)
label.setStyleSheet("background-color: lightblue; color: white;")
button = QPushButton("click me", window)
button.setStyleSheet("background-color: lightgreen; color: yellow;")
# 创建一个垂直布局管理器
layout = QVBoxLayout()
layout.addWidget(label)
layout.addWidget(button)
window.setLayout(layout)
# 显示窗口
window.show()
# 进入事件循环
sys.exit(app.exec())
运行效果:
窗口里先显示标签,下面是按钮,自动上下排列。
如果缩放窗口,控件位置会跟着调整。

3. 信号与槽机制(初步)
PyQt 最强大的特性之一就是 信号与槽(Signal & Slot)。
-
信号:事件发生时发出的“广播”。
-
槽:对信号的响应函数。
按钮是最经典的例子:
from PyQt6.QtWidgets import QApplication, QLabel, QPushButton, QWidget, QVBoxLayout
import sys
# 创建应用
app = QApplication(sys.argv)
# 创建主窗口
window = QWidget()
window.setWindowTitle("day02 - 信号与信号槽")
window.resize(300, 200)
# 创建一个label标签
label = QLabel("等待点击……")
button = QPushButton("点击我")
def on_button_clicked():
label.setText("按钮被点击了!")
button.clicked.connect(on_button_clicked)
# 创建一个垂直布局管理器
layout = QVBoxLayout()
layout.addWidget(label)
label.setStyleSheet("background-color: lightgreen; color: black;")
layout.addWidget(button)
window.setLayout(layout)
# 显示窗口
window.show()
# 进入事件循环
sys.exit(app.exec())
当你点击按钮时:
-
button.clicked发出信号 -
on_button_clicked槽函数被调用 -
label里的文字发生变化


Day 2 总结
-
QWidget是窗口基类,顶层窗口 vs 子控件 的区别要理解。 -
布局管理器让界面更智能,不用手动调位置。
-
信号槽机制是 PyQt 的核心,后续会逐步深入。
您的资助是我最大的动力!
金额随意,欢迎来赏!

浙公网安备 33010602011771号