Python3.7+PyQt5 pyuic5将.ui文件转换为.py文件、Python读取配置文件、生成日志

news2024/9/24 13:14:15

1.实际开发项目时,是使用Qt Designer来设计UI界面,得到一个.ui的文件,然后利用PyQt5安装时自带的工具pyuic5将.ui文件转换为.py文件:

pyuic5 -o mywindow.py mywindow.ui #先是py文件名,再是ui文件名

样式图 QT5 UI:

转换的pyqt5:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'ActionTools.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
import socket

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
import sys
import io
import os
import datetime
import random
from subprocess import Popen,PIPE
from threading import Thread
import time
import configparser

class Ui_ActionWinfrm(QWidget):
    def __init__(self):
        super(Ui_ActionWinfrm,self).__init__()
        self.config=configparser.ConfigParser()#创建对象
        self.EmployeeInfo=[]#员工信息
        self.TestServer=[]#测试服务器设置
        self.MesServer=[]#Mes服务器
        self.ProductInfo=[]#产品信息
        self.config.read("./conf/config.conf",encoding="utf-8")#读取配置文件,如果配置文件不存在创建
        self.Err="NULL"

        #员工管理信息
        self.EmployeeInfo.append(self.config.get('EmployeeInfo','Employee'))#工号
        self.EmployeeInfo.append(self.config.get('EmployeeInfo','Line'))#线体

        #测试服务器设置
        self.TestServer.append(self.config.get('TestServer','host'))
        self.TestServer.append(self.config.get('TestServer','prot'))
        self.TestServer.append(self.config.get('TestServer','user'))
        self.TestServer.append(self.config.get('TestServer','password'))

        #连接服务器
        self.host = self.TestServer[0]
        self.prot = self.TestServer[1]

        #MES服务器设置
        self.MesServer.append(self.config.get('MesServer','url'))

        #产品信息
        self.ProductInfo.append(self.config.get('ProductInfo','ClientName'))
        self.ProductInfo.append(self.config.get('ProductInfo','ProductName'))
        self.ProductInfo.append(self.config.get('ProductInfo','OrderInfo'))
        self.ProductInfo.append(self.config.get('ProductInfo','OrderTotal'))
        self.ProductInfo.append(self.config.get('ProductInfo','CompleteOrder'))

        self.data=''
        self.setupUi()
        print(self.host + "," + self.prot)
        self.Client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


    def setupUi(self):
        self.setObjectName("ActionWinfrm")
        self.resize(1000, 943)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        self.setFont(font)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("./Imag/020.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.setWindowIcon(icon)
        self.verticalLayout = QtWidgets.QVBoxLayout(self)
        self.verticalLayout.setObjectName("verticalLayout")
        self.frame_5 = QtWidgets.QFrame(self)
        self.frame_5.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_5.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_5.setObjectName("frame_5")
        self.frame_6 = QtWidgets.QFrame(self.frame_5)
        self.frame_6.setGeometry(QtCore.QRect(0, -1, 981, 41))
        self.frame_6.setStyleSheet("color: rgb(85, 255, 127);")
        self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_6.setObjectName("frame_6")
        self.lbl_WinTitle = QtWidgets.QLabel(self.frame_6)
        self.lbl_WinTitle.setGeometry(QtCore.QRect(390, 0, 351, 41))
        font = QtGui.QFont()
        font.setPointSize(26)
        self.lbl_WinTitle.setFont(font)
        self.lbl_WinTitle.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_WinTitle.setObjectName("lbl_WinTitle")
        self.lbl_loginfo = QtWidgets.QLabel(self.frame_6)
        self.lbl_loginfo.setGeometry(QtCore.QRect(10, 0, 161, 41))
        self.lbl_loginfo.setText("")
        self.lbl_loginfo.setPixmap(QtGui.QPixmap("./Imag/logo.jpg"))
        self.lbl_loginfo.setObjectName("lbl_loginfo")
        self.frame_7 = QtWidgets.QFrame(self.frame_5)
        self.frame_7.setGeometry(QtCore.QRect(0, 50, 981, 80))
        self.frame_7.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_7.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_7.setObjectName("frame_7")
        self.label = QtWidgets.QLabel(self.frame_7)
        self.label.setGeometry(QtCore.QRect(10, 10, 81, 16))
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.label_3 = QtWidgets.QLabel(self.frame_7)
        self.label_3.setGeometry(QtCore.QRect(340, 10, 81, 16))
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(self.frame_7)
        self.label_4.setGeometry(QtCore.QRect(660, 10, 81, 16))
        self.label_4.setAlignment(QtCore.Qt.AlignCenter)
        self.label_4.setObjectName("label_4")
        self.label_2 = QtWidgets.QLabel(self.frame_7)
        self.label_2.setGeometry(QtCore.QRect(10, 50, 81, 16))
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.label_5 = QtWidgets.QLabel(self.frame_7)
        self.label_5.setGeometry(QtCore.QRect(340, 50, 81, 16))
        self.label_5.setAlignment(QtCore.Qt.AlignCenter)
        self.label_5.setObjectName("label_5")
        self.label_6 = QtWidgets.QLabel(self.frame_7)
        self.label_6.setGeometry(QtCore.QRect(660, 50, 81, 16))
        self.label_6.setAlignment(QtCore.Qt.AlignCenter)
        self.label_6.setObjectName("label_6")
        self.label_7 = QtWidgets.QLabel(self.frame_7)
        self.label_7.setGeometry(QtCore.QRect(820, 50, 91, 20))
        self.label_7.setAlignment(QtCore.Qt.AlignCenter)
        self.label_7.setObjectName("label_7")
        self.lbl_ClientName = QtWidgets.QLabel(self.frame_7)
        self.lbl_ClientName.setGeometry(QtCore.QRect(100, 10, 151, 16))
        self.lbl_ClientName.setStyleSheet("color: rgb(255, 170, 0);")
        self.lbl_ClientName.setObjectName("lbl_ClientName")
        self.lbl_ProductName = QtWidgets.QLabel(self.frame_7)
        self.lbl_ProductName.setGeometry(QtCore.QRect(420, 10, 54, 12))
        self.lbl_ProductName.setStyleSheet("color: rgb(255, 170, 0);")
        self.lbl_ProductName.setObjectName("lbl_ProductName")
        self.lbl_OrderInfo = QtWidgets.QLabel(self.frame_7)
        self.lbl_OrderInfo.setGeometry(QtCore.QRect(730, 10, 101, 16))
        self.lbl_OrderInfo.setAutoFillBackground(False)
        self.lbl_OrderInfo.setStyleSheet("color: rgb(255, 170, 0);")
        self.lbl_OrderInfo.setObjectName("lbl_OrderInfo")
        self.lbl_Employee = QtWidgets.QLabel(self.frame_7)
        self.lbl_Employee.setGeometry(QtCore.QRect(90, 50, 91, 16))
        self.lbl_Employee.setStyleSheet("color: rgb(255, 170, 0);")
        self.lbl_Employee.setObjectName("lbl_Employee")
        self.lbl_Line = QtWidgets.QLabel(self.frame_7)
        self.lbl_Line.setGeometry(QtCore.QRect(420, 50, 81, 16))
        self.lbl_Line.setStyleSheet("color: rgb(255, 170, 0);")
        self.lbl_Line.setObjectName("lbl_Line")
        self.lbl_OrderTotal = QtWidgets.QLabel(self.frame_7)
        self.lbl_OrderTotal.setGeometry(QtCore.QRect(730, 50, 54, 12))
        self.lbl_OrderTotal.setStyleSheet("color: rgb(255, 170, 0);")
        self.lbl_OrderTotal.setObjectName("lbl_OrderTotal")
        self.lbl_COrderNum = QtWidgets.QLabel(self.frame_7)
        self.lbl_COrderNum.setGeometry(QtCore.QRect(910, 50, 54, 19))
        self.lbl_COrderNum.setStyleSheet("color: rgb(255, 170, 0);")
        self.lbl_COrderNum.setObjectName("lbl_COrderNum")
        self.textEdit = QtWidgets.QTextEdit(self.frame_5)
        self.textEdit.setGeometry(QtCore.QRect(0, 40, 981, 1))
        self.textEdit.setObjectName("textEdit")
        self.TW_TestItemList = QtWidgets.QTableWidget(self.frame_5)
        self.TW_TestItemList.setGeometry(QtCore.QRect(0, 180, 981, 631))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.TW_TestItemList.setFont(font)
        self.TW_TestItemList.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.TW_TestItemList.setShowGrid(False)
        self.TW_TestItemList.setObjectName("TW_TestItemList")
        self.TW_TestItemList.setColumnCount(3)
        self.TW_TestItemList.setRowCount(0)
        self.item = QtWidgets.QTableWidgetItem()
        self.item.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        self.item.setFont(font)
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("Imag/NewAdd.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.item.setIcon(icon1)
        self.TW_TestItemList.setHorizontalHeaderItem(0, self.item)
        self.item = QtWidgets.QTableWidgetItem()
        self.item.setTextAlignment(QtCore.Qt.AlignCenter)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        self.item.setFont(font)
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("Imag/TestArgs.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.item.setIcon(icon2)
        self.TW_TestItemList.setHorizontalHeaderItem(1, self.item)
        self.item = QtWidgets.QTableWidgetItem()
        self.item.setTextAlignment(QtCore.Qt.AlignCenter)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        self.item.setFont(font)
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap("Imag/Result.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.item.setIcon(icon3)
        self.TW_TestItemList.setHorizontalHeaderItem(2, self.item)
        self.TW_TestItemList.horizontalHeader().setMinimumSectionSize(40)
        self.TW_TestItemList.verticalHeader().setDefaultSectionSize(50)
        self.TW_TestItemList.verticalHeader().setMinimumSectionSize(50)
        self.label_8 = QtWidgets.QLabel(self.frame_5)
        self.label_8.setGeometry(QtCore.QRect(10, 140, 112, 25))
        self.label_8.setObjectName("label_8")
        self.lbl_TestResult = QtWidgets.QLabel(self.frame_5)
        self.lbl_TestResult.setGeometry(QtCore.QRect(0, 815, 981, 111))
        self.lbl_TestResult.setStyleSheet("background-color: rgb(0, 0, 0);\n"
        "font: 22pt \"Arial\";\n"
        "color: rgb(255, 255, 0);")
        self.lbl_TestResult.setAlignment(QtCore.Qt.AlignCenter)
        self.lbl_TestResult.setObjectName("lbl_TestResult")
        self.lbl_Isn = QtWidgets.QLineEdit(self.frame_5)
        self.lbl_Isn.setGeometry(QtCore.QRect(130, 140, 800, 31))
        self.lbl_Isn.setObjectName("lbl_Isn")
        self.verticalLayout.addWidget(self.frame_5)
        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)
        self.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint | QtCore.Qt.WindowCloseButtonHint)  # 只显示最小化按钮和关闭按钮
        self.lbl_Isn.setFocus()

    def retranslateUi(self):
        self._translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(self._translate("ActionWinfrm", "【T.e.s.t】"))
        self.lbl_WinTitle.setText(self._translate("ActionWinfrm", "国产系统在线激活工具"))
        self.label.setText(self._translate("ActionWinfrm", "客户名称:"))
        self.label_3.setText(self._translate("ActionWinfrm", "产品名称:"))
        self.label_4.setText(self._translate("ActionWinfrm", "订单号:"))
        self.label_2.setText(self._translate("ActionWinfrm", "员工工号:"))
        self.label_5.setText(self._translate("ActionWinfrm", "线          体:"))
        self.label_6.setText(self._translate("ActionWinfrm", "订单数:"))
        self.label_7.setText(self._translate("ActionWinfrm", "完成订单数:"))
        self.lbl_ClientName.setText(self.ProductInfo[0])#客户名称
        self.lbl_ProductName.setText(self.ProductInfo[1])#产品名称
        self.lbl_OrderInfo.setText(self.ProductInfo[2])#订单信息
        self.lbl_OrderTotal.setText(self.ProductInfo[3])#订单总数
        self.lbl_COrderNum.setText(self.ProductInfo[4])#完成订单数
        self.lbl_Employee.setText(self.EmployeeInfo[0])#工号
        self.lbl_Line.setText(self.EmployeeInfo[1])#线体
        self.item = self.TW_TestItemList.horizontalHeaderItem(0)
        self.item.setText(self._translate("ActionWinfrm", "项目名称"))
        self.item = self.TW_TestItemList.horizontalHeaderItem(1)
        self.item.setText(self._translate("ActionWinfrm", "测试参数"))
        self.item = self.TW_TestItemList.horizontalHeaderItem(2)
        self.item.setText(self._translate("ActionWinfrm", "测试结果"))
        self.TW_TestItemList.setColumnWidth(0,300)
        self.TW_TestItemList.setColumnWidth(1, 370)
        self.TW_TestItemList.setColumnWidth(2, 300)
        self.TW_TestItemList.setShowGrid(False)#是否显示网线
        self.label_8.setText(self._translate("ActionWinfrm", "扫描整机条码:"))
        self.lbl_TestResult.setText(self._translate("ActionWinfrm", "待测试"))

    def Center(self):#定义一个函数使得函数窗口居中显示
        #获取屏幕坐标系
        self.screen=QDesktopWidget().screenGeometry()
        #获取窗口坐标系
        self.size=self.geometry()
        self.newLeft=(self.screen.width()-self.size.width())/2
        self.newTop=(self.screen.height()-self.size.height())/2.7
        self.move(int(self.newLeft),int(self.newTop))

    def Connect(self,message):
        try:
            self.Client_socket.connect(self.host,int(self.port))
            self.lbl_TestResult.setText("Connected To Server..")
            self.lbl_TestResult.setForeground(QtGui.QColor(51, 204, 51))
            self.Client_socket.sendall(message.encode())
            self.data=self.Client_socket.recv(1024)
        except Exception as e:
            self.lbl_TestResult.setText("Connected To Server Err:"+str(e))
            self.lbl_TestResult.setStyleSheet("color:red")
            return False
        self.Client_socket.close()
        return True

if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = Ui_ActionWinfrm()
    win.Center()
    win.show()
    #win.Client('10.2.230.10', 8888)
    win.Connect('tell me the product name and position:00E04C060621')
    sys.exit(app.exec_())

效果:

2.Python学习之读取配置文件:

初始配置文件test.conf:

步骤1:导入配置文件模块

import configparser

步骤2:创建配置文件对象

config = configparser.ConfigParser()

步骤3:读取配置文件
在这一步中,我们将读取配置文件。配置文件通常存储在.ini或.conf文件中。

config.read('config.ini')

步骤4:获取配置选项

option_value = config.get('section_name', 'option_name')

步骤5:修改配置选项

config.set('section_name', 'option_name', 'new_value')

步骤6:保存配置文件

with open('config.ini', 'w') as config_file:
    config.write(config_file)

*.展正读取confg的实列:

3.生成日志:

1.创建日志记录器

import logging

# 创建一个日志记录器实例
logger = logging.getLogger('my_logger')

2 设置日志记录级别

logger.setLevel(logging.DEBUG)

使用setLevel()方法设置日志记录的级别,可以根据需要进行调整。常用的日志级别有:

logging.DEBUG:最详细的日志信息,用于调试程序。
logging.INFO:一般的日志信息,用于确认程序正常运行。
logging.WARNING:警告信息,表明程序可能出现问题。
logging.ERROR:错误信息,程序出现错误但仍然可以继续运行。
logging.CRITICAL:严重错误信息,程序无法继续运行。

3.创建文件处理器

file_handler = logging.FileHandler('log.txt')

4.设置文件处理器的格式

formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

5.将处理器添加到记录器中

logger.addHandler(file_handler)

6.输出日志信息

logger.debug('This is a debug message')
logger.info('This is an info message')
logger.warning('This is a warning message')
logger.error('This is an error message')
logger.critical('This is a critical message')

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

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

相关文章

SQLite 安装和 Java 使用教程

SQLite是一个C语言库,它实现了一个小型、快速、自包含、高可靠性、功能齐全的SQL数据库引擎。SQLite是世界上使用最多的数据库引擎。SQLite内置于所有手机和大多数计算机中,并捆绑在人们每天使用的无数其他应用程序中。 SQLite文件格式稳定、跨平台、向…

分库分表

分库,分表,分库分表 “只分库“,“只分表“,“既分库又分表" 何时分库 在面对高并发的情况下,数据库连接成为性能瓶颈。当数据QPS过高导致数据库连接数不足时,考虑分库。在读多写少的场景下&#x…

场景交互与场景漫游-交运算与对象选取(8-1)

交运算与对象选取 在面对大规模的场景管理时,场景图形的交运算和图形对象的拾取变成了一项基本工作。OSG作为一个场景管理系统,自然也实现了场景图形的交运算,交运算主要封装在osgUtil 工具中在OSG中,osgUtil是一个非常强有力的工…

基于学生心理学算法优化概率神经网络PNN的分类预测 - 附代码

基于学生心理学算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于学生心理学算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于学生心理学优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针…

电子学会2023年6月青少年软件编程(图形化)等级考试试卷(四级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(四级) 一、单选题(共10题,共30分) 1. 下列积木运行后的结果是?( )(说明:逗号后面无空格) A.

【ATTCK】MITRE Caldera-路径发现插件

CALDERA是一个由python语言编写的红蓝对抗工具(攻击模拟工具)。它是MITRE公司发起的一个研究项目,该工具的攻击流程是建立在ATT&CK攻击行为模型和知识库之上的,能够较真实地APT攻击行为模式。 通过CALDERA工具,安全…

AOT:一个.Net 8最牛逼和最受欢迎关注的功能!

这次.Net 8发布,更新了诸多功能,但从各个编程社区看到大家讨论和交流最多的,还是AOT这个功能。 AOT本身在.Net 7就开始引入了,但这次.Net 8做了诸多更新: 1、增加了macOS 平台的 x64 和 Arm64 体系结构的支持&#x…

python中Thread实现多线程任务

目录 多线程概括: 使用 Thread 模块创建线程 如果不使用多线程: 多线程概括: 多线程是一种并发执行的编程方式,允许程序同时执行多个独立的线程,每个线程在程序中运行独立的任务。每个线程都是程序的基本执行单元&a…

智慧路灯控制系统设计方案思路及设计原则

智慧路灯系统依托于智慧路灯综合管理平台,实现点(智慧路灯)、线(道路)、面(城市)的三级监控,实现灯控、屏控、视频监控、数据采集、联动的统一。 1)一个城市的智慧路灯系…

Nodejs--Express框架使用

目录 一.概念 二.项目目录结构 三.app.js 四.项目需要的中间件 五.Mysql连接 六.日志配置 七.实体模型配置 八.统一结果封装 九.app.js的详细配置 十.自定义登录拦截器 十一.route路由配置 十二.controller处理 十二:静态页面: 十三&#xff…

RobotFramework进阶之自定义的python模块(十四)

引言 RobotFramework自动化框架(以下简称RF)之前文章我们讲了通过import第三方的library(RequestsLibrary等),在实际项目中第三方的包并不能满足我们的需要,此时我们可自己编写python模块(.py文…

百胜杯答题系统

近期太忙了 百胜方答题活动于近期终于告一段落,这个活动周期长,参与人数多,是我这几年做答题活动的一个巅峰之作 当然项目开发难度不大,主要是参与人数突破了百万,对我而言是一次很好的历练 具体的设计方案 百胜杯答…

Java Swing实现简单的文本编辑器

内容要求 1) 本次程序设计是专门针对 Java 课程的,要求使用 Java 语言进行具有一定代码量的程序开发。程序的设计要结合一定的算法,在进行代码编写前要能够设计好自己的算法。 本次程序设计涉及到 Java 的基本语法,即课堂上所介绍的变量、条件语句、循…

qemu + busybox + 内核实验环境搭建(2023-11)

主要是参考网上的例子,网上的一些例子可能用的busybox 老旧,编译各种问题,以及rootfs hda的方式或者ramfs的方式。可能有些概念还是不清楚,以下是最终完成测试成功的案例。 下载kernel https://cdn.kernel.org/pub/linux/kernel…

接口自动化测试很难吗?来看看这份超详细的教程!

接口自动化测试框架目的 测试工程师应用自动化测试框架的目的: 增强测试脚本的可维护性、易用性(降低公司自动化培训成本,让公司的测试工程师都可以开展自动化测试)。 以下框架以微信公众平台开放文档实战 地址:https://developers.weixin.qq.com/doc…

复杂类型,查询--学习笔记

1&#xff0c;复杂类型 解决问题&#xff1a;一些不容易获取到的数据&#xff0c;例如数组类型&#xff0c;集合类型等&#xff0c;获取他们的数据 -- 1.创建表 create table tb_array_person(name string,city_array array<string> )row format delimited fields term…

hypermesh学习总结(一)

1、hypermesh导入导出 2、hypermesh如何使用拓扑命令,连接多个几何体为一个? 3、hypermesh模式选择 分别有显示动力学模式explicit,标准模式Standard3D(静力学及模态等)

【最新Tomcat】IntelliJ IDEA通用配置Tomcat教程(超详细)

前言 IntelliJ IDEA是一个强大的集成开发环境&#xff0c;能够大大简化Java应用程序的开发和部署过程。而Tomcat作为一个流行的Java Web服务器&#xff0c;其与IntelliJ IDEA的整合能够提供便捷的开发环境&#xff0c;让开发人员更专注于代码的创作与优化。 在配置IntelliJ IDE…

ROS参数服务器(Param):通信模型、Hello World与拓展

参数服务器在ROS中主要用于实现不同节点之间的数据共享。 参数服务器相当于是独立于所有节点的一个公共容器&#xff0c;可以将数据存储在该容器中&#xff0c;被不同的节点调用&#xff0c;当然不同的节点也可以往其中存储数据。 使用场景一般存储一些机器人的固有参数&…

【2023云栖】刘一鸣:Data+AI时代大数据平台建设的思考与发布

简介&#xff1a; 本文根据2023云栖大会演讲实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a;刘一鸣 | 阿里云自研大数据产品负责人 演讲主题&#xff1a;DataAI时代大数据平台应该如何建设 今天分享的主题是DataAI时代大数据平台应该如何建设&#xf…