python3GUI--仿win10任务管理器By:PyQt5(附UI源码)

文章目录

  • 一.前言
  • 二.展示
    • 1.主界面
      • 1.进程
      • 2.性能
        • 1.CPU
        • 2.内存
      • 3.简略信息
      • 4.详细信息
      • 5.新建任务
  • 三.设计思路
    • 1.UI设计
      • 1.主界面
        • 1.进程
        • 2.性能
        • 3.详细信息
        • 4.新建任务
        • 5.图表信息组件
    • 2.代码整体设计
      • 1.项目设计心得
      • 2.项目设计其他心得
    • 3.其他心得
  • 四.源代码
  • 五.总结
  • 六.参考


一.前言

最近心血来潮想要做一款仿win10的任务管理器,练习一下基本布局和QChart的使用,实现任务管理、图表查看等功能,撰写本篇播客记录一下开发过程中的一些心得与体会,能给读者提供一些思路。软件打包好,放在了文末。

二.展示

1.主界面

1.进程

详细信息表格支持按表头排序,点击表头会自动排序。
在这里插入图片描述

2.性能

1.CPU

软件每隔1秒会获取当前的CPU信息,绘制成图表展示在页面上,下方的信息也是实时更新的。在这里插入图片描述
动图展示
请添加图片描述

2.内存

内存也是每隔1秒刷新界面、绘制成折线图与内存组合图。
在这里插入图片描述
动图展示
在这里插入图片描述

3.简略信息

在“详细信息”页面点击左下角按钮后,跳转到“简略信息”页面。
在这里插入图片描述
动图展示
在这里插入图片描述

4.详细信息

详细信息表格也支持按表头排序,点击表头会自动排序。
在这里插入图片描述

5.新建任务

可以输入cmd命令或者点击浏览打开一个文件
在这里插入图片描述

三.设计思路

1.UI设计

1.主界面

整体布局为两个frame垂直布局,上面的frame中存放一个stackWidget,第一页放一个tabWidget,tabWidget里面有三个tab,分别是“进程”、“性能”、“详细信息”,其中“性能tab”中再放一个frame,布局为左右布局,左侧放自定义的图表基本信息widget,右侧为一个stackWidget,第一页放CPU信息,第二页放内存信息,都为垂直布局,上方为折线图表,下方为图表详细信息。stackWidget第二页放一个listWidget,用于放置自定义的“详细信息widget”。

1.进程

在这里插入图片描述

2.性能

在这里插入图片描述

3.详细信息

在这里插入图片描述

4.新建任务

新建任务为一个独立的widget,属性为QWidget。
在这里插入图片描述

5.图表信息组件

用于生成图表以及图表基本信息,实例化之后会改变其中内容。也是一个独立的widget,属性为QWidget。
在这里插入图片描述

2.代码整体设计

1.项目设计心得

笔者在进行Pyqt项目设计之前会先调研,评估一下UI、功能的整体难度,删繁就简,整体地去看待这个项目。通常我的Pyqt项目至少会有四部分组成:1.main_ui.py主窗口UI,由pyuic工具把xml格式的ui文件转化为Python代码而来。2.engine.py软件引擎,就是用户操作后,软件执行的核心代码,理论上是可以脱离所在项目单独存在的。3.CWidgets.py,此文件用于存放自定义的Widget以及相关子窗口的调试代码。4.main_GUI.py主窗口逻辑调用,是它把engine和Cwidgets和main_ui联系到一起,其中包含主窗口相关调度,子窗口实例化,核心引擎调用代码。

2.项目设计其他心得

在项目设计中始终保持“高内聚、低耦合”的代码设计思想,从整体看局部,再在从局部看整体,认真拆分每一个组件,最终从主文件中把每个子组件调用起来。

3.其他心得

四.源代码

这里贴一下UI的主窗口代码,由pyuic转化而来,包含主布局。

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'task_god_ui.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(725, 522)icon = QtGui.QIcon()icon.addPixmap(QtGui.QPixmap(":/icons/icons/QQ截图20230709080218.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)MainWindow.setWindowIcon(icon)MainWindow.setStyleSheet("#QTableWidget,QListWidget,#toolButton_showDetail{border:none;}\n"
"*{font-family:\"微软雅黑\"}\n"
"QFrame,#tabWidget,QStackedWidget,QStackedWidget::page{\n"
"    background-color: rgb(255, 255, 255);\n"
"}\n"
"QFrame,QTabWidget,QStackedWidget::page,#scrollArea,#scrollAreaWidgetContents{\n"
"    background-color: rgb(255, 255, 255);\n"
"}\n"
"#tableWidget::item,#tableWidget_2::item{border-left:1px solid rgb(229, 229, 229);}\n"
"QTableWidget::item:hover,QTableWidget::item:selected{\n"
"    background-color:rgb(229, 243, 255);\n"
"}\n"
"QScrollArea{border:none;}")self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)self.verticalLayout.setContentsMargins(0, 0, 0, 0)self.verticalLayout.setSpacing(0)self.verticalLayout.setObjectName("verticalLayout")self.frame = QtWidgets.QFrame(self.centralwidget)self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)self.frame.setFrameShadow(QtWidgets.QFrame.Raised)self.frame.setObjectName("frame")self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.frame)self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)self.horizontalLayout_2.setSpacing(0)self.horizontalLayout_2.setObjectName("horizontalLayout_2")self.stackedWidget = QtWidgets.QStackedWidget(self.frame)self.stackedWidget.setObjectName("stackedWidget")self.page = QtWidgets.QWidget()self.page.setObjectName("page")self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.page)self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)self.verticalLayout_2.setSpacing(0)self.verticalLayout_2.setObjectName("verticalLayout_2")self.tabWidget = QtWidgets.QTabWidget(self.page)self.tabWidget.setAutoFillBackground(False)self.tabWidget.setObjectName("tabWidget")self.tab = QtWidgets.QWidget()self.tab.setObjectName("tab")self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.tab)self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)self.horizontalLayout_4.setSpacing(0)self.horizontalLayout_4.setObjectName("horizontalLayout_4")self.tableWidget = QtWidgets.QTableWidget(self.tab)self.tableWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)self.tableWidget.setAutoFillBackground(True)self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)self.tableWidget.setAlternatingRowColors(False)self.tableWidget.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)self.tableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)self.tableWidget.setShowGrid(False)self.tableWidget.setObjectName("tableWidget")self.tableWidget.setColumnCount(7)self.tableWidget.setRowCount(0)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(0, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(1, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(2, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(3, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(4, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(5, item)item = QtWidgets.QTableWidgetItem()self.tableWidget.setHorizontalHeaderItem(6, item)self.tableWidget.horizontalHeader().setVisible(True)self.tableWidget.horizontalHeader().setCascadingSectionResizes(True)self.tableWidget.horizontalHeader().setSortIndicatorShown(True)self.tableWidget.horizontalHeader().setStretchLastSection(True)self.tableWidget.verticalHeader().setVisible(False)self.tableWidget.verticalHeader().setCascadingSectionResizes(True)self.tableWidget.verticalHeader().setSortIndicatorShown(True)self.tableWidget.verticalHeader().setStretchLastSection(True)self.horizontalLayout_4.addWidget(self.tableWidget)self.tabWidget.addTab(self.tab, "")self.tab_3 = QtWidgets.QWidget()self.tab_3.setObjectName("tab_3")self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.tab_3)self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)self.verticalLayout_3.setSpacing(0)self.verticalLayout_3.setObjectName("verticalLayout_3")self.frame_3 = QtWidgets.QFrame(self.tab_3)self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)self.frame_3.setObjectName("frame_3")self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.frame_3)self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)self.horizontalLayout_5.setSpacing(0)self.horizontalLayout_5.setObjectName("horizontalLayout_5")self.scrollArea = QtWidgets.QScrollArea(self.frame_3)sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth())self.scrollArea.setSizePolicy(sizePolicy)self.scrollArea.setMinimumSize(QtCore.QSize(240, 0))self.scrollArea.setMaximumSize(QtCore.QSize(240, 16777215))self.scrollArea.setStyleSheet("")self.scrollArea.setWidgetResizable(True)self.scrollArea.setObjectName("scrollArea")self.scrollAreaWidgetContents = QtWidgets.QWidget()self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 240, 30))sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)sizePolicy.setHorizontalStretch(0)sizePolicy.setVerticalStretch(0)sizePolicy.setHeightForWidth(self.scrollAreaWidgetContents.sizePolicy().hasHeightForWidth())self.scrollAreaWidgetContents.setSizePolicy(sizePolicy)self.scrollAreaWidgetContents.setMinimumSize(QtCore.QSize(240, 0))self.scrollAreaWidgetContents.setMaximumSize(QtCore.QSize(240, 16777215))self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)self.verticalLayout_8.setContentsMargins(0, 0, 0, 0)self.verticalLayout_8.setSpacing(0)self.verticalLayout_8.setObjectName("verticalLayout_8")self.verticalLayout_5 = QtWidgets.QVBoxLayout()self.verticalLayout_5.setContentsMargins(-1, 0, 3, -1)self.verticalLayout_5.setSpacing(0)self.verticalLayout_5.setObjectName("verticalLayout_5")spacerItem = QtWidgets.QSpacerItem(0, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)self.verticalLayout_5.addItem(spacerItem)self.verticalLayout_8.addLayout(self.verticalLayout_5)self.scrollArea.setWidget(self.scrollAreaWidgetContents)self.horizontalLayout_5.addWidget(self.scrollArea)self.line_2 = QtWidgets.QFrame(self.frame_3)self.line_2.setFrameShape(QtWidgets.QFrame.VLine)self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)self.line_2.setObjectName("line_2")self.horizontalLayout_5.addWidget(self.line_2)self.stackedWidget_2 = QtWidgets.QStackedWidget(self.frame_3)self.stackedWidget_2.setObjectName("stackedWidget_2")self.page_3 = QtWidgets.QWidget()self.page_3.setObjectName("page_3")self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.page_3)self.verticalLayout_6.setContentsMargins(0, 0, 0, 0)self.verticalLayout_6.setSpacing(0)self.verticalLayout_6.setObjectName("verticalLayout_6")self.stackedWidget_2.addWidget(self.page_3)self.page_4 = QtWidgets.QWidget()self.page_4.setObjectName("page_4")self.stackedWidget_2.addWidget(self.page_4)self.horizontalLayout_5.addWidget(self.stackedWidget_2)self.horizontalLayout_5.setStretch(0, 1)self.horizontalLayout_5.setStretch(2, 4)self.verticalLayout_3.addWidget(self.frame_3)self.tabWidget.addTab(self.tab_3, "")self.tab_2 = QtWidgets.QWidget()self.tab_2.setObjectName("tab_2")self.horizontalLayout = QtWidgets.QHBoxLayout(self.tab_2)self.horizontalLayout.setContentsMargins(0, 0, 0, 0)self.horizontalLayout.setObjectName("horizontalLayout")self.tableWidget_2 = hoverTableWidget(self.tab_2)self.tableWidget_2.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)self.tableWidget_2.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)self.tableWidget_2.setShowGrid(False)self.tableWidget_2.setObjectName("tableWidget_2")self.tableWidget_2.setColumnCount(5)self.tableWidget_2.setRowCount(0)item = QtWidgets.QTableWidgetItem()self.tableWidget_2.setHorizontalHeaderItem(0, item)item = QtWidgets.QTableWidgetItem()self.tableWidget_2.setHorizontalHeaderItem(1, item)item = QtWidgets.QTableWidgetItem()self.tableWidget_2.setHorizontalHeaderItem(2, item)item = QtWidgets.QTableWidgetItem()self.tableWidget_2.setHorizontalHeaderItem(3, item)item = QtWidgets.QTableWidgetItem()self.tableWidget_2.setHorizontalHeaderItem(4, item)self.tableWidget_2.horizontalHeader().setStretchLastSection(False)self.tableWidget_2.verticalHeader().setVisible(False)self.tableWidget_2.verticalHeader().setSortIndicatorShown(False)self.tableWidget_2.verticalHeader().setStretchLastSection(False)self.horizontalLayout.addWidget(self.tableWidget_2)self.tabWidget.addTab(self.tab_2, "")self.verticalLayout_2.addWidget(self.tabWidget)self.stackedWidget.addWidget(self.page)self.page_2 = QtWidgets.QWidget()self.page_2.setObjectName("page_2")self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.page_2)self.verticalLayout_4.setContentsMargins(0, 0, 0, 0)self.verticalLayout_4.setSpacing(0)self.verticalLayout_4.setObjectName("verticalLayout_4")self.listWidget = QtWidgets.QListWidget(self.page_2)self.listWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)self.listWidget.setObjectName("listWidget")self.verticalLayout_4.addWidget(self.listWidget)self.stackedWidget.addWidget(self.page_2)self.horizontalLayout_2.addWidget(self.stackedWidget)self.verticalLayout.addWidget(self.frame)self.line = QtWidgets.QFrame(self.centralwidget)self.line.setFrameShape(QtWidgets.QFrame.HLine)self.line.setFrameShadow(QtWidgets.QFrame.Sunken)self.line.setObjectName("line")self.verticalLayout.addWidget(self.line)self.frame_2 = QtWidgets.QFrame(self.centralwidget)self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)self.frame_2.setObjectName("frame_2")self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.frame_2)self.horizontalLayout_3.setObjectName("horizontalLayout_3")self.toolButton_showDetail = HoverBtn(self.frame_2)self.toolButton_showDetail.setIconSize(QtCore.QSize(30, 30))self.toolButton_showDetail.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)self.toolButton_showDetail.setObjectName("toolButton_showDetail")self.horizontalLayout_3.addWidget(self.toolButton_showDetail)spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)self.horizontalLayout_3.addItem(spacerItem1)self.termite_bt = QtWidgets.QPushButton(self.frame_2)self.termite_bt.setEnabled(False)self.termite_bt.setObjectName("termite_bt")self.horizontalLayout_3.addWidget(self.termite_bt)self.verticalLayout.addWidget(self.frame_2)MainWindow.setCentralWidget(self.centralwidget)self.menubar = QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 725, 23))self.menubar.setObjectName("menubar")self.menu = QtWidgets.QMenu(self.menubar)self.menu.setObjectName("menu")self.menu_2 = QtWidgets.QMenu(self.menubar)self.menu_2.setObjectName("menu_2")self.menu_3 = QtWidgets.QMenu(self.menubar)self.menu_3.setObjectName("menu_3")self.menu_4 = QtWidgets.QMenu(self.menu_3)self.menu_4.setObjectName("menu_4")MainWindow.setMenuBar(self.menubar)self.actionrun = QtWidgets.QAction(MainWindow)self.actionrun.setShortcutContext(QtCore.Qt.WindowShortcut)self.actionrun.setObjectName("actionrun")self.actionexit = QtWidgets.QAction(MainWindow)self.actionexit.setObjectName("actionexit")self.actiontop = QtWidgets.QAction(MainWindow)self.actiontop.setCheckable(True)self.actiontop.setChecked(True)self.actiontop.setObjectName("actiontop")self.actionfre = QtWidgets.QAction(MainWindow)self.actionfre.setObjectName("actionfre")self.actionhi = QtWidgets.QAction(MainWindow)self.actionhi.setCheckable(True)self.actionhi.setObjectName("actionhi")self.actionnor = QtWidgets.QAction(MainWindow)self.actionnor.setCheckable(True)self.actionnor.setChecked(True)self.actionnor.setObjectName("actionnor")self.actiondi = QtWidgets.QAction(MainWindow)self.actiondi.setCheckable(True)self.actiondi.setObjectName("actiondi")self.actiontm = QtWidgets.QAction(MainWindow)self.actiontm.setCheckable(True)self.actiontm.setObjectName("actiontm")self.actionabu = QtWidgets.QAction(MainWindow)self.actionabu.setObjectName("actionabu")self.menu.addAction(self.actionrun)self.menu.addAction(self.actionexit)self.menu_2.addAction(self.actiontop)self.menu_4.addAction(self.actionhi)self.menu_4.addAction(self.actionnor)self.menu_4.addAction(self.actiondi)self.menu_4.addAction(self.actiontm)self.menu_3.addAction(self.actionfre)self.menu_3.addAction(self.menu_4.menuAction())self.menu_3.addAction(self.actionabu)self.menubar.addAction(self.menu.menuAction())self.menubar.addAction(self.menu_2.menuAction())self.menubar.addAction(self.menu_3.menuAction())self.retranslateUi(MainWindow)self.stackedWidget.setCurrentIndex(0)self.tabWidget.setCurrentIndex(0)self.stackedWidget_2.setCurrentIndex(1)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "任务管理器"))self.tableWidget.setSortingEnabled(True)item = self.tableWidget.horizontalHeaderItem(0)item.setText(_translate("MainWindow", "名称"))item = self.tableWidget.horizontalHeaderItem(1)item.setText(_translate("MainWindow", "状态"))item = self.tableWidget.horizontalHeaderItem(2)item.setText(_translate("MainWindow", "CPU"))item = self.tableWidget.horizontalHeaderItem(3)item.setText(_translate("MainWindow", "内存"))item = self.tableWidget.horizontalHeaderItem(4)item.setText(_translate("MainWindow", "磁盘"))item = self.tableWidget.horizontalHeaderItem(5)item.setText(_translate("MainWindow", "网络"))item = self.tableWidget.horizontalHeaderItem(6)item.setText(_translate("MainWindow", "PID"))self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "进程"))self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "性能"))self.tableWidget_2.setSortingEnabled(True)item = self.tableWidget_2.horizontalHeaderItem(0)item.setText(_translate("MainWindow", "名称"))item = self.tableWidget_2.horizontalHeaderItem(1)item.setText(_translate("MainWindow", "PID"))item = self.tableWidget_2.horizontalHeaderItem(2)item.setText(_translate("MainWindow", "状态"))item = self.tableWidget_2.horizontalHeaderItem(3)item.setText(_translate("MainWindow", "用户名"))item = self.tableWidget_2.horizontalHeaderItem(4)item.setText(_translate("MainWindow", "CPU"))self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "详细信息"))self.toolButton_showDetail.setText(_translate("MainWindow", "简略信息"))self.termite_bt.setText(_translate("MainWindow", "结束任务"))self.menu.setTitle(_translate("MainWindow", "文件"))self.menu_2.setTitle(_translate("MainWindow", "选项"))self.menu_3.setTitle(_translate("MainWindow", "查看"))self.menu_4.setTitle(_translate("MainWindow", "更新速度"))self.actionrun.setText(_translate("MainWindow", "运行新任务"))self.actionexit.setText(_translate("MainWindow", "退出"))self.actiontop.setText(_translate("MainWindow", "置于顶层"))self.actionfre.setText(_translate("MainWindow", "立即刷新"))self.actionhi.setText(_translate("MainWindow", "高"))self.actionnor.setText(_translate("MainWindow", "正常"))self.actiondi.setText(_translate("MainWindow", "低"))self.actiontm.setText(_translate("MainWindow", "已暂停"))self.actionabu.setText(_translate("MainWindow", "关于作者"))
from CWidgets import HoverBtn, hoverTableWidget
import resources_rc

五.总结

本次使用Pyqt5制作了一款仿win10任务管理器,支持对进程进行管理,可视化地展示windows设备的内存、CPU等信息,另外支持新建任务。撰写本篇记录下我的开发思路顺便和大家分享我的开发成果,软件打包好放在了蓝奏云,大家可自取。最后希望大家多多讨论,可以留言、私信给我,我都会看的,大家也不要吝啬自己的赞哦!谢谢大家!
在这里插入图片描述

六.参考

  1. QCharts - 4.QValueAxis类详解
  2. 《python》用psutil获取电脑CPU内存等参数信息
  3. pyqt5,Qchart画折线图,设定多个不同刻度的Y轴,修改自定义折线图的坐标轴,改变折线图的底色
  4. python --psutil(cpu、内存、磁盘情况、结束指定进程、端口占用)
  5. Win10技巧:Win10任务管理器知识介绍

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

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

相关文章

Minecraft 1.20.x Forge模组开发 01.Idea开发环境配置

我们本次来进行Minecraft 1.20.x 模组开发环境配置教程的介绍。 效果演示 效果演示 效果演示 1.首先我们需要下载Java17和1.20模组开发包: Java17下载官网

智安网络|保护数据资产:不同行业下的数据安全建设策略

在当今数字化时代,数据安全已经成为各行各业无法忽视的重要议题。保持良好网络卫生习惯并及时了解不断变化的网络威胁是企业中每个人的责任。企业、政府机构、医疗机构、金融机构以及其他组织和行业都面临着日益复杂和频繁的网络安全威胁。为了有效应对这些威胁&…

JVM系统优化实践(20):GC生产环境案例(三)

您好,这里是「码农镖局」CSDN博客,欢迎您来,欢迎您再来~ 某新手开发工程师接到了一个保存Elasticsearch日志的任务,以供后续分析之用。但写代码的时候,误将保存日志的代码段弄成了无限循环,程序…

面试题 02.07. 链表相交

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后&#x…

24 MFC文档串行化和单文档应用程序

文章目录 文档串行化全部代码 单文档应用程序搭建原理搭建框架Win32 过度到MFC 三部曲设置ID资源全部代码 单文档应用程序设置标题绘图 简单的管理系统部分代码 文档串行化 ui 设计 保存 void CfileDemoDlg::OnBnClickedBtnSave() {UpdateData();//CFile file(L"Demo.dat…

基于MATLAB的无人机遥感数据预处理与农林植被性状估算教程

详情点击链接:基于MATLAB的无人机遥感数据预处理与农林植被性状估算前言 遥感技术作为一种空间大数据手段,能够从多时、多维、多地等角度,获取大量的农情数据。数据具有面状、实时、非接触、无伤检测等显著优势,是智慧农业必须采…

UML 图

统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。 UML 从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图…

java贪心算法案例

1.零钱找回问题 这个问题在我们的日常生活中就更加普遍了。假设1元、2元、5元、10元、20元、50元、100元的纸币分别有c0, c1, c2, c3, c4, c5, c6张。现在要用这些钱来支付K元,至少要用多少张纸币?用贪心算法的思想,很显然,每一步…

基于PaddleOCR与OpenVINO™的结构化输出Pipeline

飞桨(PaddlePaddle)是百度自主研发的中国首个开源开放、功能丰富的产业级深度学习平台,以百度多年的深度学习技术研究和业务应用为基础。飞桨深度学习平台集核心框架、基础模型库、端到端开发套件、丰富的工具组件于一体,还包括了…

CMS垃圾收集器三色标记-JVM(十二)

上篇文章说了CMS垃圾收集器是赋值清除,所以他不可以碎片整理,于是jvm支持两个参数,几次fullGC之后碎片整理压缩空间。Cms他会抢占cpu资源,因为是并行运行,所以会有浮动垃圾。还有执行不确定性,垃圾收集完&a…

解码 LangChain|用 LangChain 和 Milvus 从零搭建 LLM 应用

如何从零搭建一个 LLM 应用?不妨试试 LangChain Milvus 的组合拳。 作为开发 LLM 应用的框架,LangChain 内部不仅包含诸多模块,而且支持外部集成;Milvus 同样可以支持诸多 LLM 集成,二者结合除了可以轻松搭建一个 LLM…

原型模式-克隆一个对象

在开发一个界面的时候,里面有多个Button,这些对象的属性内容相似。如果一个个实例化Button对象,并设置其属性,那么代码量将会增多。 通过一个原型对象克隆出多个一模一样的对象,该模式被称为原型模式。 图 原型模式 …

【分布式】ceph存储

目录 一、存储基础单机存储设备单机存储的问题商业存储解决方案 二、 分布式存储 (软件定义的存储 SDS)分布式存储的类型Ceph 优势Ceph 架构Ceph 核心组件Pool中数据保存方式支持两种类型:Pool、PG 和 OSD 的关系OSD 存储后端BlueStore 的主要…

stable diffusion webui mov2mov

手把手教你用stable diffusion绘画ai插件mov2mov生成动画_哔哩哔哩_bilibili手把手教你用stable diffusion绘画ai插件mov2mov生成动画, 视频播放量 14552、弹幕量 3、点赞数 275、投硬币枚数 114、收藏人数 980、转发人数 75, 视频作者 懂你的冷兮, 作者简介 科技改变世界&…

Ubuntu新版静态IP设置

cd /etc/netplan直接编辑 sudo vi /etc/netplan/00-installer-config.yaml#network: # ethernets: # ens160: # dhcp4: true # version: 2network:version: 2ethernets:ens160:dhcp4: noaddresses: [172.17.10.23/24]optional: truegateway4: 172.17.10.1nameservers…

java工作随笔

String s JSONObject.toJSONString(fixedAsset);logger.error("-----------------8------------------" s);CusFixedAssettDTO CusFixedAssettDTO3 JSONObject.parseObject(s, CusFixedAssettDTO.class);父类转子类 相同对象合并 import java.util.Date; Data T…

Bard:Google AI开始支持中文对话和看图说话了

说起时下火爆的生成式AI,并不是只有ChatGPT。Bard也是一个很优秀的产品,并且刚刚发布的很多有趣的新功能。文末告诉你如何访问Bard。 Google AI在最近的更新中发布了Bard,一个新的语言模型。Bard支持多种语言,包括中文&#xff0…

【Ceph集群应用】Ceph对象存储系统之RGW接口详解

Ceph对象存储系统之RGW接口详解 1.创建Ceph对象存储系统RGW接口2. 开启httphttps,更改监听端口3. 更改监听端口4.S3接口访问测试5.实验中遇到的故障案例 接上文基于ceph-deploy部署Ceph集群详解 1.创建Ceph对象存储系统RGW接口 (1)对象存储概念 对象存…

WPF嵌入外部exe应用程序-使用Winfom控件承载外部程序

使用Winform控件承载外部程序 在WPF中使用Winfom控件添加winform相关的程序集在XAML头中加入对这两个程序集命名空间的引用使用Winform控件效果:问题 在Winfom控件中嵌入exe程序准备Winfrom控件更换父窗体的句柄完整实现代码:实现效果: 问题和…

perl输出中文乱码【win10】

perl输出中文乱码 运行的时候输出的内容变成了中文乱码,原因首先来查找一下自己的perl的模块里面是否有Encode-CN。请运行打开你的cmd并输入perldoc -l Encode::CN 如果出现了地址 则就是有,如果没有需要进行该模块的安装。 安装方式有很多种&#xff0…