day02——QWidget

今天的重点是:窗口与子控件布局管理信号与槽(初步体验)


🧩 Day 2 学习目标

  1. 认识 QWidget —— PyQt 里最基础的“窗口容器”。

  2. 区分 顶层窗口子控件

  3. 学习用 布局管理器 排布多个控件。

  4. 初步体验 信号与槽机制(按钮点击触发动作)。


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 的子控件,不会单独成为窗口。

运行结果如下:

image

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())

运行效果:
窗口里先显示标签,下面是按钮,自动上下排列。
如果缩放窗口,控件位置会跟着调整。

image

 

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 里的文字发生变化

imageimage


Day 2 总结

  • QWidget 是窗口基类,顶层窗口 vs 子控件 的区别要理解。

  • 布局管理器让界面更智能,不用手动调位置。

  • 信号槽机制是 PyQt 的核心,后续会逐步深入。

posted @ 2025-09-06 09:49  毛豆*_*  阅读(59)  评论(0)    收藏  举报