python -- PyQt5(designer)中文详细教程(一)Qt的基本功能

news2024/11/15 18:30:00

在介绍PyQt5中文详细教程前,如有需要安装PyQt5的同学可以在此 PyQt5安装详细教程_M_Q_T的博客-CSDN博客参考安装,里面有详细的安装内容。

下一章内容python -- PyQt5(designer)中文详细教程(二)菜单和工具栏

​​​​​​​http://t.csdn.cn/QObiv

PyQt5中⽂教程

PyQt5-Chinese-tutorial

        PyQt5中⽂教程,翻译⾃ zetcode,项⽬地址:https://github.com/maicss/PyQt5-Chinese-tutoral。 这个教程⽐较好的地⽅是,能讲解每⼀段代码的含义。 虽然PyQt的函数命名已经⾮常语义化了,但是对于新⼿来说,有这⼀步还是更好的。

更新: 2017-8

        菜单和⼯具栏 【新增】 右键菜单 子菜单 勾选菜单

        事件和信号 【新增】 事件对象

        绘图 【新增】 贝塞尔曲线

PyQt5 简介

        本教程的⽬的是带领你⼊门PyQt5。教程内所有代码都在Linux上测试通过。PyQt4 教程是PyQt4的 教程,PyQt4是⼀个Python(同时⽀持2和3)版的Qt库。

关于 PyQt5

PyQt5 是Digia的⼀套Qt5应⽤框架与python的结合,同时⽀持2.x和3.x。本教程使⽤的是3.x。Qt库 由Riverbank Computing开发,是最强⼤的GUI库之⼀ ,官⽅⽹站www.riverbankcomputing.co.uk/news。

PyQt5是由⼀系列Python模块组成。超过620个类,6000函数和⽅法。能在诸如Unix、Windows和 Mac OS等主流操作系统上运⾏。PyQt5有两种证书,GPL和商业证书。

PyQt5类分为很多模块,主要模块有:

QtCore 包含了核⼼的⾮GUI的功能。主要和时间、⽂件与⽂件夹、各种数据、流、URLs、 mime类⽂件、进程与线程⼀起使⽤。

QtGui 包含了窗⼜系统、事件处理、2D图像、基本绘画、字体和⽂字类。

QtWidgets 包含了⼀系列创建桌⾯应⽤的UI元素。

QtMultimedia 包含了处理多媒体的内容和调⽤摄像头API的类。

QtBluetooth 包含了查找和连接蓝⽛的类。

QtNetwork QtNetwork包含了⽹络编程的类,这些⼯具能让TCP/IP和UDP开发变得更加⽅便和 可靠。

QtPositioning 包含了定位的类,可以使⽤卫星、WiFi甚⾄⽂本。

Enginio 包含了通过客户端进⼊和管理Qt Cloud的类。

QtWebSockets 包含了WebSocket协议的类。

QtWebKit 包含了⼀个基WebKit2的web浏览器。

QtWebKitWidgets 包含了基于QtWidgets的WebKit1的类。

QtXml 包含了处理xml的类,提供了SAX和DOM API的⼯具。

QtSvg 提供了显⽰SVG内容的类,Scalable Vector Graphics (SVG)是⼀种是⼀种基于可扩展标 记语⾔(XML),⽤于描述⼆维⽮量图形的图形格式。

QtSql 提供了处理数据库的⼯具。

QtTest QtTest提供了测试PyQt5应⽤的⼯具。

PyQt4和PyQt5的区别

PyQt5不兼容PyQt4。PyQt5有⼀些巨⼤的改进。但是,迁移并不是很难,两者的区别如下:

重新组合模块,⼀些模块已经被废弃(QtScript),有些被分为两个⼦模块(QtGui, QtWebKit)。

添加了新的模块,⽐如QtBluetooth, QtPositioning,和Enginio。

废弃了SINGAL()和SLOT()的调⽤⽅式,使⽤了新的信号和xx处理⽅式。

不再⽀持被标记为废弃的或不建议使⽤的API。

Hello New World!

本章学习Qt的基本功能

例1,简单的窗口

这个简单的⼩例⼦展⽰的是⼀个⼩窗⼜。但是我们可以在这个⼩窗⼜上⾯做很多事情,改变⼤⼩, 最⼤化,最⼩化等,这需要很多代码才能实现。这在很多应⽤中很常见,没必要每次都要重写这部 分代码,Qt已经提供了这些功能。PyQt5是⼀个⾼级的⼯具集合,相⽐使⽤低级的⼯具,能省略上 百⾏代码。

#!/usr/bin/python3

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

ZetCode PyQt5 tutorial

In this example, we create a simple

window in PyQt5.

author: Jan Bodnar

website: zetcode.com

Last edited: August 2017
"""

import sys

from PyQt5.QtWidgets import QApplication, QWidget

if __name__ == '__main__':

    app = QApplication(sys.argv)

    w = QWidget()

    w.resize(250, 150)

    w.move(300, 300)

    w.setWindowTitle('Simple')

    w.show()

    sys.exit(app.exec_())

这个简单的⼩例⼦展⽰的是⼀个⼩窗口。

程序预览:

        import sys

        from PyQt5.QtWidgets import QApplication, QWidget

这⾥引⼊了PyQt5.QtWidgets模块,这个模块包含了基本的组件。

        app = QApplication(sys.argv)

每个PyQt5应⽤都必须创建⼀个应⽤对象。sys.argv是⼀组命令⾏参数的列表。Python可以在shell里运行,这个参数提供对脚本控制的功能。

        w = QWidget()

QWidge控件是⼀个⽤户界⾯的基本控件,它提供了基本的应⽤构造器。默认情况下,构造器是没有父级的,没有⽗级的构造器被称为窗口(window)。

        w.resize(250, 150)

resize()⽅法能改变控件的⼤⼩,这⾥的意思是窗⼜宽250px,⾼150px。

        w.move(300, 300)

move()是修改控件位置的的⽅法。它把控件放置到屏幕坐标的(300, 300)的位置。注:屏幕坐标系 的原点是屏幕的左上⾓。

               w.setWindowTitle('Simple')

我们给这个窗⼜添加了⼀个标题,标题在标题栏展⽰(虽然这看起来是⼀句废话,但是后⾯还有各 种栏,还是要注意⼀下,多了就蒙了)。

        w.show() 

show()能让控件在桌⾯上显示出来。控件在内存⾥创建,之后才能在显⽰器上显⽰出来。

        sys.exit(app.exec_())   

最后,我们进⼊了应⽤的主循环中,事件处理器这个时候开始⼯作。主循环从窗⼜上接收事件,并 把事件传⼊到派发到应⽤控件⾥。当调⽤ exit() ⽅法或直接销毁主控件时,主循环就会结 束。 sys.exit() ⽅法能确保主循环安全退出。外部环境能通知主控件怎么结束。

exec_() 之所以有个下划线,是因为 exec 是⼀个Python的关键字。

例2,带窗口图标

窗口图标通常是显⽰在窗⼜的左上⾓,标题栏的最左边。下⾯的例⼦就是怎么⽤PyQt5创建⼀个这样 的窗口。

在某些环境下,图标显⽰不出来。如果你遇到了这个问题,看我在Stackoverfolw的回答

#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
ZetCode PyQt5 tutorial
This example shows an icon
in the titlebar of the window.
Author: Jan Bodnar
Website: zetcode.com
Last edited: August 2017
"""
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon


class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('1670057961739.jpg'))
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

这个简单的⼩例⼦展⽰的是⼀个⼩窗口。

程序预览:

 前⼀个例⼦是使⽤的过程式编程。Python还⽀持⾯向对象的编程:

class Example(QWidget):

         def __init__(self):

                super().__init__()

                .....

⾯向对象编程最重要的三个部分是类(class)、数据和⽅法。我们创建了⼀个类的调⽤,这个类继承 ⾃ QWidget 。这就意味着,我们调⽤了两个构造器,⼀个是这个类本⾝的,⼀个是这个类继承 的。 super() 构造器⽅法返回⽗级的对象。 __init__() ⽅法是构造器的⼀个⽅法。

        self.initUI()

使⽤ initUI() ⽅法创建⼀个GUI。

  # ⾃⼰准备⼀个图片例如JPG格式的网图1670057961739.jpg

        self.setGeometry(300, 300, 300, 220)

        self.setWindowTitle('Icon')

        self.setWindowIcon(QIcon('1670057961739.jpg'))

上⾯的三个⽅法都继承⾃ QWidget 类。 setGeometry() 有两个作⽤:把窗⼜放到屏幕上并且设置窗 ⼜⼤⼩。参数分别代表屏幕坐标的x、y和窗⼜⼤⼩的宽、⾼。也就是说这个⽅法是 resize() 和 move() 的合体。最后⼀个⽅法是添加了图标。先创建⼀个QIcon对象,然后接受⼀个路径作为参数 显⽰图标。

if __name__ == '__main__':

        app = QApplication(sys.argv)

        ex = Example()

        sys.exit(app.exec_())

应⽤和⽰例的对象创⽴,主循环开始。

程序预览:

例3,提示框

import sys
from PyQt5.QtWidgets import (QWidget, QToolTip, QPushButton, QApplication)
from PyQt5.QtGui import QFont
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        QToolTip.setFont(QFont('SansSerif', 10))
        self.setToolTip('This is a <b>QWidget</b> widget')
        btn = QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Tooltips')
        self.show()
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

在这个例⼦中,我们为应⽤创建了⼀个提示框。

        QToolTip.setFont(QFont('SansSerif', 10))

 这个静态方法设置了提示框的字体,我们使⽤了10px的SansSerif字体。

        self.setToolTip('This is a <b>QWidget</b> widget')

调⽤ setTooltip() 创建提示框可以使用富文本格式的内容。

         btn = QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')

创建⼀个按钮,并且为按钮添加了⼀个提示框。

         btn.resize(btn.sizeHint())
        btn.move(50, 50)

调整按钮大小,并让按钮在屏幕上显示出来, sizeHint() 方法提供了⼀个默认的按钮大小

程序预览:

例4,关闭窗口

        关闭⼀个窗口最直观的⽅式就是点击标题栏的那个叉,这个例⼦⾥,我们展⽰的是如何⽤程序关闭 ⼀个窗口。这⾥我们将接触到⼀点single和slots的知识。 本例使⽤的是QPushButton组件类。

         QPushButton(string text, QWidget parent = None)

text 参数是想要显示的按钮名称, parent 参数是放在按钮上的组件,在我们的例子里,这个参数 是 QWidget 。应用中的组件都是⼀层⼀层(继承⽽来的?)的,在这个层⾥,大部分的组件都有自己的父级,没有父级的组件,是顶级的窗口。

import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
from PyQt5.QtCore import QCoreApplication
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        qbtn = QPushButton('Quit', self)
        qbtn.clicked.connect(QCoreApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
# print(qbtn.sizeHint()) 
# 结果是PyQt5.QtCore.QSize(75,23),75和 23是这个btn的⻓和⾼
        qbtn.move(50, 50)
        self.setGeometry(300, 300, 350, 200)
        self.setWindowTitle('Quit button')
        self.show()
if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())

这⾥创建了⼀个点击之后就退出窗口的按钮。

        from PyQt5.QtCore import QCoreApplication

程序需要 QtCore 对象。

      qbtn = QPushButton('Quit', self)

创建⼀个继承自 QPushButton 的按钮。第⼀个参数是按钮的⽂本,第⼆个参数是按钮的父级组件, 这个例⼦中,父级组件就是我们创建的继承⾃ Qwidget 的 Example 类。

        qbtn.clicked.connect(QCoreApplication.instance().quit)

事件传递系统在PyQt5内建的single和slot机制⾥⾯。点击按钮之后,信号会被捕捉并给出既定的反 应。 QCoreApplication 包含了事件的主循环,它能添加和删除所有的事件, instance() 创建了⼀ 个它的实例。 QCoreApplication 是在 QApplication ⾥创建的。 点击事件和能终止进程并退出应用 的quit函数绑定在了⼀起。在发送者和接受者之间建⽴了通讯,发送者就是按钮,接受者就是应用 对象。

 程序预览:

例5,消息盒⼦

        默认情况下,我们点击标题栏的×按钮,QWidget就会关闭。但是有时候,我们修改默认⾏为。比如,如果我们打开的是⼀个⽂本编辑器,并且做了⼀些修改,我们就会想在关闭按钮的时候让⽤户进⼀步确认操作。

import sys
from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 350, 200)
        self.setWindowTitle('Message box')
        self.show()

    def closeEvent(self, event):  # 这是⼀个重载⽅法
        reply = QMessageBox.question(self, 'Message',
                                     "Are you sure to quit?",
                                     QMessageBox.Yes | QMessageBox.No,
                                     QMessageBox.No)
        # 第⼆个参数是No表示默认的是No被选中,
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

        如果关闭QWidget,就会产⽣⼀个QCloseEvent,并且把它传⼊到closeEvent函数的event参数中。 改变控件的默认⾏为,就是替换掉默认的事件处理。(重载了)

        reply = QMessageBox.question(self, 'Message',
                                     "Are you sure to quit?",
                                     QMessageBox.Yes | QMessageBox.No,
                                     QMessageBox.No)

        我们创建了⼀个消息框,上⾯有俩按钮:Yes和No.第⼀个字符串显⽰在消息框的标题栏,第⼆个字 符串显⽰在对话框,第三个参数是消息框的俩按钮,最后⼀个参数是默认按钮,这个按钮是默认选 中的,这个参数可以没有。返回值在变量 reply ⾥。

        if reply == QMessageBox.Yes:
                    event.accept()
        else:
                    event.ignore()                

 这⾥判断返回值,如果点击的是Yes按钮,我们就关闭组件和应⽤,否者就忽略关闭事件。

例6,窗口居中

import sys
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(350, 200)
        self.center()
        self.setWindowTitle('Center')
        self.show()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())


if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())

QtGui.QDesktopWidget 提供了⽤户的桌⾯信息,包括屏幕的⼤⼩。

        self.center()

这个⽅法是调⽤我们下⾯写的,实现对话框居中的⽅法。

        qr = self.frameGeometry()

获得主窗⼜所在的框架。print(qr)的结果是PyQt5.QtCore.QRect(0,0,249,149)

        cp = QDesktopWidget().availableGeometry().center()

获取显⽰器的分辨率,然后得到屏幕中间点的位置。

        qr.moveCenter(cp)

然后把主窗⼜框架的中⼼点放置到屏幕的中⼼位置。

        self.move(qr.topLeft())

然后通过move函数把主窗⼜的左上⾓移动到其框架的左上⾓,这样就把窗⼜居中了。

运行后对话框出现在屏幕中心位置,程序预览:

该专栏内容参考:https://download.csdn.net/download/weixin_41243677/12391339

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

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

相关文章

技术人员创业的第一步分析

概述&#xff1a;看完了本文&#xff0c;基本上可以了解确认自己所掌握的技术是否适合创业&#xff0c;如果不适合&#xff0c;不如找个大公司长期停留&#xff0c;也挺好的&#xff0c;免得折腾&#xff01;————————————————————前几天和一个朋友聊天&…

资源管理的部分

估算资源的活动的资源目录概述需求&#xff1a;设计思路实现思路分析1.估算的资源的资源的分解结构&#xff1a;获取资源2.虚拟团队3.CPO模型4.团队的5.资源日历建设团队团队一般成长规律形成 指导型管理风格认可奖励培训指标管理团队关于授权情商&#xff0c;领导力等控制资源…

排障必用的4款工具,帮你缩减排障时间!-网络工程师

Zen Load Balancer Zen Load Balancer是一个基于 Debian 的发行版&#xff0c;主要用于实现 TCP 的负载均衡。如果你在工作中遇到需要服务器负载均衡的功能&#xff0c;但又没有预算的时候&#xff0c;这个工具就能帮到你了。 可通过定制的脚本来检查后端的运行状态&#xff0c…

【java】3-获取线程引用与线程的属性

1.获取线程的引用 在创建一个线程之后&#xff0c;我们很有必要去获取当前线程实例的引用&#xff0c;以便能够观察到线程的一些属性&#xff0c;或是对于当前线程进行一系列的操作 调用Thread类的静态方法currentThread&#xff0c;我们便能拿到当前线程的引用 Thread.curr…

软件项目尾期,客户提新需求怎么办?

1、需求管理流程很关键 面对客户的需求要求&#xff0c;需求管理流程很关键。 在前期与用户签订合同时&#xff0c;可以增加一些相关条款&#xff0c;如限定用户提出需求变更的时间&#xff0c;规定何种情况的变更可以接受、拒绝接受或部分接受&#xff0c;还可以规定发生需求变…

[论文阅读] 颜色迁移-Linear Monge-Kantorovitch(MKL)

[论文阅读] 颜色迁移-Linear Monge-Kantorovitch(MKL) 文章: The Linear Monge-Kantorovitch Linear Colour Mapping for Example-Based Colour Transfer, [paper], [matlab代码] 1-算法原理 本文将颜色迁移变成数据分布的转换问题, 因而本文需要解决2个方面的问题, 如何描述…

Kettle BIGNUMBER TIMESTAMP 类型格式处理

一、问题描述 Kettle默认的格式化处理对BIGNUMBER列 ,把0 会强行写成0.0;对TIMESTAMP列强行写成如2021/12/31 16:51:55.000000000格式。从而引起不必要错误。 二、解决方案 最新的Kettle下载地址:https://udomain.dl.sourceforge.net/project/pentaho/Pentaho-9.3/client…

算法常见技巧 -快速幂及其相关应用

快速幂 题目 快速幂 典型题例&#xff1a; 给定 n 组 aia_iai​, bib_ibi​, pip_ipi​&#xff0c;对于每组数据&#xff0c;求出 aiba_i^baib​ modmodmod pip_ipi​的值。 示例 &#xff1a; 2 3 2 5 4 3 9思路 代码&#xff1a; /* 核心思路&#xff1a;反复平方法 …

【大数据入门核心技术-Hadoop】Hadoop非高可用集群搭建

目录 目录 一、Hadoop部署的三种方式 1、Standalone mode&#xff08;独立模式&#xff09; 2、Pseudo-Distributed mode&#xff08;伪分布式模式&#xff09; 3、Cluster mode&#xff08;集群模式&#xff09; 二、准备工作 1、/etc/hosts 2、关闭防火墙和禁用swap交…

计算机软考高项(信息系统项目管理师)、中项(系统集成项目管理工程师),统计师中级的一些备考经验

软考高项及中项 对于因各种原因需要拿工程系列职称的朋友&#xff0c;计算机软考高项和中项可能是性价比最高的副高级职称和中级职称&#xff0c;没有学历和工作经验的要求&#xff0c;是水平考试&#xff0c;即可以跳过初级、中级&#xff0c;直接考高级&#xff0c;也可以考…

[附源码]JAVA毕业设计九宫格日志网站(系统+LW)

[附源码]JAVA毕业设计九宫格日志网站&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&a…

# 智慧社区管理系统-核心信息管理-02物业收费管理

一 后端 1:entity package com.woniu.community.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data AllArgsConstructor NoArgsConstructor public class PropertyInfo {private int id;private int typeId;private Doub…

制作php的composer包

目录 1、初始化包 2、将代码推送到github远程仓库 3、为写好扩展包打上tag标签标记当前代码版本 4、将包发布到包管理平台 初始化包&#xff0c;生成 创建配置文件composer.json composer init composer init 按照引导就可以生成了 , 详细的引导解释如下 This command wil…

计算机图形学中的曲线问题——拉格朗日插值曲线绘制实践

拉格朗日插值曲线的绘制 限于篇幅&#xff0c;我们将在这篇文章中介绍拉格朗日插值曲线绘制实践&#xff0c;主文章链接&#xff1a; GGN_2015 计算机图形学中的曲线问题 在主文章中我们已经介绍了拉格朗日插值函数的绘制方法。给定一个函数必须通过的点的集合&#xff0c;保证…

学习spring源码的意义是什么呢?有什么高效的源码学习方式吗?

这不是准备跳槽了&#xff0c;所以最近摸鱼比较多一些&#xff0c;老大默许了&#xff0c;我觉得我老大还是很好的。也在网上看了一些资料&#xff0c;但是&#xff0c;我发现很多讲解注解的时候&#xff0c;对于一些可以直接点击源码查看的内容讲解的占多数&#xff0c;但是授…

【学习笔记】《Python深度学习》第六章:深度学习用于文本和序列

文章目录1 处理文本数据1.1 单词和字符的one-hot编码1.2 使用词嵌入1.3 从原始文本到词嵌入2 循环神经网络2.1 Keras中的循环层2.2 LSTM层和GRU层2.3 实例&#xff1a;使用 LSTM 进行 IMDB 电影评论分类3 循环神经网络的高级用法3.1 温度预测问题3.2 准备数据3.3 基于常识、非机…

eclipse导入svn项目,项目有红色的感叹号/叉号

eclipse导入svn项目&#xff0c;项目左下角有红色的感叹号/叉号 1.首先调出Problems ( window -> show view-> Problems ) 查看报错信息 其次&#xff0c;看看Project是否开启了项目自动构建&#xff08;Build Automatically&#xff09; 2.根据报错信息逐一解决 3.…

【Linux内核代码分析1】Linux时间子系统及HRTIMER实现

Linux时间子系统软件架构 &#xff08;1&#xff09;嵌入式设备需要较好的电源管理策略。传统的linux会有一个周期性的时钟&#xff0c;即便是系统无事可做的时候也要醒来&#xff0c;这样导致系统不断的从低功耗&#xff08;idle&#xff09;状态进入高功耗的状态。这样的设计…

从 Nauty 数据结构出发认识群论

在阅读本文前&#xff0c;强烈建议有志入门群论的同学观看 3blue1brown 魔群 视频。 对于计算机方向同学&#xff0c;可以尝试从数据结构的角度理解。本文主要基于文档、网站 Nauty 和 Nauty 的 python binding, pynauty(github.com) 展开。 Nauty 数据结构 本小节截选自 Na…

字节跳动虚拟数字人技术与应用

导读&#xff1a;火山引擎正在打造完善的虚拟数字人技术和应用体系&#xff0c;那么火山引擎是如何定义虚拟数字人的呢&#xff1f;火山引擎 2D 虚拟数字人和 3D 数字人采用了怎样先进的技术&#xff1f;火山引擎数字人有哪些应用和前景展望&#xff1f;今天我们就来一起探秘火…