我用PYQT5做的第一个实用的上位机项目(五)

news2024/11/22 14:00:33

制作一个动态仪表盘。

 具体过程参照前面技术储备阶段的文章:

PYQT制作动态时钟-CSDN博客

使用PYQT5简单制作动态仪表盘-CSDN博客

仪表盘由以下部件构成:背景

指针 

 表盘

 进度条(设定值)

 遮罩

 设定和显示

其中表盘、 进度条和指针的外形尺寸以及几何位置相同,背景色都是透明色。通过旋转指针和进度条的角度来实现显示。遮罩的作用是把进度条的下半部分遮住。

总结一下,目前有两个画面:主画面和数据设置画面,一个选择器,一个仪表盘,一个指示灯,几个功能按钮。程序在之前的基础上进行了一些规划上的优化,基本框架也已经建立,结构如下:

如上图,每个画面对应一个同名的首字母大写的类,用来补充定义画面。

 同样的,画面中的部件,每个部件对应一个同名的首字母大写的类,用来补充定义部件。

所有代码:

from sys import exit, argv
from time import strftime

from PyQt5.QtCore import Qt, QCoreApplication, pyqtSignal, QObject
from PyQt5.QtGui import QTransform
from PyQt5.QtWidgets import QApplication
from PyQt5 import uic
import buttons  # 按钮的内嵌图片资源
# import dash     # 仪表盘的内嵌图片资源
from PYS.MyButton import MyButton
from PYS.MyDash import *
from PYS.MyLabel import MyLabel
from PYS.MyLamp import MyLamp
from PYS.MySelectBox import *


############################################
# 公共的函数
class PublicFunction:  # 公共函数
    @staticmethod
    def normal_button_init(button):  # 通常规格按钮的初始化
        # button.button.isEntered = False  # 鼠标焦点是否在内
        button.setImage()  # 获取按钮上的图片
        button.style_normal = f'background-color:#4b5075;border-radius:8px;border:2px solid  rgb(43, 78, 140);color:#e6e6e6;image:{button.image};'  # 常态style
        button.style_enter = f'background-color:#4b5075;border-radius:8px;border:3px solid  #e6e6e6;color:#e6e6e6;image:{button.image};'  # 鼠标悬停后的style
        button.style_clicked = f'background-color:#4b5075;border:2px solid  #039806;border-radius:8px;color:#e6e6e6;image:{button.image};'  # 鼠标点击后的style
        button.style_on = f'background-color:#039806;border:4px solid  #e6e6e6;border-radius:8px;color:#e6e6e6;image:{button.image};'  # ON状态的style
        button.style_disable = f'background-color:#767676;border:2px solid  rgb(43, 78, 140);border-radius:8px;color:#c6c6c6;image:{button.image};'  # 禁用状态下的style

    @staticmethod
    def green_lamp_init(lamp):  # 绿色指示灯
        lamp.rad = str(round(lamp.width() / 2))
        lamp.off_color = '#767676'  # 默认off颜色
        lamp.on_color = '#039806'  # 默认on颜色
        lamp.border_color = '#2b4e8c'  # 默认的边框颜色

    @staticmethod
    def red_lamp_init(lamp):  # 红色指示灯
        lamp.rad = str(round(lamp.width() / 2))
        lamp.off_color = '#767676'  # 默认off颜色
        lamp.on_color = '#da1c1c'  # 默认on颜色
        lamp.border_color = '#2b4e8c'  # 默认的边框颜色

    @staticmethod
    def normal_label_init(label):  # 通常标签的初始化
        label.isEntered = False  # 鼠标焦点是否在内
        label.style_normal = 'background-color:#000d47;border:2px solid #4b5075;border-radius:8px;color:#f3da83;'  # 常态style
        label.style_enter = 'background-color:#4b5075;border-radius:8px;border:3px solid  #e6e6e6;color:#e6e6e6;'  # 鼠标悬停后的style
        label.style_clicked = 'background-color:#4b5075;border:2px solid  #039806;border-radius:8px;color:#e6e6e6;'  # 鼠标点击后的style

    @staticmethod
    def normal_selectorBox_init(selector):  # 通常选择box的初始化
        selector.start_on = 0  # 起始状态为on的序号
        selector.controls_normal_style = 'color: #e6e6e6;background-color: rgba(255, 255, 255, 0);border-radius:2px;border:0px solid #1e2557;'  # 默认控制器常态style
        selector.controls_enter_style = 'color: #e6e6e6;background-color: rgba(255, 255, 255, 0);border-radius:2px;border:1px solid #e6e6e6;'  # 默认控制器鼠标悬停style
        selector.controls_clicked_style = 'color: #e6e6e6;background-color: rgba(255, 255, 255, 0);border-radius:2px;border:1px solid #039806;'  # 默认控制器鼠标点击style

        selector.states_off_style = 'border:2px solid  rgb(43, 78, 140);background-color:#4b5075;border-radius:2px;'  # 默认指示器off状态style
        selector.states_on_style = 'border:2px solid  rgb(43, 78, 140);background-color:#039806;border-radius:2px;'  # 默认指示器on状态style

        for c in selector.controls:  # 初始化控制器
            c.style_normal = selector.controls_normal_style
            c.style_enter = selector.controls_enter_style
            c.style_clicked = selector.controls_clicked_style

        for i in range(len(selector.states)):  # 初始化指示器
            selector.states[i].states_on_style = selector.states_on_style
            selector.states[i].states_off_style = selector.states_off_style
            if i == selector.start_on:
                selector.states[i].setStyleSheet(selector.states_on_style)
            else:
                selector.states[i].setStyleSheet(selector.states_off_style)

    @staticmethod
    def normal_dash_init(dash):  # 通常仪表盘的初始化
        dash.adjusts_normal_style = 'background-color:#000d47;border:2px solid #4b5075;border-radius:8px;color:#f3da83;'  # “微调”按钮常态style
        dash.adjusts_clicked_style = 'background-color:#000d47;border:2px solid #039806;border-radius:8px;color:#f3da83;'  # “微调”按钮点击后的style
        dash.adjusts_enter_style = 'background-color:#000d47;border:1px solid #e6e6e6;border-radius:8px;color:#f3da83;'  # “微调”按钮鼠标悬停的style
        dash.setting_normal_style = 'background-color:#000d47;border:2px solid #4b5075;border-radius:8px;color:#f3da83;'  # “设置”标签常态style
        dash.setting_clicked_style = 'background-color:#000d47;border:2px solid #039806;border-radius:8px;color:#f3da83;'  # “设置”标签点击后的style
        dash.setting_enter_style = 'background-color:#000d47;border:1px solid #e6e6e6;border-radius:8px;color:#f3da83;'  # “设置”标签鼠标悬停的style

        dash.panel_image = normal_dash_panel_image
        dash.pointer_image = normal_dash_pointer_image
        dash.preset_image = normal_dash_preset_image

        dash.panel.setPixmap(dash.panel_image)
        dash.pointer.setPixmap(dash.pointer_image)
        dash.preset.setPixmap(dash.preset_image)

        dash.pointer.setAlignment(Qt.AlignCenter)
        dash.panel.setAlignment(Qt.AlignCenter)
        dash.preset.setAlignment(Qt.AlignCenter)

        dash.label_setting.style_normal = dash.setting_clicked_style  # “设置”标签常态style
        dash.label_setting.style_clicked = dash.setting_clicked_style  # “设置”标签点击后的style
        dash.label_setting.style_enter = dash.setting_enter_style  # “设置”标签点击后的style

        dash.adjust_down.style_normal = dash.adjusts_normal_style  # “微调-”按钮常态style
        dash.adjust_down.style_clicked = dash.adjusts_clicked_style  # “微调-”按钮点击后的style
        dash.adjust_down.style_enter = dash.adjusts_enter_style  # “微调-”按钮点击后的style

        dash.adjust_up.style_normal = dash.adjusts_normal_style  # “微调-”按钮常态style
        dash.adjust_up.style_clicked = dash.adjusts_clicked_style  # “微调-”按钮点击后的style
        dash.adjust_up.style_enter = dash.adjusts_enter_style  # “微调-”按钮点击后的style


############################################
# 画面的类,每个画面对应一个同名的首字母大写的类,这个类补充定义了画面

class Form0:  # 画面form0的类(form0是主窗口)
    def __init__(self):
        # 画面中部件的类,每个部件对应一个同名的首字母大写的类,这个类补充定义了对应的部件
        self.LabelSystemClock = self.LabelSystemClock()
        self.Lamp_working_1 = self.Lamp_working_1()
        self.Btn_history = self.Btn_history()
        self.Btn_user = self.Btn_user()
        self.Btn_exit = self.Btn_exit()
        self.Btn_setting = self.Btn_setting()
        self.Selector_1 = self.Selector_1()
        self.Dash_1 = self.Dash_1()
        #  以下测试用   ######################################################
        form0.slider1.valueChanged.connect(lambda: self.Dash_1.preset.setPixmap(
            self.Dash_1.preset_image.transformed(QTransform().rotate(round(form0.slider1.value() * 0.3)))))
        form0.slider2.valueChanged.connect(lambda: self.Dash_1.pointer.setPixmap(
            self.Dash_1.pointer_image.transformed(QTransform().rotate(round(form0.slider2.value() * 0.3)))))
        #  以上测试用   ######################################################
        form0.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)  # 关掉边框,始终最前
        form0.menuBar().setVisible(False)  # 关闭顶部菜单栏
        form0.statusBar().setVisible(False)  # 关闭底部状态栏

    # 画面中的部件的类,每个部件对应一个同名的首字母大写的类,作为对部件的补充定义
    class LabelSystemClock(QLabel):  # 主画面时钟
        def __init__(self, parent=None):
            super().__init__(parent)
            self.label = form0.labelSystemClock  # 本class对应的实体部件
            # 本部件的所有特性已经在Qt Designer样式表里面定义,无需补充和再次初始化

    class Btn_exit(MyButton):  # “退出系统”按钮对应的类
        def __init__(self, parent=None):
            super().__init__(parent)
            self.button = form0.btn_exit  # 本class对应的实体部件
            PublicFunction.normal_button_init(self.button)  # 引用通常规格按钮的初始化
            self.button.Clicked.connect(self.beClicked)  # 本按钮单机后的连接

        def beClicked(self):  # 本按钮点击后的操作
            for f in forms:  # 关闭所有窗口
                f.close()

    class Btn_setting(MyButton):  # “参数设置”按钮对应的类
        def __init__(self, parent=None):
            super().__init__(parent)
            self.button = form0.btn_setting  # 本class对应的实体部件
            PublicFunction.normal_button_init(self.button)  # 引用通常规格按钮的初始化
            #  以下测试用   ######################################################
            self.button.Clicked.connect(lambda: Form0.Lamp_working_1.lamp.color_on_bool(False))  # 这两种方法的作用是相同的
            form0.btn_setting.Clicked.connect(lambda: form0.lamp_working_1.color_on_bool(False))
            #  以上测试用   ######################################################

    class Btn_user(MyButton):  # “用户管理”按钮对应的类
        def __init__(self, parent=None):
            super().__init__(parent)
            self.button = form0.btn_user  # 本class对应的实体部件
            PublicFunction.normal_button_init(self.button)  # 引用通常规格按钮的初始化

    class Btn_history(MyButton):  # “历史数据”按钮对应的类
        def __init__(self, parent=None):
            super().__init__(parent)
            self.button = form0.btn_history  # 本class对应的实体部件
            PublicFunction.normal_button_init(self.button)  # 引用通常规格按钮的初始化

    class Lamp_working_1(MyLamp):  # “工作指示1”指示灯对应的类
        def __init__(self, parent=None):
            super().__init__(parent)
            self.lamp = form0.lamp_working_1  # 本class对应的实体部件
            PublicFunction.green_lamp_init(self.lamp)  # 初始化为绿色指示灯
            self.lamp.color_on_bool(True)  # 初始化为on状态

    class Selector_1(MySelectorBox):  # 选择器1对应的类
        def __init__(self, parent=None):
            super().__init__(parent)
            self.control0 = form0.control0_selector_1  # 本class对应的实体部件
            self.control1 = form0.control1_selector_1
            self.state0 = form0.state0_selector_1
            self.state1 = form0.state1_selector_1
            self.controls = [self.control0, self.control1]  # 选择器们的集合
            self.states = [self.state0, self.state1]  # 状态指示灯的集合
            PublicFunction.normal_selectorBox_init(self)  # 引用通常选择器的初始化

            self.control0.Clicked.connect(lambda: self.control_clicked(0))
            self.control1.Clicked.connect(lambda: self.control_clicked(1))

        def control_clicked(self, n):
            for i in range(len(self.states)):
                if i == n:
                    self.states[i].setStyleSheet(self.states_on_style)
                else:
                    self.states[i].setStyleSheet(self.states_off_style)

    class Dash_1(MyDash):  # 仪表盘1对应的类

        def __init__(self, parent=None):
            super().__init__(parent)
            self.panel = form0.panel_dash_1  # 仪表面板
            self.pointer = form0.pointer_dash_1  # 仪表指针
            self.preset = form0.preset_dash_1  # 预设值指示

            self.label_setting = form0.label_setting_dash_1  # "设置值“标签
            self.label_actual = form0.label_actual_dash_1  # "实际值“标签

            self.adjust_down = form0.adjust_down_dash_1  # 微调-按钮
            self.adjust_up = form0.adjust_up_dash_1  # 微调+按钮

            PublicFunction.normal_dash_init(self)  # 引用通常仪表盘的初始化

            self.label_setting.DoubleClicked.connect(self.label_setting_double_clicked)  # “设定值”标签双击后的连接

        def label_setting_double_clicked(self):  # “设定值”标签双击后的动作
            form_setting.move(self.label_setting.pos())  # 将数据设置画面移动至标签所在位置
            form_setting.label_setting.setText(self.label_setting.text())  # 将 “设定值”标签的内容显示在数据设置画面的“设置”标签内
            form_setting.show()  # 显示设置画面
            Form_setting.Btn_OK.todo = self.todo1  # 定义数据设置画面“确定”按钮按下后执行的函数名

        def todo1(self):  # 数据设置画面“确定”按钮按下后执行的函数内容
            self.label_setting.setText(form_setting.label_setting.text())


class Form_setting:  # 画面form_setting的类(form_setting是共用的数据设置窗口)
    def __init__(self):  # 画面form_setting的类的初始化
        form_setting.setWindowFlags(Qt.WindowStaysOnTopHint)  # 始终最前
        self.Btn_OK = self.Btn_OK()
        self.Btn_cancel = self.Btn_cancel()
        self.Label_setting = self.Label_setting()

    class Btn_OK(MyButton):  # “确定”按钮的类
        todo = None  # 这是一个共用的画面,todo是本画面确定键按下后将要执行的函数
        args = []  # todo函数的参数

        def __init__(self, parent=None):
            super().__init__(parent)
            self.button = form_setting.btn_OK  # 本class对应的实体部件
            PublicFunction.normal_button_init(self.button)  # 引用通常规格按钮的初始化
            self.button.Clicked.connect(self.beClicked)  # “确定”按钮 点击后的连接

        def beClicked(self):  # “确定”按钮 点击后的动作
            self.todo(*self.args)  # 点击OK后执行预置的函数
            form_setting.close()  # 关闭画面

    class Btn_cancel(MyButton):  # “取消”按钮的类
        def __init__(self, parent=None):
            super().__init__(parent)
            self.button = form_setting.btn_cancel  # 本class对应的实体部件
            PublicFunction.normal_button_init(self.button)  # 引用通常规格按钮的初始化

            self.button.Clicked.connect(form_setting.close)  # 关闭画面

    class Label_setting(MyLabel):  # “设定值”标签的类
        def __init__(self, parent=None):
            super().__init__(parent)
            self.label = form_setting.label_setting  # 本class对应的实体部件
            PublicFunction.normal_label_init(self.label)  # 引用通常规格标签的初始化


############################################
# 主函数
if __name__ == '__main__':
    app = QApplication(argv)
    QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)  # 解决显示比例不同时的部件变形问题
    # 全局公用图片资源  ###################################
    normal_dash_panel_image = QPixmap("../UIS/表盘.png")
    normal_dash_pointer_image = QPixmap("../UIS/指针.png")
    normal_dash_preset_image = QPixmap("../UIS/预设.png")

    # 界面相关  ###################################
    forms = []  # 所有界面的集合
    form0 = uic.loadUi('../UIS/form0.ui')  # 生成并加载画面,form0是主画面
    forms.append(form0)
    Form0 = Form0()  # form0对应的类是Form0,将类Form0实体化

    form0.show()

    form_setting = uic.loadUi('../UIS/设定值.ui')
    forms.append(form_setting)
    Form_setting = Form_setting()  # form_setting对应的类是Form_setting,将类Form_setting实体化

    #           全局的类              #
    class Ui(QObject):  # 作用全局的所有变量和信号在这里定义
        signal_1S = pyqtSignal()  # 秒周期信号
        sys_counter = 0  # 系统计数器,用以控制节拍
        timer_1S = QTimer()   # 秒周期定时器
        timer_1S.start(1000)

        def connects(self):   # 作用全局的连接在这里定义
            self.timer_1S.timeout.connect(Ui.signal_1S.emit)  # 秒周期定时器超时后,秒周期信号emit
            self.signal_1S.connect(lambda: Form0.LabelSystemClock.label.setText(strftime('%Y-%m-%d %H:%M:%S')))    # 秒周期信号的连接

    Ui = Ui()   # 实体化
    Ui.connects()  # 定义全局连接

    exit(app.exec_())

运行截图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1071911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UWB PDOA定位原理

以下是笔记总结,内容不完全正确 1,什么是PDOA PDOA &#xff0c;英文全称是Phase-Difference-of-Arrival&#xff0c;信号到达相位差 PDOA定位算法的原理如下&#xff1a; UWB基站上放置两个相同且间隔d<λ/2的天线&#xff0c;UWB标签上的信号到达两个天线的相位差就在-180…

实体机 安装 centos

实体机 安装 centos 制作U盘的时候&#xff0c;使用的ultraISO 同样方法一个u盘制作的有问题&#xff0c; 另外一个制作的没有问题。 可能和选择 usb-hdd 或者 usb-hdd 有关 https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/ 参考文档&#xff1a; http:…

数据结构的魔法:高级算法优化实战

文章目录 数据结构与算法&#xff1a;基础知识数据结构算法 高级算法优化实战1. 数据缓存2. 哈希表优化3. 算法优化 高级算法优化的挑战结论 &#x1f389;欢迎来到数据结构学习专栏~数据结构的魔法&#xff1a;高级算法优化实战 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;…

ui设计师简历自我评价的范文

ui设计师简历自我评价的范文篇一 本人毕业于艺术设计专业&#xff0c;具有较高的艺术素养&#xff0c;平时注重设计理论知识的积累&#xff0c;并将理论应用到作品中。了解当下设计的流行趋势&#xff0c;设计注重细节、重视用户体验&#xff0c;对色彩搭配有着浓厚的兴趣&…

[经验]如何解决python环境中的版本冲突问题

总结一下最近的经验 文章目录 一.报了什么错的时候可能是版本冲突二.解决版本冲突的工作流1.pip check2.libraries.io3.查看PyPI、官方文档和GitHub issues3. StackOverflow等各种类似平台4.借助AI(如果用perplexity等联网的ai相当于在这一步综合了前面步骤) 一.报了什么错的时…

XPath在数据采集中的运用

在进行数据采集和信息提取的过程中&#xff0c;XPath是一种非常强大且灵活的工具。它可以在HTML或XML文档中定位和提取特定的数据&#xff0c;为数据分析和应用提供了良好的基础。本文将介绍XPath的基本概念和语法&#xff0c;并分享一些实际操作&#xff0c;帮助您充分了解XPa…

web3.0时代分布式网络协议的异同

Web3.0时代标志着分布式网络协议的兴起&#xff0c;其中IPFS&#xff08;InterPlanetary File System&#xff09;和NDN&#xff08;Named Data Networking&#xff09;是备受瞩目的项目。尽管它们都属于分布式网络协议领域&#xff0c;但在多个方面存在显著区别。以下是IPFS和…

Elasticsearch:使用 huggingface 模型的 NLP 文本搜索

本博文使用由 Elastic 博客 title 组成的简单数据集在 Elasticsearch 中实现 NLP 文本搜索。你将为博客文档建立索引&#xff0c;并使用摄取管道生成文本嵌入。 通过使用 NLP 模型&#xff0c;你将使用自然语言在博客文档上查询文档。 安装 Elasticsearch 及 Kibana 如果你还没…

如何做好互联网产品需求分析?看这里!

文章目录 &#x1f31f;需求分析&#x1f34a;领域知识分析&#x1f34a;技术知识分析&#x1f389;人工智能技术的基本原理&#x1f389;开发工具和组件库&#x1f389;数据处理和模型训练&#x1f389;代码库和技术标准 &#x1f34a;数据分析&#x1f389;准备数据&#x1f…

途虎养车上市、京东养车“震虎”,如何突围汽车后市场?

“汽车后市场第一股”终于来了&#xff01; 赶在十一黄金周之前&#xff0c;途虎养车股份有限公司(09690.HK&#xff0c;下称“途虎养车”)于9月26日挂牌港交所&#xff0c;开盘价为28港元/股&#xff0c;与发行价持平&#xff1b;IPO首日报收29.50港元/股&#xff0c;涨幅5.3…

【图像处理GUI】图像颜色过滤、颜色强调、反转颜色等(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Tomcat历史版本下载地址(Tomcat7或更早)

官网地址直达 随便选择一个版本 点击找到自己想要的版本下载就可以了&#xff01;

干洗店会员管理系统上门洗鞋小程序介绍

干洗店管理系统&#xff0c;洗衣洗鞋店收银会员管理小程序&#xff0c;是在传统的洗护行业中&#xff0c;使用现在比较流行的线上下单系统&#xff0c;可以帮助门店实现便捷收银、会员管理、商品销售等功能。 具体如下&#xff1a; 1.会员管理&#xff1a;支持会员储值&#xf…

CSS 之 table 表格布局

一、简介 ​ 除了使用HTML的<table>元素外&#xff0c;我们还可以通过display: table/inline-table; 设置元素内部的布局类型为表格布局。并结合table-cell、table-row等相关CSS属性值可以实现HTML中<table>系列元素的效果&#xff0c;具有表头、表尾、行、单元格…

面试题:如何正确的停掉线程?

文章目录 前言为什么不强制停止如何用 interrupt 停止线程sleep 期间能否感受到中断停止线程的方式有几种总结 前言 启动线程需要调用 Thread 类的 start() 方法&#xff0c;并在 run() 方法中定义需要执行的任务。启动一个线程非常简单&#xff0c;但如果想要正确停止它就没那…

在PicGo上使用github图床解决typora上传csdn图片不显示问题(保姆级教程)

文章目录 在PicGo上使用github图床解决typora上传csdn图片不显示问题&#xff08;保姆级教程&#xff09;1、typora上传csdn图片不显示&#xff08;外链图片转存失败&#xff09;2、PicGo2.1、PicGo下载2.2、PicGo使用2.2.1、对PicGo完成基本的配置2.2.2、配置github图床2.2.3、…

vue3+elementPlus:el-tree复制粘贴数据功能,并且有弹窗组件

在tree控件里添加contextmenu属性表示右键点击事件。 因右键自定义菜单事件需要获取当前点击的位置&#xff0c;所以此处绑定动态样式来控制菜单实时跟踪鼠标右键点击位置。 //html <div class"box-list"><el-tree ref"treeRef" node-key"id…

SCADA系统是什么意思?

监控和数据采集 (SCADA) 是一种计算机控制系统&#xff0c;用于监视和控制工厂过程。该软件使用数据通信、图形用户界面和扩展管理来监视和控制系统。 概述 世界上最大的制造公司也被认为是最受数据驱动的企业。在技​​术能力不断增强的时代&#xff0c;随着 SCADA 等系统的使…

认识python就是这么简单!

我的笔记里的python代码运行环境都是在pycharm软件中运行&#xff0c;所以不去记录如何配置环境变量呀什么的。 python种类 Cpython&#xff1a; Python的官方版本&#xff0c;使用C语言实现&#xff0c;使用最为广泛&#xff0c;CPython实现会将源文件&#xff08;py文件&a…

学生用的台灯护眼的哪种比较好?精选适合学生用的护眼台灯

现代小孩的学习压力确实很大&#xff0c;已经不能和我们以往那种“半大自然化学习”相提并论啦&#xff0c;如今各种学习PAD、电脑网课&#xff0c;成堆的学习资料与作业&#xff0c;恐怕是从小学甚至学前就已经是常态了。而且在平时我们路过学校的时候应该也不难发现&#xff…