`
mutongwu
  • 浏览: 441122 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MultiselectItemSelector 多选框

    博客分类:
  • Ext
阅读更多

改造自MultiselectItemSelector(http://extjs.com/learn/Extension:Multiselect)。
原有代码在关闭该控件以后,会遗留大量无效代码,因此,自己用一个 panel + 2个grid来实现,暂不支持拖拽。

Ext.namespace('Ext.ux')
Ext.ux.IconPanel = function(config){
    Ext.apply(this,config);
    Ext.ux.IconPanel.superclass.constructor.call(this,config);
}

Ext.extend(Ext.ux.IconPanel,Ext.Panel,{
    imagePath:'',
    drawUpIcon:true,
    drawDownIcon:true,
    drawLeftIcon:true,
    drawRightIcon:true,
    drawTopIcon:true,
    drawBotIcon:true,
    
    //style: 'padding-left:5px;padding-right:5px',
    
    initComponent: function(){
    
        Ext.ux.IconPanel.superclass.initComponent.call(this);
        this.addEvents(
            ''
        )
    },
    onRender: function(ct, position){
       Ext.ux.IconPanel.superclass.onRender.call(this,ct,position);
       
       if (this.imagePath!="" && this.imagePath.charAt(this.imagePath.length-1)!="/")
            this.imagePath+="/";
        this.iconUp = this.imagePath + (this.iconUp || 'up2.gif');
        this.iconDown = this.imagePath + (this.iconDown || 'down2.gif');
        this.iconLeft = this.imagePath + (this.iconLeft || 'left2.gif');
        this.iconRight = this.imagePath + (this.iconRight || 'right2.gif');
        this.iconTop = this.imagePath + (this.iconTop || 'top2.gif');
        this.iconBottom = this.imagePath + (this.iconBottom || 'bottom2.gif');
        var el= this.getEl();
        if (!this.toSortField) {
            this.toTopIcon = el.createChild({tag:'img', src:this.iconTop, style:{cursor:'pointer', margin:'2px'}});
            el.createChild({tag: 'br'});
            this.upIcon = el.createChild({tag:'img', src:this.iconUp, style:{cursor:'pointer', margin:'2px'}});
            el.createChild({tag: 'br'});
        }
        this.addIcon = el.createChild({tag:'img', src:this.switchToFrom?this.iconLeft:this.iconRight, style:{cursor:'pointer', margin:'2px'}});
        el.createChild({tag: 'br'});
        this.removeIcon = el.createChild({tag:'img', src:this.switchToFrom?this.iconRight:this.iconLeft, style:{cursor:'pointer', margin:'2px'}});
        el.createChild({tag: 'br'});
        if (!this.toSortField) {
            this.downIcon = el.createChild({tag:'img', src:this.iconDown, style:{cursor:'pointer', margin:'2px'}});
            el.createChild({tag: 'br'});
            this.toBottomIcon = el.createChild({tag:'img', src:this.iconBottom, style:{cursor:'pointer', margin:'2px'}});
        }
        if (!this.readOnly) {
            if (!this.toSortField) {
                this.toTopIcon.on('click', this.toTop, this);
                this.upIcon.on('click', this.up, this);
                this.downIcon.on('click', this.down, this);
                this.toBottomIcon.on('click', this.toBottom, this);
            }
            this.addIcon.on('click', this.fromTo, this);
            this.removeIcon.on('click', this.toFrom, this);
        }
        if (!this.drawUpIcon || this.hideNavIcons) { this.upIcon.dom.style.display='none'; }
        if (!this.drawDownIcon || this.hideNavIcons) { this.downIcon.dom.style.display='none'; }
        if (!this.drawLeftIcon || this.hideNavIcons) { this.addIcon.dom.style.display='none'; }
        if (!this.drawRightIcon || this.hideNavIcons) { this.removeIcon.dom.style.display='none'; }
        if (!this.drawTopIcon || this.hideNavIcons) { this.toTopIcon.dom.style.display='none'; }
        if (!this.drawBotIcon || this.hideNavIcons) { this.toBottomIcon.dom.style.display='none'; }

    },
    
    toTop:function(){
        this.gridsHolder.fireEvent('toTop');
    },
    toBottom: function(){
        this.gridsHolder.fireEvent('toBottom');
    },
    up: function(){
        this.gridsHolder.fireEvent('up');
    },
    down: function(){
        this.gridsHolder.fireEvent('down');
    },
    fromTo: function(){
        this.gridsHolder.fireEvent('fromTo');
    },
    toFrom: function(){
        this.gridsHolder.fireEvent('toFrom');
    },

    setGridsHoder: function(gridsHolder){
        this.gridsHolder = gridsHolder;
    }
});
Ext.ux.MultiSelectWin = function(config){
	Ext.apply(this,config);
	Ext.ux.MultiSelectWin.superclass.constructor.call(this, config);
	this.init();
};

Ext.extend(Ext.ux.MultiSelectWin, Ext.util.Observable,{
	
	title : '选择窗口',
	from_legend:'可选',
	to_legend: '已选',
	valueField: 'id',
	displayField: 'name',
    warningTitle: '提示',
    minLength:0,
    maxLength:Number.MAX_VALUE,
    minLengthText:'至少应选择{0}项',
    maxLengthText:'最多只能选择 {0}项',
    /**
     * 图标面板的config
     * @type {}
     */
    iconConfig:{},
	targetItem: null,
    localData:[],
	selectedData: [],
    saveFn: Ext.emptyFn,
	searchFn: Ext.emptyFn,
	baseParams: null,
	fieldName: null,

    toSortField:null,
    fromSortField:null,
    toSortDir:'ASC',
    fromSortDir:'ASC',
    allowDup: false,
    
	switchToFrom:false,
	openHeight:320,
	openWidth:460,
	ms_height:220,
	ms_width:200,


	init: function(){
		this.initDataStore();
		
		this.initComponent();
	},
	
	initDataStore: function(){
		var record = Ext.data.Record.create([
			{
				name: this.valueField,
				type: 'string'
			},{
				name: this.displayField,
				type: 'string'
		}]);
		if (this.localMode == true){
			this.fromStore  = new Ext.data.SimpleStore({
	            fields:[this.valueField, this.displayField]
	        });
		}
		else{
			var baseParams = {
					dir : 'asc',
					start : 0,
					limit : 0
				};

			if (this.baseParams)
				baseParams = this.baseParams;

			this.fromStore  = new Ext.data.Store({
				proxy: new Ext.data.DWRProxy(this.searchFn, true),
				reader: new Ext.data.ListRangeReader({
					totalProperty : 'total',
					id : 'id'
				},record),
				sortInfo:{field:this.displayField,direction:'ASC'},
				baseParams : baseParams
			});
		}
		
        this.selectedData = this.targetItem.getArrayValue();       
		this.toStore = new Ext.data.SimpleStore({
			fields:[this.valueField, this.displayField],
			data: this.selectedData
		});
		
        if(this.allowDup == false){
	        this.fromStore.on('load',function(){
	            this.fromStore.filterBy(function(record){
	                    for (var i=0;i < this.selectedData.length;i++){
	                        if(this.selectedData[i][0] == record.get(this.valueField))
	                            return false;
	                    }
	                    return true;
	                },this);    
	        },this);
        }
		
		if(this.localMode == true)
            this.fromStore.loadData(this.localData);
        else
            this.fromStore.load();
		
	},
	
	reComputeWH: function(){
		this.openHeight = this.openHeight;
		this.openWidth = this.openWidth;
		this.ms_height = this.openHeight - 100;
		this.ms_width = (this.openWidth-60)/2;
	},
    createIconsPanel: function(){
        this.iconsPanel = new Ext.ux.IconPanel(this.iconConfig);
        this.iconsPanel.setGridsHoder(this);        
    },
	initComponent: function(){
       
        if(this.openHeight || this.openWidth){
            this.reComputeWH();
        }
        this.addEvents(
                /**
                 * @event
                 */
                'destroy',

                /**
                 * @event
                 */
                'toTop',

                /**
                 * @event
                 */
                'toBottom',

                /**
                 * @event
                 */
                'up',

                /**
                 * @event
                 */
                'down',

                /**
                 * @event
                 */
                'fromTo',

                /**
                 * @event
                 */
                'toFrom');

        this.on('destroy', this.onDestroy, this);
        this.on('up', this.onUp, this);
        this.on('down', this.onDown, this);
        this.on('toTop', this.onToTop, this);
        this.on('toBottom', this.onToBottom, this);
        this.on('fromTo', this.onFromTo, this);
        this.on('toFrom', this.onToFrom, this);
        
        
        this.fromGrid = new Ext.grid.GridPanel({
            title : '可选',
            hideHeaders:true,
            width : this.ms_width,
            height: this.ms_height,
            autoExpandColumn:'name',
            layout : 'fit',
            sm : new Ext.grid.RowSelectionModel(),
            ds : this.fromStore,
            cm : new Ext.grid.ColumnModel([{
	            header : "header",
	            sortable : true,
	            dataIndex : this.displayField
	        }]),
            viewConfig:{forceFit:true}
        })

        this.fromGrid.on('rowdblclick', this.onFromGriddblclick, this);
        
        this.toGrid = new Ext.grid.GridPanel({
            title : '已选',
            hideHeaders:true,
            width : this.ms_width,
            height: this.ms_height,
            autoExpandColumn:'name',
            layout : 'fit',
            sm : new Ext.grid.RowSelectionModel(),
            ds : this.toStore,
            cm : new Ext.grid.ColumnModel([{
                header : "header",
                sortable : true,
                dataIndex : this.displayField
            }]),
            viewConfig:{forceFit:true}
        })
        
        this.toGrid.on('rowdblclick', this.onToGriddblclick, this);
        
        this.createIconsPanel();
        this.parentPanel = new Ext.Panel({
            layout:"table",
            layoutConfig:{columns:3},
            items: [this.fromGrid,this.iconsPanel,this.toGrid],
            frame: true
        });       

        this.selectorWin = new Ext.Window({
            frame: true,
            resizable:false,
            title : this.title,
            layout:'fit',
            modal: true,
            items : [this.parentPanel],
            width: this.openWidth,
            height: this.openHeight,
            buttonAlign:'center',
            buttons:[{
                text: '确定',
                handler: function(){
                  var records = this.toStore.getRange();
                  if(this.validateValue(records) == false)
                     return;
                  var values = [];
                  var selectedValue = '';
                  var selectedText = '';
                  
                  for (var i=0; i < records.length; i++){
                    var temp = [];
                    var v = records[i].get(this.valueField);
                    var t = records[i].get(this.displayField);
                    temp.push(v);
                    temp.push(t);
                    values.push(temp);
                    
                    if(selectedValue == ''){
                       selectedValue = v;
                       selectedText = t;
                    }
                    else{
                        selectedValue = selectedValue + ',' + v;
                        selectedText = selectedText + ',' + t;
                    }
                  }
                  this.targetItem.setValue(values);
                  var formValues = queryPanel.getFormValues();
                  Ext.apply(formValues,this.baseParams);
                  formValues.selectedValue = selectedValue;
                  formValues.selectedText = selectedText;
                  var fn = this.saveFn.createSequence(function(returnData){});
                  fn(formValues);
                  
                  this.selectorWin.close();
                },
                scope:this
            },{ 
                text:'取消',
                handler: function(){
                    this.selectorWin.close();
                },
                scope: this
            }]
        })
        
        this.selectorWin.show();
    },
    
    validateValue : function(value){
        if (value.length < this.minLength) {
            Ext.Msg.show({
               title: this.warningTitle,
               msg: String.format(this.minLengthText, this.minLength),
               buttons: Ext.Msg.OK,
               icon: Ext.MessageBox.INFO
            });
            return false;
        }
        if (value.length > this.maxLength) {
            Ext.Msg.show({
               title: this.warningTitle,
               msg: String.format(this.maxLengthText, this.maxLength),
               buttons: Ext.Msg.OK,
               icon: Ext.MessageBox.INFO
            });
            return false;
        }
        return true;
    },
    onFromGriddblclick: function(){
        this.fireEvent('fromTo');
    },
    onToGriddblclick: function(){
        this.fireEvent('toFrom');
    },
    onUp:function(){
        var store = this.toStore;
        var sm = this.toGrid.getSelectionModel();
        var data = sm.getSelections();
        
        var selectionsArray = [];
        for (var i=0; i < data.length; i++){
            selectionsArray.push(store.indexOf(data[i]));
        }
        var record = null;
        selectionsArray.sort();
        var newSelectionsArray = [];
        if (selectionsArray.length > 0) {
            for (var i=0; i<selectionsArray.length; i++) {
                record = store.getAt(selectionsArray[i]);
                if ((selectionsArray[i] - 1) >= 0) {
                    store.remove(record);
                    store.insert(selectionsArray[i] - 1, record);
                    newSelectionsArray.push(selectionsArray[i] - 1);
                }
            }
           this.toGrid.getView().refresh();
           sm.selectRows(newSelectionsArray);
        }    
    },
    onDown: function(){
        var store = this.toStore;
        var sm = this.toGrid.getSelectionModel();
        var data = sm.getSelections();
        
        var selectionsArray = [];
        for (var i=0; i < data.length; i++){
            selectionsArray.push(store.indexOf(data[i]));
        }
        var record = null;
        selectionsArray.sort();
        selectionsArray.reverse();
        var newSelectionsArray = [];
        if (selectionsArray.length > 0) {
            for (var i=0; i<selectionsArray.length; i++) {
                record = store.getAt(selectionsArray[i]);
                if ((selectionsArray[i] + 1) < store.getCount()) {
                    store.remove(record);
                    store.insert(selectionsArray[i] + 1, record);
                    newSelectionsArray.push(selectionsArray[i] + 1);
                }
            }
            this.toGrid.getView().refresh();
            sm.selectRows(newSelectionsArray);
        }
    },
    onToTop: function(){
        var store = this.toStore;
        var sm = this.toGrid.getSelectionModel();
        var data = sm.getSelections();
        
        var selectionsArray = [];
        for (var i=0; i < data.length; i++){
            selectionsArray.push(store.indexOf(data[i]));
        }
        var records = [];
        if (selectionsArray.length > 0) {
            selectionsArray.sort();
            for (var i=0; i<selectionsArray.length; i++) {
                record = store.getAt(selectionsArray[i]);
                records.push(record);
            }
            selectionsArray = [];
            for (var i=records.length-1; i>-1; i--) {
                record = records[i];
                store.remove(record);
                store.insert(0, record);
                selectionsArray.push(((records.length - 1) - i));
            }
        }
        this.toGrid.getView().refresh();
        sm.selectRows(selectionsArray);
     },
    onToBottom: function(){
        var store = this.toStore;
        var sm = this.toGrid.getSelectionModel();
        var data = sm.getSelections();
        
        var selectionsArray = [];
        for (var i=0; i < data.length; i++){
            selectionsArray.push(store.indexOf(data[i]));
        }
        var records = [];
        if (selectionsArray.length > 0) {
            selectionsArray.sort();
            for (var i=0; i<selectionsArray.length; i++) {
                record = store.getAt(selectionsArray[i]);
                records.push(record);
            }
            selectionsArray = [];
            for (var i=0; i<records.length; i++) {
                record = records[i];
                store.remove(record);
                store.add(record);
                selectionsArray.push((store.getCount()) - (records.length - i));
            }
        }
        this.toGrid.getView().refresh();
        sm.selectRows(selectionsArray);
    },
    onFromTo: function(){

        var records = this.fromGrid.getSelectionModel().getSelections();
 
        var selectionsArray = [];
        for (var i=0; i < records.length; i++){
            selectionsArray.push(this.fromStore.indexOf(records[i]));
        }
        if (selectionsArray.length > 0) {
            if(!this.allowDup)
                selectionsArray = [];
            for (var i=0; i<records.length; i++) {
                record = records[i];
                if(this.allowDup){
                    var x=new Ext.data.Record();
                    record.id=x.id;
                    delete x;   
                    this.toStore.add([record]);
                }else{
                    this.fromStore.remove(record);
                    this.toStore.add([record]);
                    selectionsArray.push((this.toStore.getCount() - 1));
                }
            }
        }
        this.toGrid.getView().refresh();
        this.fromGrid.getView().refresh();
        if(this.toSortField)
            this.toStore.sort(this.toSortField, this.toSortDir);
        if(this.allowDup)
            this.fromGrid.getSelectionModel().selectRows(selectionsArray);
        else 
            this.toGrid.getSelectionModel().selectRows(selectionsArray);    
    },
    onToFrom: function(){
        var records = this.toGrid.getSelectionModel().getSelections(); 
        var selectionsArray = [];
        if (records.length > 0) {
            
            for (var i=0; i<records.length; i++) {
                record = records[i];
                this.toStore.remove(record);
                if(!this.allowDup){
                    this.fromStore.add([record]);
                    selectionsArray.push((this.fromStore.getCount() - 1));
                }
            }
        }
        this.fromGrid.getView().refresh();
        this.toGrid.getView().refresh();
        if(this.fromSortField)
            this.fromStore.sort(this.fromSortField, this.fromSortDir);
        this.fromGrid.getSelectionModel().selectRows(selectionsArray);    
    },
    
	onDestroy:function(){

        this.toStore = null;
        this.toGrid = null;
        this.fromStore = null;
        this.fromGrid = null;
    }
});
Ext.reg('multiSelectWin',Ext.ux.MultiSelectWin);


截图


  • 大小: 5.1 KB
分享到:
评论

相关推荐

    Extjs MultiselectItemSelector

    MultiselectItemSelector

    rockyou.txt

    rockyou

    ASP+ACCESS网上人才信息管理系统(源代码+论文)【ASP】.zip

    ASP+ACCESS网上人才信息管理系统(源代码+论文)【ASP】

    河北金融学院经济大数据课设2024年 软科学校爬虫课设

    河北金融学院经济大数据课设2024年 软科学校爬虫课设

    widgetsnbextension-4.0.0b0-py3-none-any.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    协同过滤服务+源代码+文档说明

    - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

    基于ASP公交在线查询系统设计(源代码+论文)【ASP】.zip

    基于ASP公交在线查询系统设计(源代码+论文)【ASP】

    ASP.NET某中学图书馆系统的设计与实现(源代码+论文)【ASP】.zip

    ASP.NET某中学图书馆系统的设计与实现(源代码+论文)【ASP】

    ASP.NET猜数游戏的设计与开发(源代码+论文)【ASP】.zip

    ASP.NET猜数游戏的设计与开发(源代码+论文)【ASP】

    asp.net师电子化信息库的设计与实现(源代码+论文)【ASP】.zip

    asp.net师电子化信息库的设计与实现(源代码+论文)【ASP】

    2023-04-06-项目笔记 - 第一百五十六阶段 - 4.4.2.154全局变量的作用域-154 -2024.06.06

    2023-04-06-项目笔记-第一百五十六阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.154全局变量的作用域_154- 2024-06-06

    哈尔滨工程大学833社会研究方法2020考研专业课初试大纲.pdf

    哈尔滨工程大学考研初试大纲

    grpcio-1.27.2-cp36-cp36m-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于Java的大学生综合评测系统(源码+论文+数据库文件+演示视频).zip

    系统可以实现的功能有: 管理员: 用户管理:对管理员信息进行管理。 班级信息管理:添加和修改,管理班级信息,包括对班级人数,班主任姓名进行管理。 科目信息管理: 对科目的学时,学分,类型进行管理。 教师信息管理:管理教师的基本信息。 学生信息管理:学生班级,姓名,性别,电话,密码等信息进行管理。 学生成绩管理:普通成绩,德育加分,干部加分等成绩。 综合查询:通过学号和姓名,查询学生的平均成绩,干部,德育分数和总分。 普通管理员(教师) 班级信息管理:添加和修改,管理班级信息,包括对班级人数,班主任姓名进行管理。 科目信息管理: 对科目的学时,学分,类型进行管理。 教师信息管理:管理教师的基本信息。 学生信息管理:学生班级,姓名,性别,电话,密码等信息进行管理。 学生成绩管理:普通成绩,德育加分,干部加分等成绩。 综合查询:通过学号和姓名,查询学生的平均成绩,干部,德育分数和总分。 学生 个人资料:修改个人资料信息。 自我评价:对自己的基本情况进行评价。 综合查询:对个人的成绩,学年,课程的成绩进行查询,并能打印。

    ASP.NET+SQL房地产管理系统设计与实现(开题报告+源代码+论文+任务书+工作总结+答辩PPT)【ASP】.zip

    ASP.NET+SQL房地产管理系统设计与实现(开题报告+源代码+论文+任务书+工作总结+答辩PPT)【ASP】

    基于python+pyqt5开发的俄罗斯方块游戏源码+使用说明.zip

    基于python+pyqt5开发的俄罗斯方块游戏源码+使用说明.zip基于python+pyqt5开发的俄罗斯方块游戏源码+使用说明.zip 【优质项目推荐】 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 2.项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、项目初期立项演示等用途。 4.如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能。 功能 播放音乐 暂停游戏 消除方块的音效 窗口自由拖拽 游戏存档 安装和运行 ### 1. 使用`pip` ```shell # csdn下载此项目源码解压重命名为PyQt5-Tetris(不要有中文路径) 进入到项目 cd PyQt5-Tetris # 使用pip安装依赖 pip install -r requirements.txt # 运行 python main.py ``` ### 2. 使用`pipenv` ```shell # csdn下载此项目源码解压重命名为PyQt5-Tetris(不要有中文路径) # 进入到项目 cd PyQt5-Tetris # 使用pipenv安装依赖 pipenv sync # 运行 pipenv run start ``` ### 3. 按键说明 - `A` - 向左移动 - `D`- 向右移动 - `W` - 变形 - `S` - 加速下降 - `P` - 暂停 - `ESC` - 退出程序 ## PyInstaller 打包 ### 1. 使用`pip` ```shell # 安装依赖 pip install -r requirements-dev.txt # 打包,打包成功之后exe文件在dist文件夹下 pyinstaller main.spec ``` ### 2. 使用`pipenv` ```shell # 安装依赖 pipenv install --dev # 打包,打包成功之后exe文件在dist文件夹下 pipenv run build ```

    cryptography-3.4.7-cp36-abi3-macosx_10_10_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    华为OD机试华为OD机试华为OD机试2024最新最全真题

    2024版华为OD机试题库,包含C、D卷所有真题,粉丝可领取体验卡免费看题,包含面试手撕代码等等内容

    intel_openmp-2024.0.3-py2.py3-none-win32.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    ASP.NET基于CS结构的企业人事管理系统的设计与实现(源代码+论文)【ASP】.zip

    ASP.NET基于CS结构的企业人事管理系统的设计与实现(源代码+论文)【ASP】

Global site tag (gtag.js) - Google Analytics