小白白也能学会的 PyQt 教程 —— 图像类及图像相关基础类介绍

news2024/9/9 1:33:48

文章目录

    • 〇、前言
    • 一、PyQt 中的图像类
      • 1、图像类简介
      • 2、图像类转换
        • ① 常用类转换(QPixmap、QImage、QIcon)
        • ② QBitmap、QBrush、QPen 转换为 QPixmap 或 QImage
        • ③ QByteArray 与 QPixmap、QImage 的互转
        • ④ numpy 与 QImage 互转
    • 二、图像显示组件
      • 1、使用 QLabel 显示图像
      • 2、使用 QGraphicsView 展示图像和图形场景
      • 3、其他可用的图像显示组件和控件
        • ① 使用QPainter绘制图像:
        • ② 使用QSS加载图片为窗口的背景:
        • ③ 使用QGraphicsPixmapItem显示图像
    • 三、图像操作与转换
      • 1、缩放图像
      • 2、剪裁图像
      • 3、旋转图像
      • 4、调整亮度和对比度
      • 5、图像滤镜
      • 6、转换图像格式
    • ⭐写在最后

〇、前言

图,貌似是一个好看的 UI 中必不可少的东西,精美的 UI 中不可避免的会使用一些奇特的各种图像元素来提升用户体验。对于开发者而言,如何在应用程序中有效地显示和处理图像成为一个重要的课题。在Python中,PyQt库是一个强大而灵活的选择,它提供了丰富的图像处理类和功能。

PyQt中的图像类和组件使开发者能够加载、保存、绘制和转换图像,从而实现各种图像操作。其中,常用的图像类包括QPixmap、QImage和QIcon。QPixmap和QImage提供了基本的图像处理功能,可以加载、保存、缩放、剪裁和绘制图像。QIcon则用于在GUI应用程序中显示图标,可以加载图像文件并在按钮、菜单等控件上展示图标。

此外,PyQt还提供了其他一些与图像相关的类和组件,如QBrush、QPen和QPainter,它们可以帮助开发者实现更高级的图像操作,如填充样式、画笔样式以及绘制各种图形元素等。而使用QGraphicsView和QGraphicsScene组件可以实现更复杂的图形场景展示和交互,适用于绘图、图表和地图等应用领域。

通过PyQt提供的丰富图像类和组件,开发者可以轻松地在应用程序中展示精美的图像,提升用户界面的吸引力和可用性。无论是创建一个简单的图像展示功能,还是实现复杂的图形交互,PyQt都为开发者提供了强大而灵活的工具。在接下来的部分,我将简单介绍一下图像类及图像相关类,方便大家在学习的时候打开文章进行参考

一、PyQt 中的图像类

1、图像类简介

PyQt 中提供了许多用于处理图像的类和功能,来用于处理图像加载、保存、绘制和转换等操作。下面是PyQt中比较常用的图像类:

  1. QPixmap:用于处理图像的基本类。它可以加载、保存、缩放、剪裁和绘制图像。
  2. QImage:与QPixmap类似,也用于处理图像。它支持更多的图像格式和操作,包括像素级别的访问和修改。
  3. QIcon:用于在GUI应用程序中显示图标的类。它可以加载图像文件,并在按钮、菜单等控件上显示图标。
  4. QPicture:用于记录和重播绘图操作的类。它可以存储绘制图形的指令,然后在需要时进行重绘。
  5. QImageReader:用于读取不同格式的图像文件的类。它可以加载各种图像文件,并将其转换为QImage或QPixmap对象。
  6. QImageWriter:用于将图像写入不同格式的图像文件的类。它可以将QImage或QPixmap对象保存为各种图像文件。

此外,PyQt还提供了其他一些与图像相关的类和功能,它们提供了更多高级的图形处理功能,例如绘制、渲染、填充等。它们可以帮助你在PyQt应用程序中更灵活地处理和展示图像和图形元素:

  1. QBitmap:用于创建位图的类。它可以用于创建透明或非透明的图像,通常用于制作形状非矩形的控件。
  2. QBrush:用于描述绘画操作中的填充样式的类。它可以用于填充图形元素,如矩形、椭圆、多边形等。
  3. QPen:用于描述绘画操作中的画笔样式的类。它可以用于指定绘制图形边框的颜色、宽度、样式等。
  4. QPainter:用于绘制图形和图像的类。它提供了各种绘制图形元素的方法,如绘制直线、矩形、椭圆、文本等。
  5. QGraphicsView:用于显示和交互大型图形场景的类。它可以用于展示和操作复杂的图形,如绘图、图表、地图等。
  6. QOpenGLWidget:用于在GUI应用程序中显示OpenGL渲染的图形的类。它提供了与OpenGL集成的功能,可以显示和交互3D图形。

2、图像类转换

① 常用类转换(QPixmap、QImage、QIcon)

  1. QPixmap 转换为 QImage:
pixmap = QPixmap("image.png")  # 创建一个 QPixmap 对象
image = pixmap.toImage()  # 转换为 QImage 对象
  1. QImage 转换为 QPixmap:
image = QImage("image.png")  # 创建一个 QImage 对象
pixmap = QPixmap.fromImage(image)  # 转换为 QPixmap 对象
  1. QImage 转换为 QIcon:
image = QImage("image.png")  # 创建一个 QImage 对象
icon = QIcon(QPixmap.fromImage(image))  # 转换为 QIcon 对象
  1. QPixmap 转换为 QIcon:
pixmap = QPixmap("image.png")  # 创建一个 QPixmap 对象
icon = QIcon(pixmap)  # 转换为 QIcon 对象

这些是常见的一些类之间的转换示例。根据你的具体需求和使用情况,你可以根据需要进行适当的转换。值得注意的是,有些类之间的转换可能会引入一定的性能开销或图像数据的损失,因此在进行转换时要小心处理。

② QBitmap、QBrush、QPen 转换为 QPixmap 或 QImage

  1. QBitmap 转换为 QPixmap 或 QImage:
bitmap = QBitmap("bitmap.png")  # 创建一个 QBitmap 对象
pixmap = QPixmap.fromImage(bitmap.toImage())  # 将 QBitmap 转换为 QPixmap
image = bitmap.toImage()  # 将 QBitmap 转换为 QImage
  1. QBrush 转换为 QPixmap:
brush = QBrush(Qt.SolidPattern)  # 创建一个 QBrush 对象
pixmap = QPixmap(100, 100)  # 创建一个 QPixmap 对象
pixmap.fill(brush.color())  # 使用 QBrush 的颜色填充 QPixmap
  1. QPen 转换为 QPixmap 或 QImage:
pen = QPen(Qt.red)  # 创建一个 QPen 对象
pixmap = QPixmap(100, 100)  # 创建一个 QPixmap 对象
pixmap.fill(Qt.white)  # 填充 QPixmap
painter = QPainter(pixmap)
painter.setPen(pen)
painter.drawLine(0, 0, 100, 100)  # 在 QPixmap 上绘制线条
painter.end()
image = pixmap.toImage()  # 将 QPixmap 转换为 QImage

这些示例展示了一些其他类之间的转换方法。根据你的具体需求,你可以选择适当的方法来转换不同的图像类。记住,在进行转换时,你需要考虑数据格式、性能和目标类的要求。

③ QByteArray 与 QPixmap、QImage 的互转

  1. QPixmap 或 QImage 转换为 QByteArray:
pixmap = QPixmap("image.png")  # 创建一个 QPixmap 对象
byte_array = QByteArray()
buffer = QBuffer(byte_array)
buffer.open(QIODevice.WriteOnly)
pixmap.save(buffer, "PNG")  # 将 QPixmap 转换为 QByteArray
buffer.close()

# 或者

image = QImage("image.png")  # 创建一个 QImage 对象
byte_array = QByteArray()
buffer = QBuffer(byte_array)
buffer.open(QIODevice.WriteOnly)
image.save(buffer, "PNG")  # 将 QImage 转换为 QByteArray
buffer.close()
  1. QByteArray 转换为 QPixmap 或 QImage:
byte_array = QByteArray()
# 假设 byte_array 包含图像数据

pixmap = QPixmap()
pixmap.loadFromData(byte_array)  # 将 QByteArray 转换为 QPixmap

# 或者

image = QImage()
image.loadFromData(byte_array)  # 将 QByteArray 转换为 QImage

这些示例展示了如何在 QPixmap、QImage 和 QByteArray 之间进行转换。使用适当的方法,你可以实现图像数据的存储、加载和传输。请根据你的具体需求选择适合的转换方法。

④ numpy 与 QImage 互转

  1. QImage 转换为 numpy 数组:
image = QImage("image.png")  # 创建一个 QImage 对象
width = image.width()
height = image.height()
array = np.zeros([height, width, 4], dtype=np.uint8)  # 创建一个空的 numpy 数组
for y in range(height):
    for x in range(width):
        pixel = image.pixel(x, y)  # 获取像素值
        rgba = QColor(pixel).getRgb()  # 转换为 RGBA 值
        array[y, x] = rgba  # 将 RGBA 值存入 numpy 数组
  1. numpy 数组转换为 QImage:
array = np.zeros([100, 100, 4], dtype=np.uint8)  # 创建一个 numpy 数组
array[:, :, 0] = 255  # 将红色通道设置为 255
image = QImage(array.data, 100, 100, QImage.Format_RGBA8888)  # 将 numpy 数组转换为 QImage

这些示例展示了如何在 QImage 和 numpy 数组之间进行转换。转换为 numpy 后,可以更方便的进行深度学习。

二、图像显示组件

想要将图像显示出来,仅有上面这些图像类可不行,还需要一些组件将图像给显示出来。常用的组件有QLabel与QGraphiceView,这里将着重介绍这两个图像显示组件,并对其他的一些图像显示组件进行简单介绍。根据自己不同的需求以及场景,大家可以选择不同的组件来显示图像。

下面是一张分辨率超高的图,后面对图像显示的实验中,都将使用这张图片进行操作,大家可以比对这两张图,来感受不同组件之间的差异。
(图片分辨率 3637×2433,来自于 Pexels Ánh Đặng图片: https://www.pexels.com/zh-cn/photo/16392177/)

在这里插入图片描述

1、使用 QLabel 显示图像

QLabel 在我目前的认知中算是一个比较常见的组件,可以用来进行图像以及文字的显示,下面是一段使用 QLabel 显示图像的简单示例程序

from PyQt5.QtWidgets import QApplication, QLabel, QWidget
from PyQt5.QtGui import QPixmap

app = QApplication([])
window = QWidget()

# 创建QLabel组件
label = QLabel(window)

# 加载图像文件
pixmap = QPixmap("image.jpg")

# 设置图像为QLabel的内容
label.setPixmap(pixmap)

# 显示窗口
window.show()
app.exec_()

在上述代码中,我们创建了一个QLabel组件并将其添加到窗口中。然后,使用QPixmap加载图像文件,并使用setPixmap()方法将图像设置为QLabel的内容。最后,我们显示窗口并进入应用程序的事件循环。

然而,QLabel 在显示图片时并不完美,下图是上述代码使用QLabel 对一张上述比我屏幕还要大的图片进行显示的结果,可以看到 QLabel 在不进行任何操作的情况下,并不能将我的图片完全显示,只是显示了图片左上角的一部分。

在这里插入图片描述

下面是我使用 pixmap 的 scaled 方法对图像进行缩放后的代码以及图像,大家可以重新感觉一下:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QLabel, QWidget
from PyQt5.QtGui import QPixmap, QTransform

app = QApplication([])
window = QWidget()

# 创建QLabel组件
label = QLabel(window)

# 设置QLabel大小
label.setFixedSize(600, 400)

# 加载图像文件
pixmap = QPixmap("image.jpg")

# 调整图像大小
scaled_pixmap = pixmap.scaled(600, 400, aspectRatioMode=Qt.KeepAspectRatio)

# 设置图像为QLabel的内容
label.setPixmap(scaled_pixmap)

# 显示窗口
window.show()
app.exec_()

在这里插入图片描述

2、使用 QGraphicsView 展示图像和图形场景

QGraphicsView是一个用于展示图像和图形场景的强大组件。它提供了对图像的缩放、平移和交互操作的支持。

from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt

app = QApplication([])
view = QGraphicsView()
scene = QGraphicsScene()

# 加载图像文件
pixmap = QPixmap("image.jpg")

# 在场景中添加图像
scene.addPixmap(pixmap)

# 设置场景为QGraphicsView的场景
view.setScene(scene)

# 设置图像居中显示
view.setAlignment(Qt.AlignCenter)

# 显示QGraphicsView组件
view.show()
app.exec_()

在上述代码中,我们创建了一个QGraphicsView组件和一个QGraphicsScene场景。使用QPixmap加载图像文件,然后将图像添加到场景中。接着,将场景设置为QGraphicsView的场景,并使用setAlignment()方法使图像居中显示。最后,显示QGraphicsView组件并进入应用程序的事件循环。

下面是图像显示的后果,可以看到,QGraphicsView与QLabel 在显示图像时还是有一些区别的,我们从图中能看到的就比如QGraphics有一个滚动条,而QLabel没有;这主要是因为QGraphicsView提供了更高级的图形操作和交互功能,而QLabel更适合显示静态图像。

在这里插入图片描述

3、其他可用的图像显示组件和控件

常用的用来显示图像的方法主要就是 QLabel 与 QGraphicsView 组件,这两个组件已经能够满足大多数应用场景的需求,其他的一些也可以用来显示图像的组件或方法下面也就简单介绍一下,有特殊需求的小伙伴可以看一下:

① 使用QPainter绘制图像:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QImage, QPainter

app = QApplication([])
window = QWidget()

image = QImage("image.jpg")  # 通过文件路径加载图像
image = image.scaled(600, 400, aspectRatioMode=Qt.KeepAspectRatio)  # 调整图像大小
def paintEvent(event):
    painter = QPainter(window)
    painter.drawImage(0, 0, image)  # 在指定位置绘制图像

window.paintEvent = paintEvent
window.show()
app.exec_()

在这里插入图片描述

② 使用QSS加载图片为窗口的背景:

from PyQt5.QtWidgets import QApplication, QWidget

app = QApplication([])
window = QWidget()
window.setStyleSheet(   #QSS 加载图片
    "QWidget{border-image:url(image.jpg)}"
)

window.show()
app.exec_()

在这里插入图片描述

③ 使用QGraphicsPixmapItem显示图像

from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QGraphicsPixmapItem

app = QApplication([])
view = QGraphicsView()
scene = QGraphicsScene()

pixmap = QPixmap("image.jpg")  # 通过文件路径加载图像
item = QGraphicsPixmapItem(pixmap)
scene.addItem(item)

view.setScene(scene)
view.setAlignment(Qt.AlignCenter)
view.show()
app.exec_()

在这里插入图片描述

三、图像操作与转换

下面是一些使用 PyQt 方法图像进行操作和转换的简单实例,包括缩放、剪裁、旋转、调整亮度和对比度等。需要的可以参考使用。

1、缩放图像

缩放图像是调整图像尺寸的常见操作之一。PyQt提供了 scaled() 方法来实现图像的缩放。下面是一段实例代码:

from PyQt5.QtGui import QPixmap

# 加载图像文件
pixmap = QPixmap("image.jpg")

# 缩放图像
scaled_pixmap = pixmap.scaled(800, 600)

在这里插入图片描述

2、剪裁图像

剪裁图像是根据指定的区域截取图像的操作。在PyQt中,你可以使用 copy() 方法来实现图像的剪裁。下面是一段示例代码:

from PyQt5.QtGui import QPixmap

# 加载图像文件
pixmap = QPixmap("image.jpg")

# 定义剪裁区域
x = 100
y = 100
width = 200
height = 200

# 剪裁图像
cropped_pixmap = pixmap.copy(x, y, width, height)

在这里插入图片描述

3、旋转图像

旋转图像是将图像按指定角度进行旋转的操作。PyQt提供了 transformed() 方法来实现图像的旋转。

from PyQt5.QtGui import QPixmap, QTransform

# 加载图像文件
pixmap = QPixmap("image.jpg")

# 定义旋转角度
angle = 45

# 旋转图像
transform = QTransform().rotate(angle)
rotated_pixmap = pixmap.transformed(transform)

在这里插入图片描述

4、调整亮度和对比度

调整图像的亮度和对比度可以改变图像的整体明暗和对比度水平。PyQt中可以通过遍历每一个像素来调整像素值实现这些操作。

from PyQt5.QtGui import QImage

# 加载图像文件
image = QImage("image.jpg")

# 调整亮度和对比度
brightness = 60  # 亮度调整值,可以是正数或负数
contrast = 1.2  # 对比度调整值,可以是大于1的浮点数或小于1的浮点数

# 获取图像的尺寸
width = image.width()
height = image.height()

# 调整亮度和对比度
for y in range(height):
    for x in range(width):
        pixel = image.pixel(x, y)

        # 获取像素的RGB值
        r, g, b, a = qRed(pixel), qGreen(pixel), qBlue(pixel), qAlpha(pixel)

        # 调整亮度
        r += brightness
        g += brightness
        b += brightness

        # 调整对比度
        r = int((r - 128) * contrast + 128)
        g = int((g - 128) * contrast + 128)
        b = int((b - 128) * contrast + 128)

        # 限制RGB值在0-255范围内
        r = max(0, min(r, 255))
        g = max(0, min(g, 255))
        b = max(0, min(b, 255))

        # 更新像素值
        pixel = qRgba(r, g, b, a)
        image.setPixel(x, y, pixel)

在这里插入图片描述

5、图像滤镜

图像滤镜是一种通过改变像素的颜色或亮度来改变图像外观的技术。PyQt中可以使用QGraphicsEffect类和其子类来实现图像滤镜效果。下面是一段简单的代码示例:

from PyQt5.QtWidgets import QGraphicsScene, QGraphicsBlurEffect
from PyQt5.QtGui import QPixmap

# 创建场景和视图
scene = QGraphicsScene()

# 加载图像文件
pixmap = QPixmap("image.jpg")

# 创建图像项并添加到场景
item = scene.addPixmap(pixmap)

# 创建图像模糊滤镜
effect_blur = QGraphicsBlurEffect()
effect_blur.setBlurRadius(5)  # 设置模糊半径
item.setGraphicsEffect(effect_blur)


# 应用滤镜效果到图像项
item.setGraphicsEffect(effect_blur)


在这里插入图片描述

6、转换图像格式

有时候,你可能需要将图像从一种格式转换为另一种格式。PyQt提供了convertToFormat()方法来实现图像格式的转换。

from PyQt5.QtGui import QImage, QPixmap

# 加载图像文件
image = QImage("image.jpg")

# 将图像转换为另一种格式
new_format = QImage.Format_RGB888
new_image = image.convertToFormat(new_format)

# 将QImage转换为QPixmap
pixmap = QPixmap.fromImage(new_image)

⭐写在最后

如果你感到本文对你有帮助,那就点个赞呗👍!

请添加图片描述

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

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

相关文章

DNDC模型在土地利用变化、未来气候变化下的建模方法及温室气体时空动态模拟实践技术

DNDC模型讲解 1.1 碳循环模型简介 1.2 DNDC模型原理 1.3 DNDC下载与安装 1.4 DNDC注意事项 ​ DNDC初步操作 2.1 DNDC界面介绍 2.2 DNDC数据及格式 2.3 DNDC点尺度模拟 2.4 DNDC区域尺度模拟 2.5 DNDC结果分析 ​ DNDC气象数据制备 3.1 数据制备中的遥感和GIS技术 3…

微博官方API使用方法【从注册到实战】

第一步:微博开发者身份认证 访问微博开放平台,登录自己微博账号,登录之后首先需要完善开发者的基本信息。【使用个人】 填写完成之后【审核通过】如下: 第二步:创建自己的应用 【备注:如果只是为了测试…

Linux安装Redis6.0版本教程

前言:采用Redis源码压缩包解压编译的安装方式。因为centos7.x的gcc版本还是4.8.5,而GCC编译指定的版本是需要5.3以上。 1、下载Redis的tar.gz的安装包 百度云下载:Linux下载Redis6.0.8 提取码:dbbv 2、安装gcc新版本 #环境部署…

【IEEE CIM 2023】基于多目标进化算法的抗菌肽设计方法

Evolutionary Multi Objective Optimization in Searching for Various Antimicrobial Peptides 小生境共享(Niche Sharing)是生物进化算法中的一个重要概念。在传统的进化算法中,通常会假设每个个体都是独立且不同的,因此可能会导…

机器学习基础之单层感知机及线性可分

文章目录 线性可分和权重向量公式线性不可分 线性可分和权重向量 单层感知机是后续深度学习的基础模型,本身没什么用,因为只能解决线性可分问题。 如这张图,想识别照片是横向的还是竖向的,只需要在中间画一条线,白点…

【大数据学习篇9】各区域热门商品Top3分析

学习目标/Target 掌握各区域热门商品Top3分析实现思路 掌握如何创建Spark连接并读取数据集 掌握利用Spark获取业务数据 掌握利用Spark过滤商品的行为类型 掌握利用Spark转换数据格式 掌握利用Spark统计每个区域中的不同商品 掌握利用Spark根据区域进行分组 掌握利用Spark根据区…

Linux的tail,grep,sed命令总结,以使用上述三种命令获取日志信息为例

目录 tail命令语法说明基本参数命令举例 grep命令语法说明匹配模式选择杂项输入控制文件控制 sed命令语法格式举例 使用命令组合查询日志信息 业务需求需要对软件日志进行查询和呈现,查询的条件是时间区间和关键词,系统运行在linux环境下,为此…

阿里巴巴“高并发”核心笔记!《基础+实战+源码+面试+架构》

前言 作为一个普普通通的程序员,如何才能提升自己的能力,在职场上拥有一技之长,这也成为普通的你我,迫切的需求。 拥有什么样的能力才能不被淘汰?答案是:高并发,它几乎成为了每个程序员都想要…

ATTCK v13版本战术介绍——防御规避(六)

一、引言 在前几期文章中我们介绍了ATT&CK中侦察、资源开发、初始访问、执行、持久化、提权战术理论知识及实战研究、部分防御规避战术,本期我们为大家介绍ATT&CK 14项战术中防御规避战术第31-36种子技术,后续会介绍防御规避其他子技术&#xf…

还只是停留在听过KMP算法?保姆式分析让你吃透KMP算法

💕成功不是将来才有的,而是从决定去做的那一刻起,持续积累而成。💕 🐼作者:不能再留遗憾了🐼 🎆专栏:Java学习🎆 🚗本文章主要内容:深…

腾讯云,物联网开发平台产品,动态注册步骤

1. 下载后解压,qcloud_iot_mqtt_sign-master.zip GitHub - tencentyun/qcloud_iot_mqtt_signContribute to tencentyun/qcloud_iot_mqtt_sign development by creating an account on GitHub.https://github.com/tencentyun/qcloud_iot_mqtt_sign 2. 按照readme文…

图像噪声类型:椒盐噪声,随机噪声,高斯噪声,泊松噪声,异方差高斯噪声模型和参数估计

文章目录 noise type1. 高斯噪声和泊松噪声2. 高斯分布和泊松分布的差异:3. 异方差高斯 噪声模型(泊松和高斯噪声混合)4. 几种噪声模型5. 信噪比 SNR的计算方法是6. Practical Poissonian-Gaussian noise modeling and fitting for single-im…

【嵌入式烧录刷写文件】-2.4-移动Intel Hex中指定地址范围内的数据

案例背景(共5页精讲): 有如下一段Hex文件,将源地址范围0x9100-0x9104中数据,移动至一个“空的,未填充的”目标地址范围0xA000-0xA004。 :2091000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717…

Cube Map 系列之:手把手教你 实现天空盒(Sky Box)

什么是天空盒 An skybox is a box with textures on it to look like the sky in all directions or rather to look like what is very far away including the horizon.天空盒是一个使用纹理贴图构建的盒子,人在其中朝任何一个方向看去,其纹理彷佛天空…

Java版本企业工程管理系统软件源码 自主研发,工程行业适用

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示…

Linux【工具 02】OpenStreetMap数据处理工具OSMCTools下载安装使用举例(osmconvert命令说明)

OSMCTools安装使用实例 1.Tools2.官网安装步骤3.实际安装步骤3.1 环境3.2 步骤 4.工具使用实例 OpenStreetMap的下载地址:Geofabrik Download Server。 OSMCTools的GitHub地址:https://github.com/ramunasd/osmctools Windows操作系统,可以…

MyBatis之注解开发

除了XML映射方式,MyBatis还支持注解方式实现POJO对象和数据表之间的关联映射,使用注解的方式一般将SQL语句直接写到接口上。与XML的映射方式相比,基于注解的映射方式相对简单。Mybatis提供的注解有: 1.环境准备 1.1 数据库准备…

C语言函数大全-- _w 开头的函数(3)

C语言函数大全 本篇介绍C语言函数大全-- _w 开头的函数 1. _wmkdir 1.1 函数说明 函数声明函数功能int _wmkdir(const wchar_t* dirname);用于创建指定路径名的新目录 参数: dirname : 指向以 null 结尾的宽字符数组,该数组包含要创建的目…

客户管理系统软件怎么用?

阅读本文您将了解:1.客户管理系统的作用;2.客户管理系统软件怎么用;3.客户管理的注意事项。 一、客户管理系统的作用 客户是企业的重要财富,因此客户管理是企业发展过程中至关重要的一部分,那么客户管理怎么做&#…

《编码——隐匿在计算机软硬件背后的语言》精炼——第17章收尾

古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。——苏轼 文章目录 数字计算机硬件软件 数字计算机 数字计算机分为硬件和软件两部分,硬件是组成计算机的设备,软件是输入计算机的指令和数值。之所以将它们区分,是因为相对于硬件而言&…