深入了解WPF控件:基础概念与用法(三)

掌握WPF控件:熟练常用属性(三)

DataGrid

  • 用于显示和编辑数据的表格控件。它可以从多种数据源(如SQL数据库、LINQ查询或任何其他可绑定的数据源)中显示和编辑数据,支持排序、筛选、分页等功能。
DataGrid基本相关属性
基础属性描述
ItemsSource用来DataGrid中显示的数据源,可以直接绑定到一个集合对象,也可以手动创建列并绑定到集合中的属性。
IsReadOnly用来设置DataGrid是否为只读,默认为false。如果设置为只读,用户将无法编辑单元格。
HeadersVisibility用来设置是否显示行头和列头。默认值为 All,可选值有:None、Column、Row、All。
ClipboardCopyMode用来获取或设置一个值,该值指示如何将内容复制到剪贴板。可选值包括None、ExcludeHeader、IncludeHeader和All。比如是否可以将数据从 DataGrid 控件复制到剪贴板,以及是否包含列标题值。
CellStyle用来获取或设置应用来DataGrid 中所有单元格的样式。
GridLinesVisibility获取或设置一个值,该值指示显示哪些网格线。可选值有:All(水平垂直)、Horizontal(水平)、None(无),Vertical(垂直)
HorizontalGridLinesBrush用来获取或设置水平网格线的笔刷。
VerticalGridLinesBrush用来获取或设置用于绘制垂直网格线的画笔。
HorizontalScrollBarVisibility用来获取或设置水平滚动条的显示方式。可选值:Auto(需要时显示)、Visible(始终显示)、Hidden(始终不显示)
VerticalScrollBarVisibility获取或设置一个值,该值指示垂直滚动条在 DataGrid 中的显示方式。可选值:Auto(需要时显示)、Visible(始终显示)、Hidden(始终不显示)
  • 下面实现一个基本的DataGrid列表,实现绑定数据
 <Grid>
     <Grid.RowDefinitions>
         <RowDefinition></RowDefinition>
         <RowDefinition></RowDefinition>
         <RowDefinition></RowDefinition>
     </Grid.RowDefinitions>
     <!--第一个自动生成列,设置列宽为100-->
     <DataGrid Grid.Row="0" x:Name="myDataGrid" ColumnWidth="100"></DataGrid>

     <!--第二个设置不自动生成列 AutoGenerateColumns=False,并且设置列宽为100-->
     <!--设置复制时包括列头ClipboardCopyMode ="IncludeHeader"-->
     <DataGrid Grid.Row="1" x:Name="myDataGrid1"  AutoGenerateColumns="False"   ColumnWidth="100" ClipboardCopyMode ="IncludeHeader">
         <DataGrid.Columns>
             <!-- 定义列 -->
             <DataGridTextColumn Header="ID" Binding="{Binding Id}"  />
             <DataGridTextColumn Header="姓名" Binding="{Binding Name}" />
             <DataGridTextColumn Header="年龄" Binding="{Binding Age}" />
         </DataGrid.Columns>
     </DataGrid>
     <StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" Height="40">
         <Button Content="隐藏/显示行头和列头" Click="Button_Click"></Button>
         <Button Content="设置/取消单元格样式" Click="Button_Click_1" Margin="10,0"></Button>
         <Button Content="设置/取消列头样式" Click="Button_Click_2" Margin="10,0"></Button>
         <Button Content="设置/取消网格线" Click="Button_Click_3" Margin="10,0"></Button>
     </StackPanel>
 </Grid>
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Media;

namespace WpfCommonControls
{
    /// <summary>
    /// DataGrid.xaml 的交互逻辑
    /// </summary>
    public partial class DataGrid : Window
    {
        static Random random = new Random();
        public DataGrid()
        {
            InitializeComponent();
            LoadData();
            // 设置滚动条始终不显示
            myDataGrid.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden;
            //设置垂直滚动条必要时显示
            myDataGrid.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
        }

        private void LoadData()
        {

            List<PersonModel> list = new List<PersonModel>
            {
                new PersonModel { Id=random.Next(1, 10001), Name = "张三", Age = random.Next(18, 61) },
                new PersonModel {Id=random.Next(1, 10001), Name = "李四", Age = random.Next(18, 61) },
                new PersonModel {Id=random.Next(1, 10001), Name = "王二", Age = random.Next(18, 61) },
                new PersonModel {Id=random.Next(1, 10001), Name = "麻子", Age = random.Next(18, 61) }
            };
            // 绑定第一个DataGrid
            myDataGrid.ItemsSource = list;
            // 设置第二个DataGrid的数据上下文
            myDataGrid1.ItemsSource = list;
        }

        public class PersonModel
        {
            /// <summary>
            /// ID
            /// </summary>
            public int Id { get; set; }

            /// <summary>
            /// 姓名
            /// </summary>
            public string? Name { get; set; }

            /// <summary>
            /// 年龄
            /// </summary>
            public int Age { get; set; }
        }


        private void Button_Click(object sender, RoutedEventArgs e)
        {
            // 隐藏/显示行和列头
            myDataGrid.HeadersVisibility = myDataGrid.HeadersVisibility== DataGridHeadersVisibility.None? DataGridHeadersVisibility.All: DataGridHeadersVisibility.None;
            myDataGrid1.HeadersVisibility = myDataGrid1.HeadersVisibility == DataGridHeadersVisibility.None ? DataGridHeadersVisibility.All : DataGridHeadersVisibility.None;
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            if (myDataGrid.Columns[0].CellStyle != null || myDataGrid1.Columns[0].CellStyle != null)
            {
                myDataGrid.Columns[0].CellStyle = null;  // 取消第一列的单元格样式
                myDataGrid1.Columns[0].CellStyle = null;   // 取消第一列的单元格样式
            }
            else
            {
                //设置单元格样式
                Style cellStyle = new Style(typeof(DataGridCell));
                cellStyle.Setters.Add(new Setter(BackgroundProperty, Brushes.LightBlue));  // 设置背景
                cellStyle.Setters.Add(new Setter(ForegroundProperty, Brushes.Black));   // 设置字体颜色
                cellStyle.Setters.Add(new Setter(BorderBrushProperty, Brushes.DarkBlue));  // 设置边框颜色
                cellStyle.Setters.Add(new Setter(BorderThicknessProperty, new Thickness(2))); //设置边框线
                myDataGrid.Columns[0].CellStyle = cellStyle;  // 设置第一列的单元格样式
                myDataGrid1.Columns[0].CellStyle = cellStyle; // 设置第一列的单元格样式
            }
            
        }

        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            if (myDataGrid.ColumnHeaderStyle != null || myDataGrid1.ColumnHeaderStyle != null)
            {
                myDataGrid.ColumnHeaderStyle = null;  // 取消列头样式
                myDataGrid1.ColumnHeaderStyle = null;   // 取消列头样式
            }
            else
            {
                // 设置列头样式
                Style cellStyle = new Style(typeof(DataGridColumnHeader));
                cellStyle.Setters.Add(new Setter(BackgroundProperty, Brushes.LightBlue));  // 设置背景
                cellStyle.Setters.Add(new Setter(ForegroundProperty, Brushes.Black));   // 设置字体颜色
                cellStyle.Setters.Add(new Setter(BorderBrushProperty, Brushes.DarkBlue));  // 设置边框颜色
                cellStyle.Setters.Add(new Setter(BorderThicknessProperty, new Thickness(2))); //设置边框线
                myDataGrid.ColumnHeaderStyle = cellStyle;  // 设置列头样式
                myDataGrid1.ColumnHeaderStyle = cellStyle; // 设置列头样式
            }

               
        }

        private void Button_Click_3(object sender, RoutedEventArgs e)
        {
            // 设置/取消网格线
            myDataGrid.GridLinesVisibility = myDataGrid.GridLinesVisibility == DataGridGridLinesVisibility.None ? DataGridGridLinesVisibility.All : DataGridGridLinesVisibility.None;
            myDataGrid1.GridLinesVisibility = myDataGrid1.GridLinesVisibility == DataGridGridLinesVisibility.None ? DataGridGridLinesVisibility.All : DataGridGridLinesVisibility.None;

        }
    }
}


DataGrid基本信息

DataGrid行相关属性
行相关属性描述
AlternatingRowBackground用来获取或设置交替行背景颜色。
AreRowDetailsFrozen用来控制是否冻结行详细信息部分的内容。当AreRowDetailsFrozen属性设置为true时,表示行详细信息部分的内容不会水平滚动出视图,即被冻结。这样可以提高性能,特别是在处理大量数据时,因为行详细信息部分的内容不需要随着行的滚动而重新绘制。通常该属性的默认值为false。
CanUserAddRows用来获取或设置一个值(默认为true),该值指示用户是否可在 DataGrid 中添加新行。
CanUserDeleteRows用来获取或设置一个值(默认为true),该值指示用户是否可从 DataGrid 中删除行。
CanUserResizeRows用来获取或设置一个值(默认为true),该值指示用户是否可以使用鼠标调整行的高度。
CurrentItem用来获取或设置当前选中的项。
RowDetailsTemplate用来获取或设置显示行详细信息的模板。
RowDetailsVisibilityMode用来获取或设置一个值,该值指示何时显示行的详细信息部分。
SelectedIndex用来获取或设置当前选中行的索引。
SelectedItem用来获取或设置当前选中行绑定的数据项。
RowBackground和RowStyle用来获取或设置填充行的背景颜色和行样式。
MinRowHeight用来获取或设置 DataGrid 中行和标题的最小高度约束。它是个double 类型值。
RowHeight用来获取或设置所有行的建议高度。
RowValidationRules用来获取用于验证每行中的数据的规则。
  • 下面写一个例子
```<Grid>
     <Grid.RowDefinitions>
         <RowDefinition></RowDefinition>
         <RowDefinition></RowDefinition>
     </Grid.RowDefinitions>
     <!--设置 AlternatingRowBackground交替行的背景颜色,如总行数小于2时,则需要AlternationCount 设置为2-->
     <!--设置CanUserAddRows =false 禁止添加行,设置为false 后,底部不会多出一个空行-->
     <!--设置CanUserDeleteRows=false会禁止delete键删除行数据-->
     <!--设置CanUserResizeRows为false,禁止拖动设置行高,鼠标移动到行的最左边,鼠标不会出现可以拖动样式-->

     <!--设置最小行高为MinRowHeight=30.0,注意它的类型为double类型 -->
     <DataGrid  Grid.Row="0" x:Name="myDataGrid"  AutoGenerateColumns="False"   ColumnWidth="100" AlternatingRowBackground="LightBlue" AlternationCount ="2" CanUserAddRows ="False" CanUserDeleteRows="False" CanUserResizeRows="False" MinRowHeight="30.0">
         <DataGrid.Columns>
             <!-- 定义列 -->
             <DataGridTextColumn Header="ID" Binding="{Binding Id}"  />
             <DataGridTextColumn Header="姓名" Binding="{Binding Name}" />
             <DataGridTextColumn Header="年龄" Binding="{Binding Age}" />
         </DataGrid.Columns>
     </DataGrid>
     <Button  Grid.Row="1" Height="50" Width="180" Content="设置/或获取当前选中的行" Click="Button_Click"></Button>
 </Grid>
```using System.ComponentModel;
using System.Windows;

namespace WpfCommonControls
{
   /// <summary>
   /// RowDataGrid.xaml 的交互逻辑
   /// </summary>
   public partial class RowDataGrid : Window
   {
       static Random random = new Random();
       public RowDataGrid()
       {
           InitializeComponent();
           LoadData();
       }

       private void LoadData()
       {

           List<PersonModel> list = new List<PersonModel>
           {
               new PersonModel { Id=random.Next(1, 10001), Name = "张三", Age = random.Next(18, 61) },
               new PersonModel {Id=random.Next(1, 10001), Name = "李四", Age = random.Next(18, 61) },
               new PersonModel {Id=random.Next(1, 10001), Name = "王二", Age = random.Next(18, 61) },
               new PersonModel {Id=random.Next(1, 10001), Name = "麻子", Age = random.Next(18, 61) }
           };
           // 绑定DataGrid
           myDataGrid.ItemsSource = list;
       }

       public class PersonModel: INotifyPropertyChanged
       {
           /// <summary>
           /// ID
           /// </summary>
          private int id;
           public int Id { get { return id; } set {
                   if (id != value)
                   {
                       id = value;
                       OnPropertyChanged("Id");
                   }
               }
           }

           /// <summary>
           /// 姓名
           /// </summary>
           private string? name;
           public string? Name {
               get { return name; }
               set{
                   if (name != value)
                   {
                       name = value;
                       OnPropertyChanged("Name");
                   }
               }
           }

           /// <summary>
           /// 年龄
           /// </summary>
           private int age;
           public int Age
           {
               get { return age; }
               set
               {
                   if (age != value)
                   {
                       age = value;
                       OnPropertyChanged("Age");
                   }
               }
           }

           // 实现INotifyPropertyChanged接口
           public event PropertyChangedEventHandler? PropertyChanged;

           // 当属性值更改时,触发此方法
           protected virtual void OnPropertyChanged(string propertyName)
           {
               PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
           }
       }

       private void Button_Click(object sender, RoutedEventArgs e)
       {

           //要想修改当前行必须要实现INotifyPropertyChanged接口

           var currItem = myDataGrid.SelectedItem as PersonModel;
           if (currItem == null)
           {
               MessageBox.Show("请选中指定行");
               return;
           }
               
           currItem.Id = 111;
           currItem.Name = "手动设置行";
           currItem.Age = 100;
           // 在UI线程中设置新的SelectedItem
           Application.Current.Dispatcher.Invoke(() =>
           {
               //myDataGrid.SelectedItem = currItem;
               //或者
               myDataGrid.CurrentItem = currItem; // 将当前选中项设置为item
           });
           

       }
   }
}

DataGrid行属性

DataGrid列相关属性
列相关属性描述
AutoGenerateColumns用来决定是否自动生成列。如果设置为true,DataGrid将自动按列名生成列,并将列绑定到集合中的属性。默认值为true。
CanUserReorderColumns用来获取或设置一个值,该值指示用户是否可以通过使用鼠标拖动列标题来更改列显示顺序。
CanUserResizeColumns用来获取或设置一个值,该值指示用户是否可以使用鼠标调整列的宽度。
CanUserSortColumns用来获取或设置一个值,该值指示用户是否可以通过单击列标题对列进行排序。
ColumnHeaderHeight用来获取或设置列标题行的高度。该值为double 类型。
ColumnHeaderStyle用来获取或设置列头的样式。
Columns用来获取一个集合,其中包含 DataGrid 中的所有列。
CurrentColumn用来获取或设置包含当前单元格的列。
ColumnWidth用来获取或设置列的宽度。
MaxColumnWidth用来获取或设置DataGrid的最大列宽。
MinColumnWidth用来获取或设置DataGrid的最小列宽。
  • 下面来写个例子
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>


    <!--设置AutoGenerateColumns为false,不自动生成列-->
    <!--设置CanUserReorderColumns为false,不允许拖动列-->
    <!--设置CanUserResizeColumns为false,不允许拖动列调整宽度,鼠标放上去不出现可拖动图标-->
    <!--设置CanUserSortColumns为false,禁止点击列头,进行列排序-->
    <!--设置ColumnHeaderHeight为30.0 标题行高度,注意值为double 类型-->
    <!--设置MaxColumnWidth为80.0,最大列宽-->
    <DataGrid  Grid.Row="0" x:Name="myDataGrid"  AutoGenerateColumns="False"   ColumnWidth="100" AlternatingRowBackground="LightBlue" AlternationCount ="2" CanUserAddRows ="False" CanUserDeleteRows="False" CanUserResizeRows="False" MinRowHeight="30.0" CanUserReorderColumns ="False" CanUserResizeColumns="False" CanUserSortColumns="False" ColumnHeaderHeight="30.0" MaxColumnWidth="80.0">
        <DataGrid.Columns>
            <!-- 定义列 -->
            <DataGridTextColumn Header="ID" Binding="{Binding Id}"  />
            <DataGridTextColumn Header="姓名" Binding="{Binding Name}" />
            <DataGridTextColumn Header="年龄" Binding="{Binding Age}" />
        </DataGrid.Columns>
    </DataGrid>

    <Button Grid.Row="1" Height="50" Width="150" Content="设置/取消标题行样式" Click="Button_Click"></Button>
</Grid>
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls.Primitives;
using System.Windows.Media;

namespace WpfCommonControls
{
    /// <summary>
    /// CellDataGrid.xaml 的交互逻辑
    /// </summary>
    public partial class CellDataGrid : Window
    {
        static Random random = new Random();
        public CellDataGrid()
        {
            InitializeComponent();
            LoadData();
        }
 
        private void LoadData()
        {

            List<PersonModel> list = new List<PersonModel>
            {
                new PersonModel { Id=random.Next(1, 10001), Name = "张三", Age = random.Next(18, 61) },
                new PersonModel {Id=random.Next(1, 10001), Name = "李四", Age = random.Next(18, 61) },
                new PersonModel {Id=random.Next(1, 10001), Name = "王二", Age = random.Next(18, 61) },
                new PersonModel {Id=random.Next(1, 10001), Name = "麻子", Age = random.Next(18, 61) }
            };
            // 绑定DataGrid
            myDataGrid.ItemsSource = list;
        }

        public class PersonModel : INotifyPropertyChanged
        {
            /// <summary>
            /// ID
            /// </summary>
            private int id;
            public int Id
            {
                get { return id; }
                set
                {
                    if (id != value)
                    {
                        id = value;
                        OnPropertyChanged("Id");
                    }
                }
            }

            /// <summary>
            /// 姓名
            /// </summary>
            private string? name;
            public string? Name
            {
                get { return name; }
                set
                {
                    if (name != value)
                    {
                        name = value;
                        OnPropertyChanged("Name");
                    }
                }
            }

            /// <summary>
            /// 年龄
            /// </summary>
            private int age;
            public int Age
            {
                get { return age; }
                set
                {
                    if (age != value)
                    {
                        age = value;
                        OnPropertyChanged("Age");
                    }
                }
            }

            // 实现INotifyPropertyChanged接口
            public event PropertyChangedEventHandler? PropertyChanged;

            // 当属性值更改时,触发此方法
            protected virtual void OnPropertyChanged(string propertyName)
            {
                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (myDataGrid.ColumnHeaderStyle != null)
            {
                myDataGrid.ColumnHeaderStyle = null;  // 取消列头样式
            }
            else
            {
                // 设置列头样式
                Style cellStyle = new Style(typeof(DataGridColumnHeader));
                cellStyle.Setters.Add(new Setter(BackgroundProperty, Brushes.LightPink));  // 设置背景
                cellStyle.Setters.Add(new Setter(ForegroundProperty, Brushes.Black));   // 设置字体颜色
                cellStyle.Setters.Add(new Setter(BorderBrushProperty, Brushes.DarkBlue));  // 设置边框颜色
                cellStyle.Setters.Add(new Setter(BorderThicknessProperty, new Thickness(1))); //设置边框线
                myDataGrid.ColumnHeaderStyle = cellStyle;  // 设置列头样式
            }
        }
    }
}

DataGrid列属性

公众号“点滴分享技术猿

关注

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024全新开发API接口调用管理系统网站源码 附教程

2024全新开发API接口调用管理系统网站源码 附教程 用layui框架写的 个人感觉很简洁 方便使用和二次开发

Android 11.0 mtp模式下连接pc后显示的文件夹禁止删除copy重命名功能实现

1.前言 在11.0的系统rom定制化开发中,usb连接pc端的时候有好几种模式,在做otg连接pc端的时候,改成mtp模式的时候,在pc端可以看到产品设备 的显示的文件夹的内容,对于产品设备里面的文件在pc端禁止做删除重命名拷贝等操作功能的实现 2.mtp模式下连接pc后显示的文件夹禁止删…

项目:基于OpenCV+百度云人脸识别项目

一.项目框架 基于OpenCV和百度云人脸识别的项目可以使用以下的框架来实现&#xff1a; 数据采集和预处理&#xff1a;使用OpenCV来采集摄像头或读取图像文件&#xff0c;并对图像进行预处理操作&#xff0c;例如裁剪、调整大小、灰度化等。 人脸检测&#xff1a;使用OpenCV的人…

MySQL多表查询(改进版)

1.创建student和score表 mysql> CREATE TABLE student (-> id INT(10) NOT NULL UNIQUE PRIMARY KEY ,-> name VARCHAR(20) NOT NULL ,-> sex VARCHAR(4) ,-> birth YEAR,-> department VARCHAR(20) ,-> address VARCHAR(50)-> ); Query O…

Leetcode2707. 字符串中的额外字符

Every day a Leetcode 题目来源&#xff1a;2707. 字符串中的额外字符 解法1&#xff1a;动态规划 题目要求将字符串 s 分割成若干个互不重叠的子字符串&#xff08;以下简称为子串&#xff09;&#xff0c;同时要求每个子串都必须在 dictionary 中出现。一些额外的字符可能…

uniapp使用Android Studio离线打包

环境准备 Android Studio&#xff1a; 下载地址APP离线SDK下载&#xff1a; 下载地址; 目前我使用得是“Android-SDK3.8.7.81902_20230704”&#xff1b;需要与hbuider版本配套使用。Appkey: 参考我 以上三步准备好后&#xff0c;进行接下来的不住&#xff1a; 准备工程 导…

SpringBoot中整合ElasticSearch快速入门以及踩坑记录

场景 若依前后端分离版手把手教你本地搭建环境并运行项目&#xff1a; 若依前后端分离版手把手教你本地搭建环境并运行项目_本地运行若依前后端分离-CSDN博客 参考上面搭建项目。 ElaticSearch Elasticsearch 是java开发的&#xff0c;基于 Lucene 的搜索引擎。它提供了一…

Spring中的事件机制

文章目录 摘要正文jdk事件Spring事件Spring事件监听ApplicationContext主动监听注解监听Bean监听 Spring事件发布 总结 摘要 在这篇文章我们将介绍Spring的事件机制&#xff0c;包括Spring内置事件、自定义事件、事件监听、事件发布、事件广播机制、事件异常处理等内容。Sprin…

STM32 TIM输出比较、PWM波形

单片机学习&#xff01; 目录 一、输出比较简介 二、PWM简介 三、输出比较通道 3.1通用定时器的输出比较部分电路 3.2高级定时器的输出比较部分电路 四、输出模式控制器 五、PWM基本结构 六、PWM参数计算 总结 前言 文章讲述STM32定时器的输出比较功能&#xff0c;它主…

K8S中使用helm安装MinIO

注意事项 使用helm部署MinIO分为两部分 helm部署MinIO operator&#xff0c;用来管理tenant&#xff08;K8S集群中只能部署一个&#xff09;helm部署MinIO tenant&#xff0c;真实的MinIO Cluster&#xff08;K8S集群中可以部署多个&#xff09; 使用helm部署到K8S集群&…

网工每日一练(1月15日)

1.某计算机系统由下图所示的部件构成&#xff0c;假定每个部件的千小时可靠度为R&#xff0c;则该系统的千小时的可靠度为 ( D ) 。 2.以下IP地址中&#xff0c;属于网络 201.110.12.224/28 的主机IP是&#xff08; B &#xff09;。 A.201.110.12.224 B.201.110.12.238 C.20…

【文本到上下文 #5】:RNN、LSTM 和 GRU

一、说明 欢迎来到“完整的 NLP 指南&#xff1a;文本到上下文 #5”&#xff0c;这是我们对自然语言处理 &#xff08;NLP&#xff09; 和深度学习的持续探索。从NLP的基础知识到机器学习应用程序&#xff0c;我们现在深入研究了神经网络的复杂世界及其处理语言的深刻能力。 在…

如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face

Hugging Face是一个机器学习&#xff08;ML&#xff09;和数据科学平台和社区&#xff0c;帮助用户构建、部署和训练机器学习模型。它提供基础设施&#xff0c;用于在实时应用中演示、运行和部署人工智能&#xff08;AI&#xff09;。用户还可以浏览其他用户上传的模型和数据集…

pip与pip3的区别

pip 和 pip3 都是 Python 的包管理工具&#xff0c;用于安装第三方库。它们的区别在于&#xff1a; pip 是 Python 2 和 Python 3 通用的包管理工具&#xff0c;它可以安装适用于 Python 2 和 Python 3 的库。pip3 是专门用于 Python 3 的包管理工具&#xff0c;它只能安装适用…

2023.12.30性质

若连通图上各边的权值均不相同&#xff0c;则该图的最小生成树是唯一的。 由k算法&#xff0c;即由边从小到大的顺序构造&#xff0c;如果边权值各不相同&#xff0c;那么构造出来的最小生成树唯一&#xff0c;就是唯一的顺序&#xff0c;从小到大 关于带权无向图的最小生成…

2024年信息安全不完全预测

不需要专家预言就能知道&#xff0c;计算机安全将在2024年出现在新闻中&#xff0c;而且可能不是什么好事。但2024年网络犯罪分子将如何试图突破防御并窃取有价值的数据&#xff0c;值得我们看一看安全专家们的看法和预测。 不需要专家预言就能知道&#xff0c;计算机安全将在…

<Linux> 进程间通信

目录 前言&#xff1a; 一、进程间通信 &#xff08;一&#xff09;进程间通信目的 &#xff08;二&#xff09;进程通信的要求 &#xff08;三&#xff09;进程间通信分类 二、管道 &#xff08;一&#xff09;什么是管道 &#xff08;二&#xff09;基本原理 &#…

SQL性能分析

SQL性能分析 1、SQL执行频率 ​ MySQL 客户端连接成功后&#xff0c;通过 show [session|global] status 命令可以提供服务器状态信 息。通过如下指令&#xff0c;可以查看当前数据库的INSERT、UPDATE、DELETE、SELECT的访问频次&#xff1a; -- session 是查看当前会话 ; …

20240115如何在线识别俄语字幕?

20240115如何在线识别俄语字幕&#xff1f; 2024/1/15 21:25 百度搜索&#xff1a;俄罗斯语 音频 在线识别 字幕 Bilibili&#xff1a;俄语AI字幕识别 音视频转文字 字幕小工具V1.2 BING&#xff1a;音视频转文字 字幕小工具V1.2 https://www.bilibili.com/video/BV1d34y1F7…

python爬虫实战(10)--获取本站热榜

1. 需要的类库 import requests import pandas as pd2. 分析 通过分析&#xff0c;本站的热榜数据可以直接通过接口拿到&#xff0c;故不需要解析标签&#xff0c;请求热榜数据接口 url "https://xxxt/xxxx/web/blog/hot-rank?page0&pageSize25&type" #本…