PyQt5-滑块控件

PyQt5-滑块控件

# @Time : 2021/4/17 12:42 

# @Author : Kevin

# @File : 滑块控件.py

# @Software: PyCharm

# encoding = utf-8

'''
滑块控件(QSlider)

'''

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *


class QSliderDemo(QWidget):
    def __init__(self):
        super(QSliderDemo, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('滑块控件演示')  # 创建窗口标题
        self.resize(800, 600)  # 设置主窗口大小
        layout = QVBoxLayout()  # 垂直布局

        # todo Lable 创建根据水平位置的滑块数值大小而改变的显示标签(字符)
        self.label = QLabel('水平滑块—字体大小')  # 要显示的内容
        self.label.setAlignment(Qt.AlignCenter)  # 居中显示
        # todo Lable1 创建根据垂直位置的滑块数值大小而改变的显示标签(字符)
        self.label1 = QLabel('垂直滑块—字体大小')  # 要显示的内容
        self.label1.setAlignment(Qt.AlignCenter)  # 居中显示

        # todo Lable2 创建根据水平位置的滑块数值大小而改变的显示标签(字符)
        self.label2 = QLabel('水平滑块—字体位移')  # 要显示的内容
        self.label2.setFont(QFont('Arial', 20))  # 设置字体大小(静态)

        # todo Lable3 创建根据垂直位置的滑块数值大小而改变的显示标签(字符)
        self.label3 = QLabel('垂直滑块—字体位移')  # 要显示的内容
        self.label1.setFont(QFont('Arial', 20))  # 设置字体大小(静态)

        # todo 将label,label1,label2,label3画出
        layout.addWidget(self.label)
        layout.addWidget(self.label1)
        layout.addWidget(self.label2)
        layout.addWidget(self.label3)
        
        # todo 创建一个水平的滑块 
        """ *  *  *  *  水  *  *  平  *  *  *  滑  *  *  *  * 块  *  *  *  * """
        self.slider = QSlider(Qt.Horizontal)  # 水平(左右拖动)

        # 设置最小值
        self.slider.setMinimum(10)
        # 设置最大值
        self.slider.setMaximum(50)

        # 步长
        self.slider.setSingleStep(5)

        # 设置当前值
        self.slider.setValue(10)

        # 设置刻度的位置,刻度在下边
        self.slider.setTickPosition(QSlider.TicksBelow)

        # 设置刻度得间隔
        self.slider.setTickInterval(1)

        layout.addWidget(self.slider)  # 画出控件(滑块控件)
        self.slider.valueChanged.connect(self.valueChange)  # 绑定信号槽
        
        # todo 创建一个垂直的滑块 
        """ *  *  *  *  垂  *  *  直  *  *  *  滑  *  *  *  * 块  *  *  *  * """
        self.slider1 = QSlider(Qt.Vertical)  # 垂直滑块
        # 设置最小值
        self.slider1.setMinimum(5)
        # 设置最大值
        self.slider1.setMaximum(30)
        
        # 步长
        self.slider1.setSingleStep(5)
        
        # 设置当前值
        self.slider1.setValue(5)

        # 设置刻度的位置,刻度在左边
        self.slider1.setTickPosition(QSlider.TicksLeft)
        
        # 设置刻度间隔
        self.slider1.setTickInterval(5)
        
        layout.addWidget(self.slider1)  # 画出控件(滑块控件)
        self.slider1.valueChanged.connect(self.valueChange)  # 绑定信号槽
        

        self.setLayout(layout)  # 在主窗口中显示出上述控件

    def valueChange(self):
        print('——————水平滑块当前值为——————: %s' % self.slider.value())
        print('++++++垂直滑块当前值为++++++: %s' % self.slider1.value())

        size = self.slider.value()  # 水平滑块位置的值
        size1 = self.slider1.value()  # 垂直滑块位置的值

        # todo 看lable,lable1根据滑块值对字号改变
        self.label.setFont(QFont('Arial', size))  # 设置字体大小
        self.label1.setFont(QFont('Arial', size1))  # 设置字体大小

        # todo 注释掉上面两行代码,并使用下面两行代码可以看到Lable2,Lable3位置变化
        # self.label2.move(size*30, size1*30)
        # self.label3.move(size1 * 30, size * 30)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = QSliderDemo()
    main.show()
    sys.exit(app.exec_())

### OmegaConf 配置管理简介 OmegaConf 是一个强大的 Python 库,用于处理复杂的配置文件。它支持多种数据结构(如字典、列表)以及 YAML 文件的解析和操作。以下是有关如何使用 OmegaConf 的详细介绍。 #### 创建配置对象 可以通过 `OmegaConf.create` 方法创建一个新的配置对象。该方法可以接受字典、YAML 字符串或其他兼容的数据结构作为输入[^1]。 ```python import omegaconf from omegaconf import OmegaConf config_dict = {"database": {"host": "localhost", "port": 6379}} config = OmegaConf.create(config_dict) print(OmegaConf.to_yaml(config)) # 将配置转换为 YAML 格式的字符串 ``` #### 加载外部 YAML 文件 如果需要加载外部 YAML 文件,可使用 `OmegaConf.load` 方法。这使得程序能够轻松读取并应用存储在磁盘上的配置文件。 ```python yaml_file_path = "./example_config.yaml" file_conf = OmegaConf.load(yaml_file_path) # 打印加载后的配置内容 print(file_conf.database.host) # 输出 'localhost' ``` #### 合并多个配置源 当存在多个配置来源时(例如默认设置与命令行参数),可以使用 `OmegaConf.merge` 来无缝合并它们。此功能允许开发者优先级较高的配置覆盖较低级别的配置项。 ```python default_configs = OmegaConf.create({"model": {"type": "resnet50"}}) cli_args = OmegaConf.from_dotlist(["model.type=vgg16"]) merged_config = OmegaConf.merge(default_configs, cli_args) assert merged_config.model.type == "vgg16" # 命令行参数成功覆盖默认值 ``` #### 动态更新配置 除了静态定义外,还可以通过访问器动态修改现有配置中的字段。这种灵活性非常适合运行时调整某些超参数或环境变量。 ```python dynamic_update = file_conf.copy() dynamic_update.database.port = 8080 print(dynamic_update.database.port) # 输出新的端口号 8080 ``` #### 错误处理机制 为了防止非法赋值破坏整个系统的稳定性,OmegaConf 提供了严格的模式控制选项。启用严格模式后,任何未声明过的键都将引发异常提示用户修正错误。 ```python strict_mode_enabled = file_conf.copy() strict_mode_enabled.set_struct(True) # 开启只读保护状态 try: strict_mode_enabled.new_field = True # 此处会抛出 AttributeError 异常 except AttributeError as e: print(f"Catch expected error: {e}") ``` --- ### 总结 以上展示了 OmegaConf 在不同场景下的典型用法,包括但不限于初始化配置实例、加载外部资源、融合多层设定逻辑以及实施安全防护措施等方面的功能特性。希望这些例子能帮助快速掌握其核心概念和技术要点!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值