分组框控件学习02

21 阅读1分钟

试图复现下面的图片

image.png

from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QFormLayout, QGridLayout, QGroupBox, QSlider, QLineEdit, \
    QLabel, QPushButton, QHBoxLayout
import sys
from PyQt6.QtCore import Qt


class MainWindows(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.ui()

    def ui(self):
        self.setWindowTitle("组合控件测试")
        self.resize(400, 300)
        self.show()

        ####################################
        # 主布局
        ####################################
        main_layout = QVBoxLayout()
        f_layout2 = QFormLayout()
        f_layout = QFormLayout()

        ####################################
        # 年龄
        ####################################
        self.age_group = QGroupBox("年龄设置")
        self.name_group = QGroupBox("姓名设置")

        self.age_label_slider = QSlider()
        self.age_label_slider.setOrientation(Qt.Orientation.Horizontal)  # 设置滑块的方向
        self.age_label_slider.setRange(0, 100)  # 设置滑块的范围
        self.ageChange_int_edit = QLineEdit()
        self.ageChange_int_edit.setAlignment(Qt.AlignmentFlag.AlignLeft)  # 设置edit栏文字对齐方式
        self.ageChange_str_edit = QLineEdit()
        self.ageChange_str_edit.setAlignment(Qt.AlignmentFlag.AlignLeft)

        ####################################
        # 姓名
        ####################################
        self.name_edit = QLineEdit()
        self.name_edit.setAlignment(Qt.AlignmentFlag.AlignLeft)
        self.button_name = QPushButton("设置姓名")
        self.name_edit2 = QLineEdit()
        self.name_edit2.setAlignment(Qt.AlignmentFlag.AlignLeft)
        h_layout = QHBoxLayout()
        h_layout.addWidget(self.name_edit)
        h_layout.addWidget(self.button_name)

        f_layout2.addRow("输入姓名", h_layout)
        f_layout2.addRow("nameChanged(str)响应", self.name_edit2)

        # 控件添加到布局中
        f_layout.addRow("设置年龄(1~100)", self.age_label_slider)
        f_layout.addRow("ageChanged(int)响应", self.ageChange_int_edit)
        f_layout.addRow("ageChanged(str)响应", self.ageChange_str_edit)

        self.age_group.setLayout(f_layout)
        self.name_group.setLayout(f_layout2)
        main_layout.addWidget(self.age_group)
        main_layout.addWidget(self.name_group)
        self.close_button = QPushButton("关闭")
        main_layout.addWidget(self.close_button)
        self.setLayout(main_layout)

        ####################################
        # 信号和槽
        ####################################
        self.age_label_slider.sliderMoved.connect(self.age_label_slider_function)
        self.button_name.clicked.connect(self.button_name_function)
        self.close_button.clicked.connect(self.close_button_function)

    def age_label_slider_function(self):
        slider_value = self.age_label_slider.value()
        self.ageChange_int_edit.setText(str(slider_value))
        if int(slider_value) < 40:
            self.ageChange_str_edit.setText("您正值中年")
        elif int(slider_value) >= 40 and int(slider_value) < 70:
            self.ageChange_str_edit.setText("您已经步入老年")
        else:
            self.ageChange_str_edit.setText("您高寿了")

    def button_name_function(self):
        name_value = self.name_edit.text()
        if name_value:
            self.name_edit2.setText(f"hello,{name_value}")

    def close_button_function(self):
        self.close()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindows()
    sys.exit(app.exec())

程序运行效果

Kapture 2025-05-09 at 01.50.12.gif