pyside6学习专栏(九):在PySide6中使用PySide6.QtCharts绘制6种不同的图表的示例代码

PySide6的QtCharts类支持绘制各种型状的图表,如面积区域图、饼状图、折线图、直方图、线条曲线图、离散点图等,下面的代码是采用示例数据绘制这6种图表的示例代码,并可实现动画显示效果,实际使用时参照代码中示例数据的格式将实际数据替换即可实现图表格式的显示

本代码是将PySide6官方示例代码增加中文注释,同时将代码中随机产生的数据改为更直观的示例列表数据值,以更直观的了解数据同图表显示的关系。

对应python代码如下:

# PySide6.QtCharts的6种方式显示图表的示例程序

from __future__ import annotations

 

import sys

from PySide6.QtCore import QPointF, Qt

from PySide6.QtGui import QColor, QPainter, QPalette

from PySide6.QtWidgets import (QApplication, QMainWindow, QSizePolicy,

                               QWidget)

from PySide6.QtCharts import (QAreaSeries, QBarSet, QChart, QChartView,

                              QLineSeries, QPieSeries, QScatterSeries,

                              QSplineSeries, QStackedBarSeries)

 

from ui_themewidget import Ui_ThemeWidgetForm as ui    

 

from random import random, uniform

 

#示例主窗口

class ThemeWidget(QWidget):

    def __init__(self, parent):

        QWidget.__init__(self, parent)

 

        self.charts = []   #定义本示例要用的图表:共下面6种类型

 

        self.ui = ui()    #为ui设置器设计的窗体实例化一对象,要调用此模块中的控件对象或继续初始化窗体布局

       

        self.ui.setupUi(self)        #初始化主窗口自身界面(使用设计器编制的窗口themewidget.ui编绎成窗口模块文件ui_themewidget.py.在终端命令行中输入:  PySide6-uic 'themewidget.ui'  -o 'ui_themewidget.py' )

        self.populate_themebox()     #初始化显示颜色组合框

        self.populate_animationbox() #初始化动画选项组合框

        self.populate_legendbox()    #初始化图标位置组合框

       

        # 面积区域图表显示视图

        chart_view = QChartView(self.create_areachart())

        self.ui.gridLayout.addWidget(chart_view, 1, 0)   #继续完成UI设计器中没有完成的界面初始化工作:网格布局依次加入6个view

        self.charts.append(chart_view)

 

        #饼状图显示视图

        chart_view = QChartView(self.create_pie_chart())

        chart_view.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)

        self.ui.gridLayout.addWidget(chart_view, 1, 1)

        self.charts.append(chart_view)

 

        #折线图显示视图

        chart_view = QChartView(self.create_line_chart())

        self.ui.gridLayout.addWidget(chart_view, 1, 2)

        self.charts.append(chart_view)

 

        #直方图显示视图

        chart_view = QChartView(self.create_bar_chart())

        self.ui.gridLayout.addWidget(chart_view, 2, 0)

        self.charts.append(chart_view)

 

        #样条直线图显示视图

        chart_view = QChartView(self.create_spline_chart())

        self.ui.gridLayout.addWidget(chart_view, 2, 1)

        self.charts.append(chart_view)

 

        #离散点图显示视图

        chart_view = QChartView(self.create_scatterchart())

        self.ui.gridLayout.addWidget(chart_view, 2, 2)

        self.charts.append(chart_view)

 

        #设置默认支持抗锯齿

        self.ui.antialiasCheckBox.setChecked(True)

 

        #设置默认显示颜色

        pal = qApp.palette()

        pal.setColor(QPalette.Window, QColor(0xf0f0f0))

        pal.setColor(QPalette.WindowText, QColor(0x404044))

        qApp.setPalette(pal)

 

        self.update_ui()   #刷新一次显示

   

    #初始化颜色类型选项组合框

    def populate_themebox(self):

        theme = self.ui.themeComboBox

        theme.addItem("亮白", QChart.ChartThemeLight)

        theme.addItem("天蓝色", QChart.ChartThemeBlueCerulean)

        theme.addItem("暗色调", QChart.ChartThemeDark)

        theme.addItem("棕沙色", QChart.ChartThemeBrownSand)

        theme.addItem("蓝NCS", QChart.ChartThemeBlueNcs)

        theme.addItem("高对比", QChart.ChartThemeHighContrast)

        theme.addItem("蓝Icy", QChart.ChartThemeBlueIcy)

        theme.addItem("Qt", QChart.ChartThemeQt)

    #初始化动画类型选项组合框

    def populate_animationbox(self):

        animated = self.ui.animatedComboBox

        animated.addItem("无动画", QChart.NoAnimation)

        animated.addItem("沿网格轴动画", QChart.GridAxisAnimations)

        animated.addItem("连续动画", QChart.SeriesAnimations)

        animated.addItem("所有动画", QChart.AllAnimations)

    #初始化图例显示位置选项组合框

    def populate_legendbox(self):

        legend = self.ui.legendComboBox

        legend.addItem("无图例", 0)

        legend.addItem("图例在上", Qt.AlignTop)

        legend.addItem("图例在下", Qt.AlignBottom)

        legend.addItem("图例在左", Qt.AlignLeft)

        legend.addItem("图例在右", Qt.AlignRight)

 

    #1.创建面积区域类型图表

    def create_areachart(self):

        chart = QChart()

        chart.setTitle("面积区域图")

        #下面定义面积区域的三条线上的点坐标示例数据

        lstDatas1=[[0.0,1.1],[2.0,1.5],[3.0,1.8],[4.0,2.1],[5.0,2.6],[6.0,2.9]]

        lstDatas2=[[0.0,3.1],[2.0,3.5],[3.0,3.5],[4.0,4.1],[5.0,4.6],[6.0,4.9]]

        lstDatas3=[[0.0,6.1],[2.0,6.5],[3.0,6.8],[4.0,8.5],[5.0,8.9],[6.0,9.3]]

        lstDatas=[]

        lstDatas.append(lstDatas1)

        lstDatas.append(lstDatas2)

        lstDatas.append(lstDatas3)

        count=len(lstDatas1)

        #底层线位置

        lower_series = None

        name = "A"    #设置图标名前缀

        id=0

        for oneDatas in lstDatas:

            upper_series = QLineSeries(chart)        #上层线位置

            for onePoint in oneDatas:

                x=onePoint[0]

                y=onePoint[1]

                upper_series.append(QPointF(x,y))

            id+=1

            area = QAreaSeries(upper_series, lower_series)  

            area.setName(f"{name}{id}")

            chart.addSeries(area)

            lower_series = upper_series                           #下一个区的的上层线变成下一个区域的底层线

       

        chart.createDefaultAxes()

        axis_x = chart.axes(Qt.Orientation.Horizontal)[0]

        axis_x.setRange(0, count-1)    #设置X轴标区间

        axis_y = chart.axes(Qt.Vertical)[0]

        axis_y.setRange(0,10)          #设置X轴标区间

 

        #增加轴标在轴线外侧

        axis_y.setLabelFormat("%.1f  ")

 

        return chart

   

    #2.创建饼状图图表

    def create_pie_chart(self):

        chart = QChart()

        chart.setTitle("饼状图")

        series = QPieSeries(chart)

        #下面饼状图中各区域的示例值

        lstDatas=[1.0,2.0,3.0,4.0,5.0,6.0,7.0]

        count=len(lstDatas)

        id=0

        for oneBarValue in  lstDatas:

            barStr=f'饼:{id+1}'

            slc=series.append(barStr,oneBarValue)

            if(id==4):   #如当前为id=4号的饼数据时,将此饼状区域(序号4+1)单独提出来分离开显示

                slc.setLabelVisible()

                slc.setExploded()

                slc.setExplodeDistanceFactor(0.5)

            id+=1

 

        series.setPieSize(0.5)    #设置饼显示尺寸相对视中的占比

        chart.addSeries(series)

 

        return chart

   

     #3.创建折线图图表

    def create_line_chart(self):

        chart = QChart()

        chart.setTitle("线性图")

        #下面定义三组每条折线上的点坐标示例数据

        lstDatas1=[[0.0,1.1],[2.0,1.5],[3.0,1.8],[4.0,2.1],[5.0,2.6],[6.0,2.9]]

        lstDatas2=[[0.0,3.1],[2.0,3.5],[3.0,3.5],[4.0,4.1],[5.0,4.6],[8.0,4.9]]

        lstDatas3=[[0.0,6.1],[2.0,6.5],[3.0,6.8],[4.0,8.5],[5.0,8.9],[10.0,9.3]]

        lstDatas=[]

        lstDatas.append(lstDatas1)

        lstDatas.append(lstDatas2)

        lstDatas.append(lstDatas3)

        name = "C"   #设置图标名前缀

 

        id=0

        for oneDatas in lstDatas:

            series = QLineSeries(chart)

            for onePoint in oneDatas:

                series.append(QPointF(onePoint[0],onePoint[1]))            #得到数据中的点值要转换为QPointF

            series.setName(f"{name}{id}")                                  #为每条线(共3条)设置图标名称

            chart.addSeries(series)

            id+=1

 

        chart.createDefaultAxes()

        axis_x = chart.axes(Qt.Orientation.Horizontal)[0]

        axis_x.setRange(0, 10)                 #设置X轴标区间

        axis_y = chart.axes(Qt.Vertical)[0]

        axis_y.setRange(0, 10)                 #设置y轴标区间

        #增加轴标在轴线外侧

        axis_y.setLabelFormat("%.1f  ")

 

        return chart

   

    #4.创建直方图类型图表

    def create_bar_chart(self):

        chart = QChart()

        chart.setTitle("直方图")

        #下面定义三组数据在每个矩形上的高度示例数据

        lstDatas1=[1.0,2.0,3.0,4.0,5.0,6.0,7.0]

        lstDatas2=[1.0,3.0,5.0,7.0,2.0,4.0,6.0]

        lstDatas3=[7.0,6.0,5.0,4.0,3.0,3.0,1.0]

        lstDatas=[]

        lstDatas.append(lstDatas1)

        lstDatas.append(lstDatas2)

        lstDatas.append(lstDatas3)

 

        series = QStackedBarSeries(chart)

        id=0

        for oneDatas in lstDatas:                   #得到3组数据中的每一组数据

            barset = QBarSet(f"D{id}")              #为每组数据设置对象及对应图标名

            for oneRectY in oneDatas:               #得到每组数据中的Y值

                barset.append(oneRectY)

            series.append(barset)                   #共创建7项直方图(X向),每组直方图有3个矩形区,如X轴第1列矩形的高分别为:lstDatas1[0],中间为lstDatas2[0],上部矩形为lstDatas3[0]

            id+=1

        chart.addSeries(series)

        chart.createDefaultAxes()

        axis_y = chart.axes(Qt.Vertical)[0]

        axis_y.setRange(0, 30)                  #设置Y轴网格最大高度,不用此句时,为三组数据最大值合

        axis_y.setLabelFormat("%.2f  ")         #Y轴标显示格式

        return chart

   

    #5.创建样条曲线类型图表

    def create_spline_chart(self):

        chart = QChart()

        chart.setTitle("样条曲线图")

        name = "E"    #设置图标名前缀

        #下面定义三组每条样条曲线上的点坐标示例数据

        lstDatas1=[[0.0,1.1],[2.0,1.5],[3.0,1.8],[4.0,2.1],[5.0,2.6],[6.0,2.9]]

        lstDatas2=[[0.0,3.1],[2.0,3.5],[3.0,3.5],[4.0,4.1],[5.0,4.6],[8.0,4.9]]

        lstDatas3=[[0.0,6.1],[2.0,6.5],[3.0,6.8],[4.0,8.5],[5.0,8.9],[10.0,9.3]]

        lstDatas=[]

        lstDatas.append(lstDatas1)

        lstDatas.append(lstDatas2)

        lstDatas.append(lstDatas3)

        id=0

        for oneDatas in lstDatas:

            series = QSplineSeries(chart)

            for onePoint in oneDatas:

                series.append(QPointF(onePoint[0],onePoint[1]))            #得到数据中的点值要转换为QPointF

            series.setName(f"{name}{id}")                                  #为每条线(共3条)设置图标名称

            chart.addSeries(series)

            id+=1

 

        chart.createDefaultAxes()

        axis_x = chart.axes(Qt.Orientation.Horizontal)[0]

        axis_x.setRange(0,10)                    #设置X轴标区间

        axis_y = chart.axes(Qt.Vertical)[0]

        axis_y.setRange(0, 10)                   #设置X轴标区间

        axis_y.setLabelFormat("%.1f  ")

        return chart

   

    #6.创建离散点类型图表

    def create_scatterchart(self):

        chart = QChart()

        chart.setTitle("离散点图")

        name = "F"

        #下面定义三组离散点坐标示例数据:共21个点

        lstDatas1=[[0.2,1.1],[2.0,1.5],[3.0,1.8],[4.0,2.1],[5.0,2.6],[6.0,2.9]]

        lstDatas2=[[0.4,3.1],[2.0,3.5],[3.0,3.5],[4.0,4.1],[5.0,4.6],[8.0,4.9]]

        lstDatas3=[[0.5,6.1],[2.0,6.5],[3.0,6.8],[4.0,8.5],[5.0,8.9],[9.8,9.3]]

        lstDatas=[]

        lstDatas.append(lstDatas1)

        lstDatas.append(lstDatas2)

        lstDatas.append(lstDatas3)

        id=0

        for oneDatas in lstDatas:

            series = QScatterSeries(chart)

            for onePoint in oneDatas:

                series.append(QPointF(onePoint[0],onePoint[1]))            #得到数据中的点值要转换为QPointF

            series.setName(f"{name}{id}")                                  #为每条线(共3条)设置图标名称

            chart.addSeries(series)

            id+=1

 

        chart.createDefaultAxes()

        axis_x = chart.axes(Qt.Orientation.Horizontal)[0]

        axis_x.setRange(0,10)          #设置X轴标区间(最大值为数据中的X最大值)

        axis_y = chart.axes(Qt.Vertical)[0]

        axis_y.setRange(0, 10)         #设置y轴标区间 (最大值为数据中的y最大值)

        axis_y.setLabelFormat("%.1f  ")

 

        return chart

   

    #按当前的设置选项更新显示视图:组合框选项发生变化时均会自动调用此函数,本例无需定义对应的信号槽函数?

    def update_ui(self):

        def set_colors(window_color, text_color):

            pal = self.window().palette()

            pal.setColor(QPalette.Window, window_color)

            pal.setColor(QPalette.WindowText, text_color)

            self.window().setPalette(pal)

 

        idx = self.ui.themeComboBox.currentIndex()

        theme = self.ui.themeComboBox.itemData(idx)

 

        if len(self.charts):

            chart_theme = self.charts[0].chart().theme()

            if chart_theme != theme:

                for chart_view in self.charts:

                    chart_view.chart().setTheme(theme)

 

                #根据选择的类型更新颜色面板

                if theme == QChart.ChartThemeLight:

                    set_colors(QColor(0xf0f0f0), QColor(0x404044))

                elif theme == QChart.ChartThemeDark:

                    set_colors(QColor(0x121218), QColor(0xd6d6d6))

                elif theme == QChart.ChartThemeBlueCerulean:

                    set_colors(QColor(0x40434a), QColor(0xd6d6d6))

                elif theme == QChart.ChartThemeBrownSand:

                    set_colors(QColor(0x9e8965), QColor(0x404044))

                elif theme == QChart.ChartThemeBlueNcs:

                    set_colors(QColor(0x018bba), QColor(0x404044))

                elif theme == QChart.ChartThemeHighContrast:

                    set_colors(QColor(0xffab03), QColor(0x181818))

                elif theme == QChart.ChartThemeBlueIcy:

                    set_colors(QColor(0xcee7f0), QColor(0x404044))

                else:

                    set_colors(QColor(0xf0f0f0), QColor(0x404044))

 

        # 更新抗锯齿显示

        checked = self.ui.antialiasCheckBox.isChecked()

        for chart in self.charts:

            chart.setRenderHint(QPainter.RenderHint.Antialiasing, checked)

 

        #更新动画显示

        idx = self.ui.animatedComboBox.currentIndex()

        options = self.ui.animatedComboBox.itemData(idx)

 

        if len(self.charts):

            animation_options = self.charts[0].chart().animationOptions()

            if animation_options != options:

                for chart_view in self.charts:

                    chart_view.chart().setAnimationOptions(options)

 

        # 更新图例显示位置

        idx = self.ui.legendComboBox.currentIndex()

        alignment = self.ui.legendComboBox.itemData(idx)

 

        if not alignment:

            for chart_view in self.charts:

                chart_view.chart().legend().hide()

        else:

            for chart_view in self.charts:

                alignment_name = Qt.AlignTop

                if alignment == 32:

                    alignment_name = Qt.AlignTop

                elif alignment == 64:

                    alignment_name = Qt.AlignBottom

                elif alignment == 1:

                    alignment_name = Qt.AlignLeft

                elif alignment == 2:

                    alignment_name = Qt.AlignRight

                chart_view.chart().legend().setAlignment(alignment_name)

                chart_view.chart().legend().show()

 

#程序入口

if __name__ == "__main__":

    app = QApplication(sys.argv)

    window = QMainWindow()

    widget = ThemeWidget(None)

    window.setCentralWidget(widget)

    available_geometry = window.screen().availableGeometry()

    size = available_geometry.height() * 1.0

    window.setFixedSize(size, size *0.85)

    window.show()

    window.setWindowTitle('PySide6.QtCharts的6种方式显示图表')

   

    sys.exit(app.exec())

下面是UI设计器的界面编绎后的ui_themewidget.py模块代码,此代码文件同上面主模块文件放在一个目录即可

# -*- coding: utf-8 -*-################################################################################
## Form generated from reading UI file 'themewidget.ui'
##
## Created by: Qt User Interface Compiler version 6.8.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,QMetaObject, QObject, QPoint, QRect,QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,QFont, QFontDatabase, QGradient, QIcon,QImage, QKeySequence, QLinearGradient, QPainter,QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QGridLayout,QHBoxLayout, QLabel, QSizePolicy, QSpacerItem,QWidget)class Ui_ThemeWidgetForm(object):def setupUi(self, ThemeWidgetForm):if not ThemeWidgetForm.objectName():ThemeWidgetForm.setObjectName(u"ThemeWidgetForm")ThemeWidgetForm.setWindowModality(Qt.WindowModality.WindowModal)ThemeWidgetForm.resize(1200, 900)self.gridLayout = QGridLayout(ThemeWidgetForm)self.gridLayout.setObjectName(u"gridLayout")self.horizontalLayout = QHBoxLayout()self.horizontalLayout.setObjectName(u"horizontalLayout")self.themeLabel = QLabel(ThemeWidgetForm)self.themeLabel.setObjectName(u"themeLabel")self.horizontalLayout.addWidget(self.themeLabel)self.themeComboBox = QComboBox(ThemeWidgetForm)self.themeComboBox.setObjectName(u"themeComboBox")self.horizontalLayout.addWidget(self.themeComboBox)self.animatedLabel = QLabel(ThemeWidgetForm)self.animatedLabel.setObjectName(u"animatedLabel")self.horizontalLayout.addWidget(self.animatedLabel)self.animatedComboBox = QComboBox(ThemeWidgetForm)self.animatedComboBox.setObjectName(u"animatedComboBox")self.horizontalLayout.addWidget(self.animatedComboBox)self.legendLabel = QLabel(ThemeWidgetForm)self.legendLabel.setObjectName(u"legendLabel")self.horizontalLayout.addWidget(self.legendLabel)self.legendComboBox = QComboBox(ThemeWidgetForm)self.legendComboBox.setObjectName(u"legendComboBox")self.horizontalLayout.addWidget(self.legendComboBox)self.antialiasCheckBox = QCheckBox(ThemeWidgetForm)self.antialiasCheckBox.setObjectName(u"antialiasCheckBox")self.antialiasCheckBox.setChecked(False)self.horizontalLayout.addWidget(self.antialiasCheckBox)self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)self.horizontalLayout.addItem(self.horizontalSpacer)self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 3)self.retranslateUi(ThemeWidgetForm)self.themeComboBox.currentIndexChanged.connect(ThemeWidgetForm.update_ui)self.antialiasCheckBox.toggled.connect(ThemeWidgetForm.update_ui)self.legendComboBox.currentIndexChanged.connect(ThemeWidgetForm.update_ui)self.animatedComboBox.currentIndexChanged.connect(ThemeWidgetForm.update_ui)QMetaObject.connectSlotsByName(ThemeWidgetForm)# setupUidef retranslateUi(self, ThemeWidgetForm):self.themeLabel.setText(QCoreApplication.translate("ThemeWidgetForm", u"\u8272\u8c03:", None))self.animatedLabel.setText(QCoreApplication.translate("ThemeWidgetForm", u"\u56fe\u4f8b:", None))self.legendLabel.setText(QCoreApplication.translate("ThemeWidgetForm", u"\u56fe\u4f8b:", None))self.antialiasCheckBox.setText(QCoreApplication.translate("ThemeWidgetForm", u"\u6297\u952f\u9f7f", None))pass# retranslateUi

UI文件“themewidget.ui”脚本如下,复制到一文本文件中另存为themewidget.ui,即可用UI设计器打开此界面文件

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>ThemeWidgetForm</class><widget class="QWidget" name="ThemeWidgetForm"><property name="windowModality"><enum>Qt::WindowModality::WindowModal</enum></property><property name="geometry"><rect><x>0</x><y>0</y><width>1200</width><height>900</height></rect></property><layout class="QGridLayout" name="gridLayout"><item row="0" column="0" colspan="3"><layout class="QHBoxLayout" name="horizontalLayout"><item><widget class="QLabel" name="themeLabel"><property name="text"><string>色调:</string></property></widget></item><item><widget class="QComboBox" name="themeComboBox"/></item><item><widget class="QLabel" name="animatedLabel"><property name="text"><string>图例:</string></property></widget></item><item><widget class="QComboBox" name="animatedComboBox"/></item><item><widget class="QLabel" name="legendLabel"><property name="text"><string>图例:</string></property></widget></item><item><widget class="QComboBox" name="legendComboBox"/></item><item><widget class="QCheckBox" name="antialiasCheckBox"><property name="text"><string>抗锯齿</string></property><property name="checked"><bool>false</bool></property></widget></item><item><spacer name="horizontalSpacer"><property name="orientation"><enum>Qt::Orientation::Horizontal</enum></property><property name="sizeHint" stdset="0"><size><width>40</width><height>20</height></size></property></spacer></item></layout></item></layout></widget><resources/><connections><connection><sender>themeComboBox</sender><signal>currentIndexChanged(int)</signal><receiver>ThemeWidgetForm</receiver><slot>update_ui()</slot><hints><hint type="sourcelabel"><x>20</x><y>20</y></hint><hint type="destinationlabel"><x>20</x><y>20</y></hint></hints></connection><connection><sender>antialiasCheckBox</sender><signal>toggled(bool)</signal><receiver>ThemeWidgetForm</receiver><slot>update_ui()</slot><hints><hint type="sourcelabel"><x>20</x><y>20</y></hint><hint type="destinationlabel"><x>20</x><y>20</y></hint></hints></connection><connection><sender>legendComboBox</sender><signal>currentIndexChanged(int)</signal><receiver>ThemeWidgetForm</receiver><slot>update_ui()</slot><hints><hint type="sourcelabel"><x>20</x><y>20</y></hint><hint type="destinationlabel"><x>20</x><y>20</y></hint></hints></connection><connection><sender>animatedComboBox</sender><signal>currentIndexChanged(int)</signal><receiver>ThemeWidgetForm</receiver><slot>update_ui()</slot><hints><hint type="sourcelabel"><x>20</x><y>20</y></hint><hint type="destinationlabel"><x>20</x><y>20</y></hint></hints></connection></connections><slots><slot>update_ui()</slot></slots>
</ui>

 

 

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

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

相关文章

《今日AI-人工智能-编程日报》

1. 字节跳动发布AI编程工具Trae国内版 发布背景&#xff1a;字节跳动于2025年3月3日正式推出国内版AI编程工具Trae&#xff0c;这是国内首个AI原生集成开发环境&#xff08;AI IDE&#xff09;&#xff0c;旨在提升开发者的编程效率与智能化体验。 核心功能&#xff1a; 搭载d…

doris: MySQL

Doris JDBC Catalog 支持通过标准 JDBC 接口连接 MySQL 数据库。本文档介绍如何配置 MySQL 数据库连接。 使用须知​ 要连接到 MySQL 数据库&#xff0c;您需要 MySQL 5.7, 8.0 或更高版本 MySQL 数据库的 JDBC 驱动程序&#xff0c;您可以从 Maven 仓库下载最新或指定版本的…

【LangChain】存储与管理对话历史

0. 代码演示 from langchain_community.chat_message_histories import SQLChatMessageHistorydef get_session_history(session_id):# 通过 session_id 区分对话历史&#xff0c;并存储在 sqlite 数据库中return SQLChatMessageHistory(session_id, "sqlite:///memory.d…

从0开始的操作系统手搓教程21:进程子系统的一个核心功能——简单的进程切换

目录 具体说说我们的简单RR调度 处理时钟中断处理函数 调度器 schedule switch_to 我们下面&#xff0c;就要开始真正的进程切换了。在那之前&#xff0c;笔者想要说的是——我们实现的进程切换简单的无法再简单了——也就是实现一个超级简单的轮询调度器。 每一个进程按照…

mysql新手常见问题解决方法总结

1. 安装与配置问题 1.1 无法安装MySQL Server MySQL Server安装失败是新手常见的问题之一&#xff0c;以下是具体原因及解决方案&#xff1a; 系统要求不满足&#xff1a;MySQL对操作系统有最低版本要求&#xff0c;如Windows 7 SP1及以上、macOS 10.13及以上。若系统版本过…

数字组合(信息学奥赛一本通-1291)

【题目描述】 有n个正整数&#xff0c;找出其中和为t(t也是正整数)的可能的组合方式。如&#xff1a;n5,5个数分别为1,2,3,4,5&#xff0c;t5&#xff1b;那么可能的组合有514和523和55三种组合方式。 【输入】 输入的第一行是两个正整数n和t&#xff0c;用空格隔开&#xff0c…

搜索引擎(基于java在线文档)

背景&#xff1a; 基于java文档的搜索引擎&#xff0c;可以输入搜索词&#xff0c;然后就可以查询出与搜索词相关的文档。该项目的最主要的工作是要构建索引&#xff0c;就是正排和倒排索引。正排索引&#xff1a;根据文档id获取到文档&#xff1b;倒排索引&#xff1a;根据搜…

【每日学点HarmonyOS Next知识】web滚动、事件回调、selectable属性、监听H5内部router、Grid嵌套时高度设置

【每日学点HarmonyOS Next知识】web滚动、事件回调、selectable属性、监听H5内部router、Grid嵌套时高度设置 1、HarmonyOS WebView加载url无法滚动&#xff1f; scroll 里面嵌套webView&#xff0c;demo参考&#xff1a; // xxx.ets import web_webview from ohos.web.webv…

Flink性能指标详解MetricsAnalysis

文章目录 Flink 组成1.JobManager2.TaskManager3.ResourceManager4.Dispatcher5.Client6. Env JobManager MetricsTaskManager Metrics Flink 组成 1.JobManager 管理任务 作业调度&#xff1a;负责接收和调度作业&#xff0c;分配任务到 TaskManager。资源管理&#xff1a;…

Flutter底层实现

1. Dart 语言 Dart 是 Flutter 的主要编程语言。Dart 设计之初就是为了与 JavaScript 兼容&#xff0c;并且可以编译为机器代码运行。Dart 提供了一些特性&#xff0c;如异步支持&#xff08;通过 async 和 await&#xff09;&#xff0c;这使得编写高效的网络请求和复杂动画变…

< 自用文儿 > CertBot 申请 SSL 证书 使用 challenge 模式 避开防火墙的阻挡

环境&#xff1a; 腾讯 VPS 腾讯会向你销售 SSL &#xff0c; 这个本是免费的。CertBot 默认申请证书要用到 80 端口&#xff0c;会蹭边什么什么条款&#xff0c;备案法律来阻止80端口的通讯&#xff0c;没有网站也一样被阻拦。 通过腾讯买的域名&#xff1a; bestherbs.cn …

【AI】【Unity】关于Unity接入DeepseekAPI遇到的坑

前言 由于deepseek网页端在白天日常抽风&#xff0c;无法正常的使用&#xff0c;所以调用API就成了目前最好的选择&#xff0c;尤其是Deepseek的API价格低得可怕&#xff0c;这不是和白送的一样吗&#xff01;然后使用过很多本地部署接入API的方式&#xff0c;例如Chatbox、Pa…

【微知】Mellanox驱动中to是什么?有哪些超时时间?(time out,心跳2s,reset 1分钟)

to是tout缩写&#xff0c;tout是time out 单位是毫秒。 static const u32 tout_def_sw_val[MAX_TIMEOUT_TYPES] {[MLX5_TO_FW_PRE_INIT_TIMEOUT_MS] 120000, # 2min。预初始化的总超时时间[MLX5_TO_FW_PRE_INIT_ON_RECOVERY_TIMEOUT_MS] 7200000, #设备恢复过程中的固件预初…

linux | Vim 命令快捷操作

注&#xff1a;本文为过去的 “vim 使用笔记”。 跳转命令 跳转命令 #&#xff1a;向前查找光标当前所在单词&#xff0c;并跳转到该单词的上一个出现位置。*&#xff1a;向后查找光标当前所在单词&#xff0c;并跳转到该单词的下一个出现位置。 行内跳转 0&#xff1a;跳转…

树莓派3B+的初步使用

树莓派3B的初步使用 一、安装使用树莓派系统1.将系统写入SD卡2.登录树莓派系统3.用C和Python编译运行hello world 一、安装使用树莓派系统 1.将系统写入SD卡 首先&#xff0c;准备至少16GB大小的SD卡以便装入树莓派系统&#xff0c;将SD卡插入读卡器后连接电脑准备给SD卡写入…

基于Windows11的DockerDesktop安装和布署方法简介

基于Windows11的DockerDesktop安装和布署方法简介 一、下载安装Docker docker 下载地址 https://www.docker.com/ Download Docker Desktop 选择Download for Winodws AMD64下载Docker Desktop Installer.exe 双点击 Docker Desktop Installer.exe 进行安装 测试Docker安装是…

文档处理控件Aspose.Total教程:使用 C# 将 Obsidian Markdown 转换为 OneNote

Obsidian 是一款广泛使用的基于 Markdown 的笔记应用程序。它提供了一种强大而有效的方式来构建和组织想法。用户可以无缝地连接他们的想法&#xff0c;提高清晰度和工作效率。另一方面&#xff0c;OneNote 是 Microsoft 的一款功能强大的笔记应用程序。它还可以帮助用户组织他…

第5章:vuex

第5章&#xff1a;vuex 1 求和案例 纯vue版2 vuex工作原理图3 vuex案例3.1 搭建vuex环境错误写法正确写法 3.2 求和案例vuex版细节分析源代码 4 getters配置项4.1 细节4.2 源代码 5 mapState与mapGetters5.1 总结5.2 细节分析5.3 源代码 6 mapActions与mapMutations6.1 总结6.2…

迷你世界脚本对象库接口:ObjectLib

对象库接口&#xff1a;ObjectLib 迷你世界 更新时间: 2023-04-26 20:21:09 具体函数名及描述如下: 序号 函数名 函数描述 1 getAreaData(...) 获取区域数据 2 getPositionData(...) 获取位置数据 3 getLivingData(...) 获取生物数据 4 getItemDat…

测试是如何跟进和管理 bug

测试在跟进和管理 Bug定位精确、问题反馈及时、修复闭环高效 三大关键环节中起到了至关重要的作用。Bug定位精确 是整个流程的基础&#xff0c;通过详细记录和复现问题&#xff0c;可以帮助开发团队迅速找出缺陷根源&#xff1b;而及时有效的反馈机制则确保问题不会被遗漏&…