ztree插件的使用

 在bootstrap中使用ztree插件做树形架构,由于觉得原始的树形不够美观,所以改了其中的css插件

    demo演示,以及各种属性的用法网站:  http://www.treejs.cn/v3/demo.php#_107                 

    修改页面风格网站:  http://www.lai18.com/content/2450914.html?from=cancel

     增删改查以及拖拽功能网站:   http://www.cnblogs.com/lori/archive/2013/07/04/3171655.html

参考以上网站,可根据的自己的需要进行修改

下面贴出我在做项目时的代码(前端用的是bootstrap框架,对默认的css进行了修改)

   1)先引入文件(一个css,一个js文件)

<link rel="stylesheet" href="${contextPath}/static/assets/css/zTreeStyle/metro.css"/>
"${contextPath}/static/assets/js/ztree-3.5/jquery.ztree.all-3.5.js"
2)页面
   //注意这个地方的引入,否则页面不会显示任何东西
<div id="organizationTree" class="ztree" style="width:560px; overflow:auto;"></div>  
3) js代码
    var zTree;
var setting = {
check: {
enable: true
},
async: {
enable: true, //开启异步加载处理
contentType: "application/json;charset=utf-8",
// dataFilter: filter,//用于对 Ajax 返回数据进行预处理的函数
dataType: "json",
url: "${contextPath}/organization/getOrganizations/list", //加载后台数据
//autoParam: ["id", "name"],
type: "post",
//autoParam:[]
otherParam: []
// dataFilter: filter //用于对 Ajax 返回数据进行预处理的函数
},
view: {
expandSpeed: "",//zTree 节点展开、折叠时的动画速度,设置方法同 JQuery 动画效果中 speed 参数。

addHoverDom: addHoverDom, //用于当鼠标移动到节点上时,显示用户自定义控件,显示隐藏状态同 zTree 内部的编辑、删除按钮

removeHoverDom: removeHoverDom, //设置鼠标移到节点上,在后面显示一个按钮
selectedMulti: false, // 禁止多点同时选中的功能
fontCss: setFontCss_ztree //样式设置
},
edit: {
enable: true, //设置 zTree 进入编辑状态
editNameSelectAll: true,
removeTitle: '删除',
renameTitle: '编辑',
showRemoveBtn: true,

showRenameBtn: true,

},
data: {
keep: {
parent: true,
leaf: false
},
simpleData: {
enable: true
}
},
callback: {
beforeRemove: beforeRemove, //点击删除时触发,用来提示用户是否确定删除
beforeEditName: beforeEditName, //点击编辑时触发,用来判断该节点是否能编辑
// beforeRename:beforeRename,//编辑结束时触发,用来验证输入的数据是否符合要求
// onRemove:onRemove,//删除节点后触发,用户后台操作
// onRename:onRename,//编辑后触发,用于操作后台
// beforeDrag:beforeDrag,//用户禁止拖动节点
// onClick:clickNode//点击节点触发的事件
// onNodeCreated: zTreeOnNodeCreated
onAsyncSuccess: zTreeOnAsyncSuccess, //默认展开所有节点
/*拖动回调*/
beforeDrag: beforeDrag,
// beforeDrop: beforeDrop,
// beforeDragOpen: beforeDragOpen,
// onDrag: onDrag,
onDrop: onDrop
}
};

//设置鼠标移到节点上,在后面显示一个按钮
function removeHoverDom(treeId, treeNode) {
$("#addBtn_" + treeNode.tId).unbind().remove();
}

//加载树结构
function loadTreeData() {
zTree = $.fn.zTree.init($("#organizationTree"), setting);
}


function reloadTree() {
loadTreeData();
}

function zTreeOnAsyncSuccess(event, treeId, treeNode, msg) {
zTree.expandAll(true);
}

//实现拖拽
var log, className = "dark";
var treeID = "treeDemo";
var curDragNodes, autoExpandNode;
var newCount = 1;

function beforeDrag(treeId, treeNodes) {
className = (className === "dark" ? "" : "dark");
for (var i = 0, l = treeNodes.length; i < l; i++) {
if (treeNodes[i].drag === false) {
curDragNodes = null;
return false;
} else if (treeNodes[i].parentTId && treeNodes[i].getParentNode().childDrag === false) {
curDragNodes = null;
return false;
}
}
curDragNodes = treeNodes;
return true;
}
 
function onDrop(event, treeId, treeNodes, targetNode, moveType, isCopy) {

if (moveType == "inner") {
$.ajax({
contentType: "application/json",
url: "${contextPath}/organization/operateOrg",
//传送请求数据
data: JSON.stringify({
oper: "changeParent",
primaryKey: targetNode.id,
primaryKeys: [treeNodes[0].id]
}),
// data: { id: treeNodes[0].id, pid: targetNode.id, name: treeNodes[0].name, moveType: moveType, isCopy: isCopy },
dataType: "json",
method: 'post',
success: function (data) {

alert('拖拽成功!');
}
});
} else {
$.ajax({
contentType: "application/json",
url: "${contextPath}/organization/operateOrg",
//传送请求数据
data: JSON.stringify({
oper: "setSameParent",
primaryKey: targetNode.id,
primaryKeys: [treeNodes[0].id]
}),
// data: { id: treeNodes[0].id, pid: targetNode.id, name: treeNodes[0].name, moveType: moveType, isCopy: isCopy },
dataType: "json",
method: 'post',
success: function (data) {

alert('拖拽成功!');
}
});
}
}

function keydownInput() {
var event = event || window.event;
if (event.keyCode == 13) {
searchOrg();
}
}
function searchOrg() {
//searchByFlag_ztree(treeId, search_orgainzation, "");
searchByFlag_ztree('organizationTree', 'search_orgainzation', "");
/*var searchName = $("#search_orgainzation").val();
$.ajax({
url: "
${contextPath}/organization/getOrganizations/list?keyword="+searchName,
type : 'POST',
dataType : 'json',
success : function(data) {

}
});*/

}

/**
* 收起树:只展开根节点下的一级节点
* @param treeId
*/
function close_ztree(treeId) {
var treeObj = $.fn.zTree.getZTreeObj(treeId);
var nodes = treeObj.transformToArray(treeObj.getNodes());
var nodeLength = nodes.length;
for (var i = 0; i < nodeLength; i++) {
if (nodes[i].id == '0') {
//根节点:展开
treeObj.expandNode(nodes[i], true, true, false);
} else {
//非根节点:收起
treeObj.expandNode(nodes[i], false, true, false);
}
}
}

/**
* 搜索树,高亮显示并展示【模糊匹配搜索条件的节点s】
* @param treeId
* @param search_orgainzation 文本框的id
*/
function searchOrganization(treeId, search_orgainzation) {
searchByFlag_ztree(treeId, search_orgainzation, "");
}

/**
* 搜索树,高亮显示并展示【模糊匹配搜索条件的节点s】
* @param treeId
* @param searchConditionId 搜索条件Id
* @param flag 需要高亮显示的节点标识
*/
function searchByFlag_ztree(treeId, search_orgainzation, flag) {
//<1>.搜索条件
var searchCondition = $("#search_orgainzation").val();
//<2>.得到模糊匹配搜索条件的节点数组集合
var highlightNodes = new Array();
if (searchCondition && searchCondition != "") {



// var treeObj = $.fn.zTree.init($("#organizationTree"), setting,treeId);
// var treeObj=reloadTree(treeId);

var treeObj = $.fn.zTree.getZTreeObj(treeId);
highlightNodes = treeObj.getNodesByParamFuzzy("name", searchCondition, null);
//<3>.高亮显示并展示【指定节点s】
highlightAndExpand_ztree(treeId, highlightNodes, flag);
}


}

/**
* 高亮显示并展示【指定节点s】
* @param treeId
* @param highlightNodes 需要高亮显示的节点数组
* @param flag 需要高亮显示的节点标识
*/
function highlightAndExpand_ztree(treeId, highlightNodes, flag) {
var treeObj = $.fn.zTree.getZTreeObj(treeId);
//<1>. 先把全部节点更新为普通样式
var treeNodes = treeObj.transformToArray(treeObj.getNodes());
for (var i = 0; i < treeNodes.length; i++) {
treeNodes[i].highlight = false;
treeObj.updateNode(treeNodes[i]);
}
//<2>.收起树, 只展开根节点下的一级节点
close_ztree(treeId);
//<3>.把指定节点的样式更新为高亮显示,并展开
if (highlightNodes != null) {
for (var i = 0; i < highlightNodes.length; i++) {
if (flag != null && flag != "") {
if (highlightNodes[i].flag == flag) {
//高亮显示节点,并展开
highlightNodes[i].highlight = true;
treeObj.updateNode(highlightNodes[i]);
//高亮显示节点的父节点的父节点....直到根节点,并展示
var parentNode = highlightNodes[i].getParentNode();
var parentNodes = getParentNodes_ztree(treeId, parentNode);
treeObj.expandNode(parentNodes, true, false, true);
treeObj.expandNode(parentNode, true, false, true);
}
} else {
//高亮显示节点,并展开
highlightNodes[i].highlight = true;
treeObj.updateNode(highlightNodes[i]);
//高亮显示节点的父节点的父节点....直到根节点,并展示
var parentNode = highlightNodes[i].getParentNode();
var parentNodes = getParentNodes_ztree(treeId, parentNode);
treeObj.expandNode(parentNodes, true, false, true);
treeObj.expandNode(parentNode, true, false, true);
}
}
}
}

/**
* 递归得到指定节点的父节点的父节点....直到根节点
*/
function getParentNodes_ztree(treeId, node) {
if (node != null) {
var treeObj = $.fn.zTree.getZTreeObj(treeId);
var parentNode = node.getParentNode();
return getParentNodes_ztree(treeId, parentNode);
} else {
return node;
}
}

/**
* 设置树节点字体样式
*/
function setFontCss_ztree(treeId, treeNode) {
if (treeNode.id == 0) {
//根节点
return {color: "#333", "font-weight": "bold"};
} else if (treeNode.isParent == false) {
//叶子节点
return (!!treeNode.highlight) ? {color: "#ff0000", "font-weight": "bold"} : {
color: "#660099",
"font-weight": "normal"
};
} else {
//父节点
return (!!treeNode.highlight) ? {color: "#ff0000", "font-weight": "bold"} : {
color: "#333",
"font-weight": "normal"
};
}
}

//添加新的节点
function addHoverDom(treeId, treeNode) {
$("#priorityTip").hide();
var sObj = $("#" + treeNode.tId + "_span");
if (treeNode.editNameFlag || $("#addBtn_" + treeNode.tId).length > 0) return;
var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
+ "' title='add node' οnfοcus='this.blur();'></span>";
sObj.after(addStr);
var btn = $("#addBtn_" + treeNode.tId);
if (btn) btn.bind("click", function () {
var zTree = $.fn.zTree.getZTreeObj("organizationTree");
// if (confirm("确认为 " + treeNode.name + " 添加子节点吗?")) {

$("#modal-table").modal("show");
//设置新增窗口的一些属性,重置表单中的值
document.getElementById("title1").innerHTML = "新增组织架构";
$("#editOrganization").addClass("hidden");
$("#addOrganization").removeClass("hidden");
$("#form_organizationform")[0].reset();

$("#form_organizationParent").val(treeNode.id);
$("#form_organizationParentName").val(treeNode.name);
});
}
 
//编辑前的验证
function beforeEditName(treeId, treeNode) {
$("#priorityTip").hide();
document.getElementById("title1").innerHTML = "编辑组织架构";
$("#addOrganization").addClass("hidden");
$("#editOrganization").removeClass("hidden");

var parentId = treeNode.pId;
$.ajax({
url: "${contextPath}/organization/getOrganizations/query?id=" + parentId,
type: 'POST',
dataType: 'json',
success: function (data) {
$("#form_organizationParentName").val(data.orgname);
}
});
$("#form_organizationORG_ID").val(treeNode.id);
$("#form_organizationName").val(treeNode.name);
$("#form_organizationParent").val(treeNode.pId);
$("#form_organizationORG_BRIEF").val(treeNode.orgbrief);
$("#form_organizationORG_CODE").val(treeNode.orgcode);
if (treeNode.isactive) {
$("#form_organizationIsactive").val("true");
} else {
$("#form_organizationIsactive").val("false");
}

$("#form_organizationPRIORITY").val(treeNode.priority);
$("#form_organizationADDWAY").val(treeNode.addway);
$("#form_organizationDesc").val(treeNode.description);

$("#modal-table").modal("show");
}

//删除节点信息
function beforeRemove(treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj("organizationTree");
zTree.selectNode(treeNode);
var selectNodeId = treeNode.id;
var selectNodeParentId = treeNode.pId;

bootbox.confirm({
title: "提示",
message: "删除组织架构[<font class='red'>" + treeNode.name + "</font>]" +
"<br/><input type='radio' id='delOneorg' name='delOrg' checked/>如有下级架构,将会自动并入本级架构中" +
"<br/><input type='radio' id='delPartOrg' name='delOrg'/>如有下级架构,将会一起被删除",
buttons: {
confirm: {
label: "确认",
//className: "btn-success",
},
cancel: {
label: "取消",
//className: "btn-success",
}
},
callback: function (result) {
if (result) {//OK
if ($('#delOneorg').is(':checked')) {
//开始发送数据
$.ajax({
contentType: "application/json",
url: "${contextPath}/organization/operateOrg",
dataType: "json",
method: 'post',
//传送请求数据
data: JSON.stringify({
oper: "delMerge",
entry: {
id: selectNodeId,
parentid: selectNodeParentId
}
}),
success: function (data_) {
alert('删除成功!');
//重载tree数据
reloadTree();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('删除失败!');
}
});
} else {
$.ajax({
contentType: "application/json",
url: "${contextPath}/organization/operateOrg",
dataType: "json",
method: 'post',
//传送请求数据
data: JSON.stringify({
oper: "del",
primaryKey: selectNodeId
}),
success: function (data_) {
alert('删除成功!');
//重载tree数据
reloadTree();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('删除失败!');
}
});
}

}
}
});

return false;

}

function addOrganization() {
if ($("#form_organizationName").val().length == 0) {
$("#form_organizationName").focus();
return false;
}
if ($("#form_organizationIsactive").val().length == 0) {
$("#form_organizationIsactive").focus();
return false;
}
if ($("#form_organizationPRIORITY").val().length == 0||!isNumber($("#form_organizationPRIORITY").val())) {
if(!isNumber($("#form_organizationPRIORITY").val()))
$("#form_organizationPRIORITY").focus();
$("#priorityTip").show();
return false;
}


//开始发送数据
$.ajax
({
contentType: "application/json",
url: "${contextPath}/organization/operateOrg",
dataType: "json",
method: 'post',
//传送请求数据
data: JSON.stringify({
oper: "update",
entry: {
id: -1,
parentid: $("#form_organizationParent").val(),
orgname: $("#form_organizationName").val(),
orgbrief: $("#form_organizationORG_BRIEF").val(),
orgcode: $("#form_organizationORG_CODE").val(),
isactive: $("#form_organizationIsactive").val(),
priority: $("#form_organizationPRIORITY").val(),
addway: $("#form_organizationADDWAY").val(),
description: $("#form_organizationDesc").val()
}
}),
success: function (data_) {
//alert(data_);
alert(data_.message);
//重载grid数据
reloadTree();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("error:" + textStatus);
}
});
//$("#add_proj").modal("show");
$("#modal-table").modal("hide");
}


function editOrganization() {
if ($("#form_organizationName").val().length == 0) {
$("#form_organizationName").focus();
return false;
}
if ($("#form_organizationIsactive").val().length == 0) {
$("#form_organizationIsactive").focus();
return false;
}
if ($("#form_organizationPRIORITY").val().length == 0||!isNumber($("#form_organizationPRIORITY").val())) {
if(!isNumber($("#form_organizationPRIORITY").val()))
$("#form_organizationPRIORITY").focus();
$("#priorityTip").show();
return false;
}
//开始发送数据
$.ajax
({
contentType: "application/json",
url: "${contextPath}/organization/operateOrg",
dataType: "json",
method: 'post',
//传送请求数据
data: JSON.stringify({
oper: "update",
entry: {
id: $("#form_organizationORG_ID").val(),
parentid: $("#form_organizationParent").val(),
orgname: $("#form_organizationName").val(),
orgbrief: $("#form_organizationORG_BRIEF").val(),
orgcode: $("#form_organizationORG_CODE").val(),
isactive: $("#form_organizationIsactive").val(),
priority: $("#form_organizationPRIORITY").val(),
description: $("#form_organizationDesc").val()
}
}),
success: function (data_) {
//alert(data_);
alert(data_.message);
//重载grid数据
reloadTree();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("error:" + textStatus);
}
});
//$("#add_proj").modal("show");
$("#modal-table").modal("hide");
}
 
 
 
 



 

 

转载于:https://www.cnblogs.com/chen-yun/p/6208214.html

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

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

相关文章

耐驰测试仪上的软件,Proteus

Proteus - 扩展功能Proteus 软件的基本配置已经包含热分析各领域的所有主要功能。对于一些扩展性的测量与分析&#xff0c;我们提供下列可选组件&#xff1a;宏记录器使用事先录制的宏操作命令&#xff0c;对于相似的一系列常规测试结果进行自动分析&#xff0c;自动分析结果还…

关于数据中台系统,需要了解哪些技术?

来源&#xff1a;国家建材大数据研究中心今天让我们全面解读中台&#xff0c;包括企业为什么要平台化&#xff0c;目前中台都有哪些形式&#xff0c;实施中台系统的优势、面临的问题以及建议都有哪些&#xff1f;中台这个概念早期是由美军的作战体系演化而来的&#xff0c;技术…

ios请求头解决参数中文乱码_花了一天时间就解决了一个的请求头传参参数格式bug...

一天的时间就解决了一个bug就这么过去了&#xff0c;但不能让他就这么过去了&#xff0c;加班要加的有价值&#xff0c;所以现在记录一下这一天的经历&#xff0c;以防下次再踩坑大致说下我的情况&#xff0c;入坑的不久的前端新手&#xff0c;在做一个项目的重构&#xff0c;用…

python for循环连续输入五个成绩判断等级_Python条件循环判断

1.条件判断语句 Python中条件选择语句的关键字为&#xff1a;if 、elif 、else这三个。其基本形式如下&#xff1a; 1 2 3 4 5 6 7 8 9 age_of_cc 27 age int(input("guessage:")) if age age_of_cc: print("Yes,you got it!") elif age > age_of_cc: p…

用注册表禁止windows添加新用户

运行 regedt32.exe 打开你的注册表&#xff0c;里面有一个目录树&#xff1a;打开其中目录 HKEY_LOCAL_MACHINE再打开其中目录 SAM再打开其中目录 SAM再打开其中目录 Domains再打开其中目录 Account再打开其中目录 Groups好了&#xff0c;就是这个 Groups 就是负责建立用户的。…

显示当前没有家庭组计算机,已创建家庭组且加入家庭组,但显示“当前没有其他可用的家庭组计算机?”...

出现的问题&#xff1a;无法查询家庭组其他可用的计算机情况&#xff1a;1、家里一台WIN7 旗舰版&#xff0c;一台WIN7 家庭普通版2、在 旗舰版 电脑创建了家庭组&#xff0c;并在另一台输入密码&#xff0c;且成功加入加家庭组3、在 电脑控制面板中&#xff0c;“网络”里&…

人工智能的下半场,一定少不了自监督学习

来源&#xff1a;AI科技评论作者 | Lilian Wang 王荔编译 | MrBear对于给定的任务&#xff0c;在拥有足够的标签的情况下&#xff0c;监督式学习可以很好地解决该问题。想要得到好的性能&#xff0c;往往需要大量的数据标签&#xff0c;但是手动收集数据的成本很高&#xff08;…

bert 多义词_BERT之后,GLUE基准升级为SuperGLUE:难度更大

选自Medium作者&#xff1a;Alex Wang等机器之心编译参与&#xff1a;PandaBERT 等模型的进展已让 GLUE 基准在新模型的评估方面日渐乏力&#xff0c;为推动 NLP 技术的进一步发展&#xff0c;有必要对 GLUE 指标进行更新。为此&#xff0c;纽约大学、Facebook 人工智能研究所、…

thread.sleep是让哪个线程休眠_Java多线程:多线程基础知识

点击上方☝SpringForAll社区 轻松关注&#xff01;及时获取有趣有料的技术文章本文来源&#xff1a;https://www.cnblogs.com/ITtangtang/p/7602363.html一、线程安全性定义&#xff1a;多个线程之间的操作无论采用何种执行时序或交替方式&#xff0c;都要保证不变性条件不被破…

拉格朗日插值函数计算机实现流程图,拉格朗日插值实验报告.doc

实验名称&#xff1a; 实验一 拉格朗日插值引言我们在生产生活中常常会遇到这样的问题&#xff1a;某个实际问题中&#xff0c;函数f(x)在区间[a,b]上存在且连续&#xff0c;但找到其表达式&#xff0c;只能通过实验和观测得到有限点上的函数表。有些情况虽然可以写出表达式&am…

整个领域没了!学术界有史以来最大的丑闻

来源&#xff1a;中大科技处10月15日&#xff0c;学术界发生了一件大事。哈佛终身教授学术造假&#xff0c;31篇文献被撤&#xff0c;无数研究化为泡影……哈佛一次性从各类顶尖期刊上撤稿了31篇论文&#xff0c;整个心肌干细胞相关的研究被认定为“从一开始就基于欺诈性数据”…

布隆过滤器误判怎么办为什么会_最牛一篇布隆过滤器详解,布隆过滤器使用原理...

前言我们之前讲了Redis的缓存雪崩、穿透、击穿。在文章里我们说了解决缓存穿透的办法之一&#xff0c;就是布隆过滤器&#xff0c;但是上次并没有讲如何使用布隆过滤器。作为暖男的老哥&#xff0c;给你们补上&#xff0c;请叫我IT老暖男。什么是布隆过滤器布隆过滤器(Bloom Fi…

thinkPHP-空操作

空操作 当访问的方法不存在时&#xff0c;可以定义一个empty方法来避免空操作 function _empty(){echo "网页不存在&#xff0c;请检查地址信息";} 这样当访问不存在的方法时就会显示以上信息 当访问的控制器不存在时&#xff0c;可以定义一个空操作器 <?php nam…

python3 面向对象_Python3 面向对象

Python和C都是一门面向对象的语言&#xff0c; 面向对象技术简介 类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。比如 f file()##创建了一个类(file())的对象f 类变量&#xff1a;类变量在整个实例的对象…

口腔ct重建服务器原理,牙科CT是什么?牙科CT的原理及优势介绍

原标题&#xff1a;牙科CT是什么&#xff1f;牙科CT的原理及优势介绍牙科CT是什么&#xff1f;牙科CT&#xff0c;又称口腔CT&#xff0c;是一种新型牙科类仪器&#xff0c;它可以从三维角度对口腔部组织情况进行扫描检查。牙科CT在业界被誉为神奇的“慧眼”&#xff0c;它犹如…

机器学习奠基人Michael Jordan:下代技术是融合经济学,解读2项重要进展

来源&#xff1a; 北京智源人工智能研究院2019年11月1日北京智源大会全体大会及闭幕式上&#xff0c;被誉为“机器学习之父”的加州大学伯克利教授、智源研究院学术顾问委员会委员 Michael I.Jordan 做了题为《决策与情境&#xff1a;基于梯度的博弈均衡求解方法》&#xff08;…

matlab 带有下标的赋值维度不匹配_远见另类资产管理体系下的核心系统搭建

另类资产管理体系下的信息化建设&#xff0c;或许是小众领域中的更小众话题&#xff0c;但仍值得讨论。很多基金公司、投资公司或资产管理公司都搭建了各种大大小小的应用系统&#xff0c;如OA系统、财务系统、CRM系统等&#xff0c;但对于上系统的价值&#xff0c;不仅很难量化…

cfree运行程序错误的原因_Python入门教程 | 第 8 章 错误、调试和测试

第八章 错误、调试和测试在程序运行过程中&#xff0c;总会遇到各种各样的错误。有的错误是程序编写有问题造成的&#xff0c;比如本来应该输出整数结果输出了字符串&#xff0c;这种错误我们通常称之为bug&#xff0c;bug是必须修复的。有的错误是用户输入造成的&#xff0c;比…

python更新后yum问题

python更新后yum问题 How to switch between Python versions on Fedora Linux Currently, the default python version on Fedora Linux is Python 2. Later Fedora Linux release 22 will ship with the Python 3 as a default version. In this config you will learn how t…