pyqt有必要学一下吗?

李肖遥 2025-04-20 22:10

随着以ChatGPT为代表的AI模型不断发展,它逐渐能够处理复杂的对话场景,并生成连贯的回答。国内类似于ChatGPT的应用发展也较为迅速,如科大讯飞的星火认知大模型、百度的文心一言等。

本文以星火认知大模型为例,结合相关知识点,搭建一个AI问答小工具。

1.主要功能展示

(1)快捷提问:在输入问题后,按快捷键“Ctrl+Enter”即可发送问题进行提问。

(2)AI问答:回答问题,如写一个小红书文案,界面如下图所示。

(3)保存记录:将提问记录保存为HTML或TXT格式,界面如下图所示。

图片
2.AI问答小工具开发前的准备

(1)申请星火认知大模型所需的文件。

在讯飞开放平台申请星火认知大模型所需的AppID、APISecret、APIKey,具体如何申请,详见星火认知大模型的开发文档。申请成功后,一般至少会提供500,000 token的使用量,有效期为一年。

Token通常是指文本处理过程中的最小单位,1 token约等于1.5个汉字或0.8个单词。在自然语言处理(Natural Language Processing,NLP)中,将文本拆分成token是常见的预处理步骤之一。

(2)安装必要模块。

星火认知大模型的调用分为两种方式:Web方式和SDK方式。本实战将采用Web方式,利用WebSocket技术实现客户端与服务器之间的连接和通信。

WebSocket是一种通信协议,允许在客户端和服务器之间建立双向的实时通信连接。一旦成功建立连接,客户端和服务器之间就可以通过发送消息进行实时交流。

因此,需要安装Python支持的websocket模块,代码如下:

pip install websocketpip install websocket-client

(3)学习开发文档。

星火认知大模型的开发文档提供了通用鉴权URL生成方式、错误代码原因、接口请求和接口响应等说明,以及Python调用示例代码。建议读者提前了解这些内容。

截至2024年10月,星火认知大模型已提供了Spark4.0 Ultra、Spark Max、Spark Pro、Spark Lite这4个版本的API调用方式。本书采用的是Spark Lite版本的调用方式。由于星火认知大模型后期可能会更新API的调用方式,这可能会影响本实战程序的成功运行,但其原理是不变的。拿这段话形容AI科技的日新月异,一点也不为过。

3.程序结构

整个程序可以分成两部分:

  • 借鉴星火认知大模型提供的Python调用示例代码完成与模型的网络交互(其开发文档上已经有较为详细的说明)

  • 完成问题的提交与结果的展示。

4.代码解析

整个程序大约有400行代码(不包含星火认知大模型提供的部分Python调用示例代码),这里仅展示核心代码。

(1)errorDialog类。

errorDialog类继承自QDialog类,主要用于查看错误日志,如下图所示。

图片

核心代码如下:

self.setWindowFlags(Qt.WindowType.Window)   # 窗体样式errorLog = QPlainTextEdit(self)font = QFont()font.setPointSize(11)             # 字体大小with codecs.open(f"{current_dir}\error.log""r""utf-8", errors="ignore"as file:    content = file.read()           # 读取文件    errorLog.setPlainText(content)    errorLog.setFont(font)

虽然errorDialog类继承自QDialog类,但是它设置了Qt.WindowType.Window样式,使得窗体具有最大化和最小化按钮,便于查看日志。

(2)KeyDialog类。

KeyDialog类继承自QDialog类,主要用于配置WebSocket参数,如下图所示。图中的参数应以自己申请的参数为准。

图片


在填写完参数后,会将相关信息写入Windows的注册表,如下图所示。

图片


如果已经保存过配置信息,则打开对话框后会自动加载这些配置信息。核心代码如下:

class KeyDialog(QDialog):    keySignal =  pyqtSignal(list)   # 参数配置的信号    def __init__(self, SparkDesk, Parent=None):        super().__init__(Parent)        # 主窗体传递过来的QSettings("SparkDesk", "APIKey")对象        self.sparkdesk = SparkDesk        self.initUI()        self.loadDate()        def initUI(self):        ……               # 省略部分代码        # 一些控件的使用及布局        buttonBox.accepted.connect(self.settingKey)        buttonBox.rejected.connect(self.reject)
    def loadDate(self):        """载入配置信息"""        # 检查注册表中是否已有配置,如果已有配置信息,则将其载入        if all([self.sparkdesk.contains("APPID"),                self.sparkdesk.contains("API_Secret"),               self.sparkdesk.contains("API_Key") ,               self.sparkdesk.contains("GPT_Url")]):            self.appid.setText(self.sparkdesk.value("APPID"))            self.api_secret.setText(self.sparkdesk.value("API_Secret"))            self.api_key.setText(self.sparkdesk.value("API_Key"))            self.gpt_url.setText(self.sparkdesk.value("GPT_Url"))                def settingKey(self):        """设置鉴权密钥"""        …… # 省略部分代码        if not all([APP_iD, API_Secret, API_Key, GPT_Url]):            # 4个参数不能为空            QMessageBox.warning(self, "警告""请确保所有字段都填写完整。")            return        # 将4项关键设置存入注册表        self.sparkdesk.setValue("APPID", APP_iD)        …… # 省略类似代码        # 将配置发送到主窗体中        self.keySignal.emit([APP_iD, API_Secret, API_Key, GPT_Url])        self.accept()

(3)MyWidget类。

MyWidget类继承自QMainWindow类,可以方便地实现菜单功能。

【代码片段1】

self.SparkDesksettings = QSettings("SparkDesk""APIKey")# 设置APP_iD、API_Secret、API_Key、GPT_Url 默认值self.APP_iD = ""self.API_Secret = ""self.API_Key = ""self.GPT_Url = ""self.answer = "" # 答案默认为空

设置一些属性,以便程序使用。其中,QSettings主要用于将WebSocket的配置存入注册表。

【代码片段2】

def loadDate(self):    """载入数据"""    #  如果注册表中没有相关配置,则提示无法使用    if not all([self.SparkDesksettings.contains("APPID"),                self.SparkDesksettings.contains("API_Secret"),               self.SparkDesksettings.contains("API_Key"),               self.SparkDesksettings.contains("GPT_Url")]):        self.chatAnswer.append("未配置模型鉴权参数,无法使用!
"
)
        self.sendButton.setEnabled(False# 如果无法使用,则禁止发送问题    else# 如果注册表中有相关配置,则生成Ws_Param对象        self.APP_iD = self.SparkDesksettings.value("APPID")        self.API_Secret = self.SparkDesksettings.value("API_Secret")        self.API_Key = self.SparkDesksettings.value("API_Key")        self.GPT_Url = self.SparkDesksettings.value("GPT_Url")        self.wsParam = self.createWs_Param(self.APP_iD, self.API_Key, self.API_Secret, self.GPT_Url)
def createWs_Param(self, appid, api_key, api_secret, gpt_url):    # 生成Ws_Param对象,以便为下一步鉴权URL做准备    # 具体信息请参阅星火认知大模型的开发文档    wsParam = SparkApi.Ws_Param(appid, api_key, api_secret, gpt_url)    return wsParam

上面的程序首先会检查程序中是否有相关配置,若没有相关配置,则运行结果如下图所示,同时禁止发送问题。

图片

【代码片段3】

以下代码用于实现整个界面。

def initUI(self):    # ###########创建菜单#############    settingMenu = self.menuBar().addMenu("设置(&S)")    keyAct = QAction("密钥(&K)"self)    keyAct.setShortcut("ALt+K")    keyAct.setStatusTip("密钥设置")    settingMenu.addAction(keyAct)    …… # 其他菜单的创建与此相似,这里省略相关代码    # ###########创建聊天窗体#############    spliter = QSplitter(self)    spliter.setOrientation(Qt.Orientation.Vertical)    widget= QWidget(spliter)    # 使用QPlainTextEdit控件提出问题    self.chatQue = QPlainTextEdit(widget)    fontQue = QFont()    fontQue.setPointSize(11)    self.chatQue.setFont(fontQue)    # 占位文本    self.chatQue.setPlaceholderText("可以在这里输入你的问题,按快捷键“Ctrl+Enter”即可发送问题")    # 使用QTextEdit控件回答问题    self.chatAnswer = QTextEdit()    # 只读    self.chatAnswer.setReadOnly(True)    self.chatAnswer.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)    self.chatAnswer.customContextMenuRequested.connect(self.showContextMenu)    # 上面的两行代码用于对self.chatAnswer右键菜单进行设置    self.cursor = self.chatAnswer.textCursor() # 获取当前文档中的光标    self.sendButton = QPushButton("发送", widget)    …… # 省略布局代码    keyAct.triggered.connect(self.execKeyDialog)    errorAct.triggered.connect(self.showLog)    self.sendButton.clicked.connect(self.sendQuestion)    zoomInAct.triggered.connect(self.chatAnswer.zoomIn)    zoomOutAct.triggered.connect(self.chatAnswer.zoomOut)

【代码片段4】

以下代码用于设置对话框和查看错误日志。

def execKeyDialog(self):    """鉴权参数设置对话框"""    keydialog = KeyDialog(self.SparkDesksettings, self)    keydialog.keySignal.connect(self.readSparkDesksettings)    keydialog.exec()
def showLog(self):    """查看错误日志"""    errordialog = errorDialog(self)    errordialog.exec()

【代码片段5】

以下代码用于发送问题并在聊天窗体中显示问题。

def sendQuestion(self):    """发送问题"""    text = self.chatQue.toPlainText()    if not text:        return    # 在发送问题后,提问处需要清屏    self.chatQue.clear()    self.setRespondQue(text)
def setRespondQue(self, ques):    """    将问题发送到聊天窗体中    ques表示问题    """    self.setFormatText("Q"# 设置格式    # 将问题插入QTextEdit控件    self.cursor.insertText(ques + '\n')    self.setRespondAnswer(ques)

【代码片段6】

以下代码用于设置问题和答案的格式,以便进行区别。

def getCurrentDateTime(self):    """获取当前时间"""    currentDateTime = QDateTime.currentDateTime().toString("yyyy-MM-dd hh:mm:ss")    return currentDateTime
def setFormatText(selfQ_A):    """    格式化问答    Q_A表示识别问题和答案    """    currentDateTime = ' ' + self.getCurrentDateTime() + '\n'    textFormat = QTextCharFormat()    font = QFont()    font.setItalic(True# 斜体    font.setBold(True# 加粗    textFormat.setFont(font)    if Q_A == "Q":        # 给问题中的时间添加格式        self.cursor.insertImage(f"{current_dir}\images\heart.png"# 心形图标        textFormat.setForeground(Qt.GlobalColor.red) # 红色        self.cursor.setCharFormat(textFormat) # 当前文档的光标格式        self.cursor.insertText(currentDateTime) # 插入时间    else:        # 给答案中的时间添加格式        self.cursor.insertImage(f"{current_dir}\images\star.png"# 星形图标        textFormat.setForeground(Qt.GlobalColor.darkRed) # 暗红色        self.cursor.setCharFormat(textFormat)        self.cursor.insertText(currentDateTime)    # 给除时间外的内容添加格式    font.setItalic(False)    font.setBold(False)    textFormat.setFont(font)    textFormat.setForeground(Qt.GlobalColor.black) # 黑色    self.cursor.setCharFormat(textFormat)

【代码片段7】

以下代码将实现在提出问题后,聊天窗体会提示“AI思考中……”,用于提示用户需要等待回答,如下图所示。

图片

对于一些较为复杂的问题,为了防止 AI问答小工具长时间思考,导致窗体卡死而无法正常工作,这里使用QCoreApplication.processEvents()方法来确保界面能够及时刷新和响应。

def setRespondAnswer(self, ques):    """    得到问题的反馈    ques表示问题    """    self.setFormatText('A')    # 提示正在等待回答中    self.cursor.insertText("AI思考中……")     # 因为需要等待问题反馈,所以这里设置代码以防AI问答小工具卡死    QCoreApplication.processEvents()    self.getAnswer(ques)
def getAnswer(self, ques):    """    从星火认知大模型中获取答案    ques表示问题    这部分代码主要参考了星火认知大模型提供的Python调用示例代码    """    wsUrl = self.wsParam.create_url()    websocket.enableTrace(False)    ws = websocket.WebSocketApp(wsUrl,                            on_message=self.on_message,                            on_error=self.on_error,                            on_close=SparkApi.on_close,                            on_open=SparkApi.on_open)    ws.appid = self.APP_iD    ws.question = ques    ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})

【代码片段8】

以下代码将实现接收回答和处理错误的方式,其中SparkApi.on_error表示从SparkApi.py文件中调用on_error()函数。SparkApi.py是星火认知大模型提供的Python示例文件

def on_error(self, ws, error):    """错误处理"""    SparkApi.on_error(ws, error)    self.chatAnswer.append("
连接错误,详细原因请查看日志!
"
)

def on_message(self, ws, message):    """处理接收的WebSocket消息,详细信息请查看星火认知大模型的开发文档"""    data = json.loads(message)    code = data['header']['code']    if code != 0:        SparkApi.error(code, data)        self.chatAnswer.append("
请求错误,详细原因请查找日志!
"
)
        ws.close()    else:        choices = data["payload"]["choices"]        status = choices["status"]        content = choices["text"][0]["content"]        self.answer += content        if status == 2:                 # 该代码表示已经回答完毕            self.cursor.movePosition(QTextCursor.MoveOperation.StartOfLine)self.cursor.movePosition(QTextCursor.MoveOperation.EndOfLineQTextCursor.MoveMode.KeepAnchor)            self.cursor.deleteChar()           # 删除字符            # 以上3段代码用于删除提示“AI思考中……”            self.cursor.insertMarkdown(self.answer)   # 插入markdown            self.chatAnswer.append('\n\n回答完毕!\n                          ----------------------------------------\n\n')            self.answer = ""               # 清除暂存的答案            ws.close()                 # 关闭WebSocket连接

【代码片段9】

以下代码将实现通过QTextEdit类的右键菜单保存问答记录。问答记录可以被保存为HTMLTXT两种格式。

def showContextMenu(self, position):    # 创建self.chatAnswer自定义菜单对象    context_menu = QMenu(self)    # 创建动作并将其添加到自定义菜单中    copy_action = QAction("复制", self)    copy_action.setShortcut(QKeySequence.StandardKey.Copy)    context_menu.addAction(copy_action)    # 连接动作的信号与槽方法    copy_action.triggered.connect(self.chatAnswer.copy)    …… # 其他几个菜单的实现与此类似,这里省略相关代码    # 在指定位置显示自定义菜单    context_menu.exec(self.chatAnswer.mapToGlobal(position))
def saveAsChat(self):    """保存问答记录"""    if not self.chatAnswer.toPlainText():        return    saveFileName = QFileDialog.getSaveFileName(self, "保存文件"                               "./"                               "HTML files (*.html);;Text files (*.txt)")    absFileName = saveFileName[0]    if absFileName:        with codecs.open(absFileName, "w"                                          "utf-8", errors="ignore"as f:            if absFileName.split('.')[1] == "html":                f.write(self.chatAnswer.toHtml())            else:                f.write(self.chatAnswer.toPlainText())

【代码片段10】

以下代码将实现在按快捷键后,发送问题。

def keyPressEvent(self, event):    """实现在按快捷键“Ctrl+Enter”后,发送问题"""    if event.modifiers() == Qt.KeyboardModifier.ControlModifier and event.key() == Qt.Key.Key_Return:        self.sendButton.click()    else:        super().keyPressEvent(event)

整个AI问答小工具基本满足了日常提问的需求,但仍存在不足,如没有前置上下文,不能补充提问。虽然程序中使用了QCoreApplication.processEvents()方法来避免窗体无法正常工作,但窗体仍可能会出现“未响应”的情况。这个问题将在学完第14章中的内容后进行优化。

本文节选自《PyQt6 实战派》



图书介绍


(一)内容全面,从基础到进阶

1.初识篇

就像踏入一个新的世界,第一步总是至关重要的。在这部分,书里会详细地给你介绍 PyQt6 的基本概念和特点,让你对这个神奇的框架有一个初步的认识。同时,还会手把手地教你如何搭建开发环境,这就好比为你的编程之旅准备好交通工具。当你成功搭建好环境,就像拥有了一辆性能优良的汽车,随时可以出发探索 PyQt6 的精彩世界。

2入门篇

这是一个循序渐进的学习过程。从最基础的上手PyQt6 开始,通过一个个简单而有趣的示例,让你逐渐熟悉 PyQt6 的各种控件和使用方法。

比如,在 “上手 PyQt6” 这一章节中,还有 “【实战】更复杂一点 —— 四则运算小游戏”,通过开发这个小游戏,你能快速掌握如何运用 PyQt6 的基本功能,实现用户交互和简单的逻辑运算。

3进阶篇

进阶篇会深入讲解 PyQt6 中的各种高级特性,比如多线程编程、视图模型设计模式等。

以多线程编程为例,在实际开发中,很多时候我们需要程序能够同时处理多个任务,就像一个人同时做好几件事。多线程编程可以让你的应用程序更加高效地运行,而书中会用通俗易懂的语言和丰富的示例,教你如何在 PyQt6 中实现多线程编程,让你轻松驾驭这一强大的技术。

4.综合实例篇

这部分可谓是全书的精华所在,就像一场盛大的演出,把之前所学的知识全部串联起来,呈现出精彩的成果。

书中会通过多个实际项目案例,如开发一个功能完备的文本编辑器、实现一个简单的数据库管理系统等,全方位地展示 PyQt6 在不同场景下的应用。

每个项目都从需求分析开始,一步步引导你进行设计、编码和调试,让你在实践中真正掌握 PyQt6 的精髓,提升解决实际问题的能力。

(二)实战性强,学以致用

这本书最大的亮点就是实战性超强。它不像一些理论书籍,只是纸上谈兵,而是通过大量的实际案例,让你在实践中学习。每一个知识点后面,几乎都跟着一个实战项目,从简单的界面设计,到复杂的业务逻辑实现,一应俱全。

比如在学习文本输入类控件时,书中有

  •  【实战】文本输入、密码输入、自动补全网址

  •  【实战】简单记事本

  •   【实战】AI 问答小工具 等多个项目。

以 “【实战】简单记事本” 为例,你将学习如何创建一个具备基本功能的记事本应用,包括打开文件、保存文件、编辑文本等。在这个过程中,你会深入了解文本输入控件的各种属性和方法,以及如何处理文件操作等相关知识。通过亲手完成这些项目,你能迅速将所学知识转化为实际技能,真正做到学以致用。

(三)讲解通俗易懂,易于上手

《PyQt6 实战派》作者在编写时,采用了通俗易懂的语言,把复杂的概念用形象生动的比喻进行解释。

比如,在讲解信号与槽机制时,把信号比作一个人发出的呼喊,槽则是另一个人听到呼喊后做出的反应。这样一来,原本抽象的概念变得简单易懂,即使是没有任何编程基础的小白,也能轻松理解。

书中的代码示例简洁明了,每一行代码都有详细的注释,就像一个贴心的导师在旁边为你讲解每一步的操作。无论是在学习过程中遇到问题,还是想要回顾某个知识点,这些注释都能帮助你快速理解代码的意图和作用。

四、适合人群

1. 编程小白:如果你刚刚踏入编程的大门,对 Python 充满好奇,想要学习如何开发桌面应用程序,那么这本书绝对是你的不二之选。它会从最基础的知识开始,一步一个脚印地带你走进 PyQt6 的世界,让你在轻松愉快的氛围中掌握编程技能。

2. 有一定 Python 基础的开发者:对于已经掌握了 Python 基础语法,但还没有涉足桌面应用开发领域的开发者来说,这本书是你拓展技能的绝佳途径。通过学习 PyQt6,你可以将 Python 的应用范围进一步扩大,为自己的职业发展增添新的亮点。而且,书中丰富的实战案例和进阶内容,也能帮助你提升编程水平,实现从基础到进阶的跨越。

3. 想要提升 GUI 开发能力的专业人士:即使你已经是一名经验丰富的 GUI 开发者,《PyQt6 实战派》也能为你带来新的启发和收获。书中对 PyQt6 的深入剖析以及各种高级特性的讲解,能够让你在现有的基础上进一步提升自己的开发能力,掌握更多高效的开发技巧,打造出更优质、更强大的桌面应用程序。

五、总结

《PyQt6 实战派》是一本集全面性、实战性和易懂性于一身的 Python GUI 开发宝典。它就像一位专业的导师,带领你从 PyQt6 的基础知识学起,通过大量的实战项目,逐步提升你的编程能力,让你能够熟练运用 PyQt6 开发出各种功能强大、界面美观的桌面应用程序。

借助这本书,你还能将 PyQt6  DeepSeek 等前沿技术相结合,创造出更具创新性的应用。

如果你渴望在 Python 桌面应用开发领域取得突破,那么不要犹豫,赶紧入手这本《PyQt6 实战派》,开启你的编程实战之旅吧!相信在这本书的帮助下,你一定能在编程的道路上越走越远,实现自己的目标。


限时优惠,快快抢购吧!


李肖遥 公众号“技术让梦想更伟大”,作者:李肖遥,专注嵌入式,只推荐适合你的博文,干货,技术心得,与君共勉。
评论 (0)
  • 一、gao效冷却与控温机制‌1、‌冷媒流动设计‌采用低压液氮(或液氦)通过毛细管路导入蒸发器,蒸汽喷射至样品腔实现快速冷却,冷却效率高(室温至80K约20分钟,至4.2K约30分钟)。通过控温仪动态调节蒸发器加热功率,结合温度传感器(如PT100铂电阻或Cernox磁场不敏感传感器),实现±0.01K的高精度温度稳定性。2、‌宽温区覆盖与扩展性‌标准温区为80K-325K,通过降压选件可将下限延伸至65K(液氮模式)或4K(液氦模式)。可选配475K高温模块,满足材料在ji端温度下的性能测试需求
    锦正茂科技 2025-04-30 13:08 145浏览
  • 在CAN总线分析软件领域,当CANoe不再是唯一选择时,虹科PCAN-Explorer 6软件成为了一个有竞争力的解决方案。在现代工业控制和汽车领域,CAN总线分析软件的重要性不言而喻。随着技术的进步和市场需求的多样化,单一的解决方案已无法满足所有用户的需求。正是在这样的背景下,虹科PCAN-Explorer 6软件以其独特的模块化设计和灵活的功能扩展,为CAN总线分析领域带来了新的选择和可能性。本文将深入探讨虹科PCAN-Explorer 6软件如何以其创新的模块化插件策略,提供定制化的功能选
    虹科汽车智能互联 2025-04-28 16:00 154浏览
  • 在智能硬件设备趋向微型化的背景下,语音芯片方案厂商针对小体积设备开发了多款超小型语音芯片方案,其中WTV系列和WT2003H系列凭借其QFN封装设计、高性能与高集成度,成为微型设备语音方案的理想选择。以下从封装特性、功能优势及典型应用场景三个方面进行详细介绍。一、超小体积封装:QFN技术的核心优势WTV系列与WT2003H系列均提供QFN封装(如QFN32,尺寸为4×4mm),这种封装形式具有以下特点:体积紧凑:QFN封装通过减少引脚间距和优化内部结构,显著缩小芯片体积,适用于智能门铃、穿戴设备
    广州唯创电子 2025-04-30 09:02 163浏览
  • 随着电子元器件的快速发展,导致各种常见的贴片电阻元器件也越来越小,给我们分辨也就变得越来越难,下面就由smt贴片加工厂_安徽英特丽就来告诉大家如何分辨的SMT贴片元器件。先来看看贴片电感和贴片电容的区分:(1)看颜色(黑色)——一般黑色都是贴片电感。贴片电容只有勇于精密设备中的贴片钽电容才是黑色的,其他普通贴片电容基本都不是黑色的。(2)看型号标码——贴片电感以L开头,贴片电容以C开头。从外形是圆形初步判断应为电感,测量两端电阻为零点几欧,则为电感。(3)检测——贴片电感一般阻值小,更没有“充放
    贴片加工小安 2025-04-29 14:59 164浏览
  • 4月22日下午,备受瞩目的飞凌嵌入式「2025嵌入式及边缘AI技术论坛」在深圳深铁皇冠假日酒店盛大举行,此次活动邀请到了200余位嵌入式技术领域的技术专家、企业代表和工程师用户,共享嵌入式及边缘AI技术的盛宴!1、精彩纷呈的展区产品及方案展区是本场活动的第一场重头戏,从硬件产品到软件系统,从企业级应用到高校教学应用,都吸引了现场来宾的驻足观看和交流讨论。全产品矩阵展区展示了飞凌嵌入式丰富的产品线,从嵌入式板卡到工控机,从进口芯片平台到全国产平台,无不体现出飞凌嵌入式在嵌入式主控设备研发设计方面的
    飞凌嵌入式 2025-04-28 14:43 129浏览
  • 文/郭楚妤编辑/cc孙聪颖‍越来越多的企业开始蚕食动力电池市场,行业“去宁王化”态势逐渐明显。随着这种趋势的加强,打开新的市场对于宁德时代而言至关重要。“我们不希望被定义为电池的制造者,而是希望把自己称作新能源产业的开拓者。”4月21日,在宁德时代举行的“超级科技日”发布会上,宁德时代掌门人曾毓群如是说。随着宁德时代核心新品骁遥双核电池的发布,其搭载的“电电增程”技术也走进业界视野。除此之外,经过近3年试水,宁德时代在换电业务上重资加码。曾毓群认为换电是一个重资产、高投入、长周期的产业,涉及的利
    华尔街科技眼 2025-04-28 21:55 121浏览
  • 一、智能家居的痛点与创新机遇随着城市化进程加速,现代家庭正面临两大核心挑战:情感陪伴缺失:超60%的双职工家庭存在“亲子陪伴真空期”,儿童独自居家场景增加;操作复杂度攀升:智能设备功能迭代导致用户学习成本陡增,超40%用户因操作困难放弃高阶功能。而WTR096-16S录音语音芯片方案,通过“语音交互+智能录音”双核驱动,不仅解决设备易用性问题,更构建起家庭成员间的全天候情感纽带。二、WTR096-16S方案的核心技术突破1. 高保真语音交互系统动态情绪语音库:支持8种语气模板(温柔提醒/紧急告警
    广州唯创电子 2025-04-28 09:24 182浏览
  • 你是不是也有在公共场合被偷看手机或笔电的经验呢?科技时代下,不少现代人的各式机密数据都在手机、平板或是笔电等可携式的3C产品上处理,若是经常性地需要在公共场合使用,不管是工作上的机密文件,或是重要的个人信息等,民众都有防窃防盗意识,为了避免他人窥探内容,都会选择使用「防窥保护贴片」,以防止数据外泄。现今市面上「防窥保护贴」、「防窥片」、「屏幕防窥膜」等产品就是这种目的下产物 (以下简称防窥片)!防窥片功能与常见问题解析首先,防窥片最主要的功能就是用来防止他人窥视屏幕上的隐私信息,它是利用百叶窗的
    百佳泰测试实验室 2025-04-30 13:28 179浏览
  • 网约车,真的“饱和”了?近日,网约车市场的 “饱和” 话题再度引发热议。多地陆续发布网约车风险预警,提醒从业者谨慎入局,这背后究竟隐藏着怎样的市场现状呢?从数据来看,网约车市场的“过剩”现象已愈发明显。以东莞为例,截至2024年12月底,全市网约车数量超过5.77万辆,考取网约车驾驶员证的人数更是超过13.48万人。随着司机数量的不断攀升,订单量却未能同步增长,导致单车日均接单量和营收双双下降。2024年下半年,东莞网约出租车单车日均订单量约10.5单,而单车日均营收也不容乐
    用户1742991715177 2025-04-29 18:28 169浏览
  • 文/Leon编辑/cc孙聪颖‍2023年,厨电行业在相对平稳的市场环境中迎来温和复苏,看似为行业增长积蓄势能。带着对市场向好的预期,2024 年初,老板电器副董事长兼总经理任富佳为企业定下双位数增长目标。然而现实与预期相悖,过去一年,这家老牌厨电企业不仅未能达成业绩目标,曾提出的“三年再造一个老板电器”愿景,也因市场下行压力面临落空风险。作为“企二代”管理者,任富佳在掌舵企业穿越市场周期的过程中,正面临着前所未有的挑战。4月29日,老板电器(002508.SZ)发布了2024年年度报告及2025
    华尔街科技眼 2025-04-30 12:40 147浏览
  • 浪潮之上:智能时代的觉醒    近日参加了一场课题的答辩,这是医疗人工智能揭榜挂帅的国家项目的地区考场,参与者众多,围绕着医疗健康的主题,八仙过海各显神通,百花齐放。   中国大地正在发生着激动人心的场景:深圳前海深港人工智能算力中心高速运转的液冷服务器,武汉马路上自动驾驶出租车穿行的智慧道路,机器人参与北京的马拉松竞赛。从中央到地方,人工智能相关政策和消息如雨后春笋般不断出台,数字中国的建设图景正在智能浪潮中徐徐展开,战略布局如同围棋
    广州铁金刚 2025-04-30 15:24 139浏览
  • 贞光科技代理品牌紫光国芯的车规级LPDDR4内存正成为智能驾驶舱的核心选择。在汽车电子国产化浪潮中,其产品以宽温域稳定工作能力、优异电磁兼容性和超长使用寿命赢得市场认可。紫光国芯不仅确保供应链安全可控,还提供专业本地技术支持。面向未来,紫光国芯正研发LPDDR5车规级产品,将以更高带宽、更低功耗支持汽车智能化发展。随着智能网联汽车的迅猛发展,智能驾驶舱作为人机交互的核心载体,对处理器和存储器的性能与可靠性提出了更高要求。在汽车电子国产化浪潮中,贞光科技代理品牌紫光国芯的车规级LPDDR4内存凭借
    贞光科技 2025-04-28 16:52 200浏览
  • 晶振在使用过程中可能会受到污染,导致性能下降。可是污染物是怎么进入晶振内部的?如何检测晶振内部污染物?我可不可以使用超声波清洗?今天KOAN凯擎小妹将逐一解答。1. 污染物来源a. 制造过程:生产环境不洁净或封装密封不严,可能导致灰尘和杂质进入晶振。b. 使用环境:高湿度、温度变化、化学物质和机械应力可能导致污染物渗入。c. 储存不当:不良的储存环境和不合适的包装材料可能引发化学物质迁移。建议储存湿度维持相对湿度在30%至75%的范围内,有助于避免湿度对晶振的不利影响。避免雨淋或阳光直射。d.
    koan-xtal 2025-04-28 06:11 137浏览
  •  探针台的维护直接影响其测试精度与使用寿命,需结合日常清洁、环境控制、定期校准等多维度操作,具体方法如下:一、日常清洁与保养1.‌表面清洁‌l 使用无尘布或软布擦拭探针台表面,避免残留清洁剂或硬物划伤精密部件。l 探针头清洁需用非腐蚀性溶剂(如异丙醇)擦拭,检查是否弯曲或损坏。2.‌光部件维护‌l 镜头、观察窗等光学部件用镜头纸蘸取wu水jiu精从中心向外轻擦,操作时远离火源并保持通风。3.‌内部防尘‌l 使用后及时吹扫灰尘,防止污染物进入机械滑
    锦正茂科技 2025-04-28 11:45 104浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦