首页 > 编程知识 正文

二次开发python的两个问题,python 求解二次规划问题

时间:2023-12-28 21:10:49 阅读:328715 作者:SOWR

本文目录一览:

python 二次开发中遇到的问题

import kcs_ui

import KcsVector3D

import kcs_draft

import kcs_draft

import kcs_gui

import kcs_util

import kcs_db

from KcsObjectCriteria import ObjectCriteria

import os

//以上导入python库

list = []/使用列表 数据结构

kcs_db.object_list_get(ObjectCriteria(),"SB_PDB",list)//从数据库读取图纸列表到list中存储起来

list = map(lambda x : x.GetName(), list)//在list中建立键值映射

n = len(list) //求出list长度

req = kcs_ui.answer_req("prompt","There are %d piece of drawing.Do you want to export."%n)//询问是否导出

if req == kcs_util.yes()://若是

os.makedirs(r'e:dxf')//建立目录

for i in range(n)://遍历list中的元素

name = list[i]

dxfname = name.replace(":","_")//做名字处理

kcs_draft.dwg_open(name)//打开文件

kcs_draft.dwg_dxf_export('e:\dxf\%s.dxf'%dxfname)//导出到该文件

kcs_draft.dwg_close()//关闭文件

kcs_ui.message_confirm("Export is succeed")//打印成功信息

Arcgis Engine二次开发用python可以吗?

1.自定义工具箱是什么

就像名字一样,自定义工具箱是由个人创建的工具箱,就像下面这样,可以理解成一个 .tbx 后缀的压缩包,每一个工具箱中都可以添加多个工具集、脚本工具甚至模型构建器工具。

一大堆工具箱

1.1如何添加自定义工具箱(熟悉可跳过)

第一步:右键点击 ArcToolbox - 添加工具箱

第二步:在打开的添加工具箱窗口中选中需要添加的工具,然后点击右下角的打开即可。

添加工具箱到 Arcmap

1.2如何创建自定义工具箱

点击右上角的红色工具箱符号,可以新建并重命名一个工具箱。

我们这里新创建了一个海怪工具箱,用于之后的教程演示。

新建工具箱

1.3添加一个脚本工具

新创建的工具箱就像一个大箱子,箱子呢是用来装工具的,你可以直接在工具箱中右键,然后点击添加,再点击脚本,进而创建一个脚本工具;

亦或是右键,点击新建,再点击工具集,创建一个可以自定义名称的工具集,然后在工具集里新建一个脚本工具。

这里添加的脚本工具只是一个空壳,我们后面会继续完善。

新建的工具箱位于 ../Chapter7/海怪工具箱.tbx。

2.工具箱的封装

工具箱由三部分组成,其中有两部分需要我们来控制:

一是输入界面:确定工具箱输入界面的参数定义和设置;

二是 Python 源代码:功能的实现,为 .py 后缀的脚本文件;

三是对参数行为提供额外控制的可选验证代码,其位于工具箱中(这部分自带,基本上不用修改)。

所以下面的重点就是输入界面和 Python 源代码。

2.1工具箱输入界面

工具箱输入界面,或者说图形交互界面(GUI),就像下面的几张图一样,从该界面我们可以控制工具的行为,自定义输入界面然后配合 Python 脚本,可以实现多种客制化的功能。

简单来说,你可以认为输入界面是依托于 Arcmap 的“前端”,脚本代码就是负责运行的“后端”。

导入导出工具:

为方便演示,制作一个非常简单的工具箱,它的功能呢就是把输入的要素类(数据库或者 shp )再导出来而已,是完全没有用的导入导出功能啦,不过作为演示还是非常不错的。

制作完成后的导入导出工具的界面

第一步:

在工具箱中,右键点击添加,再点击脚本,然后修改名称,修改成你想要的名字,勾选存储相对路径名,然后点击下一页。

修改名称

第二步:

然后添加脚本文件,添加该脚本文件 ../Chapter7/toolscript/input_and_output.py,读者可以在最后的下载包中找到该文件。

然后点击下一页。

链接python脚本

第三步:

控制用户交互界面。ArcGIS 在这里内置了一整套简单但是实用的图形控件,比如输入菜单、下拉框、多选框、单选等,借由这些图形控件我们可以控制脚本工具的图形交互界面。

我们这里使用的脚本功能非常简单,上面也有说到:输入一个矢量要素类,不做任何处理,然后输出一个矢量要素类。

为了匹配这个脚本,我们需要设置一个输入图层的控件,同时为了能顺利的输出,也需要一个输出图层的控件,注意一个是输入一个是输出。

从下图可以看到,左边(左边的橙色框)是显示名称,其中输入输出控件的名称以及输入控件的名称,这里命名为输入要素和输出要素;然后在右边(右边的橙色框)的数据类型下拉框中,我们选择要素图层,这里只能做选择,不能任意输入。

设置名称和数据类型

那么输入输出是如何区分的呢?

选中输入要素(变成蓝色),然后可以看到下方(下方橙色框)的参数属性设置选项卡,这里可以对参数进行调整。

参数选项

① 类型:有三种,一般只会用到 Required 和 Optional,表示必须和可选,用于控制参数是否可以忽略不填;

② 方向: 两种,Input 和 Output,表示输入和输出,大部分情况都是使用 Input 来获得参数,Output 用于获得最后的成果数据,像是矢量、栅格或者图表;

③ 多值:Yes 或者 No,用于输入多个相同类型的数据,工具打开后就是下面这样,在输入要素中可输入多个要素类;

④ 默认:设置一个控件的默认值,直接输入即可。可配合多值一同使用,使用 ; (英文的分号)分开,

结果如下,可以看到一打开该工具就已经填充上了预设的多个默认值(报错是因为数据类型不是要素图层);

⑤ 环境:工具箱的环境设置,比如掩膜、容差范围、默认数据库位置等,一般不预先设置;

⑥ 过滤器:选择文件类型可以在选择文件时只显示特定格式的文件;

⑦ 获取自:指定数据的获取源。这是个什么意思呢?比如我们想要获取图层A的某个字段,获取源就是图层A。

以下面这种图作为例子,新增名为字段的控件(上方的橙色框),数据类型也是字段,然后参数属性中获取自选择输入要素(下方橙色框)。

设置字段控件

点击完成后,打开脚本工具。在输入要素框中选择一个图层,然后再点击获取字段,如下就可以选择图层中的字段了。

获取图层的字段

⑧ 符号系统:在最下面还有一个符号系统,通常只能作用于输出的矢量图层(方向:Output),可为输出图层指定设置好的 lyr 文件样式。

设置符号系统

第四步:

点击右下方的完成,那么脚本工具的输入界面就完成了。

2.2 Python 脚本

工具箱输入界面和 Python 代码要相互配合才行,工具箱界面中的输入、输出以及各种各样的参数,在 Python 脚本文件中都得一一对应上,将输入界面中的各个参数传给 Python 脚本,这样才能让 Python 脚本按照预期的效果正常运行。

看上去有点麻烦,但实际上 arcpy 中提供了现成的函数就可以直接获得参数。

①参数对接(获取)

至于如何对接参数,我们使用刚刚的那个脚本文件举例:

../Chapter7/toolscript/input_and_output.py

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

import arcpy

#▶1◀

input_lyr = arcpy.GetParameterAsText(0)

output = arcpy.GetParameterAsText(1)

if __name__ == '__main__':

lyr = arcpy.mapping.Layer(input_lyr)

arcpy.CopyFeatures_management(lyr, output)

▶1◀:arcpy 提供了 GetParameterAsText(index) 函数,该函数根据输入界面的排序号码获得指定的参数。比如 GetParameterAsText(0) 获得的就是输入图层参数, GetParameterAsText(1) 获得的就是第二个参数,也就是输出图层参数。

如果有更多参数,以此类推。

②参数对接中应该注意的情况

GetParameterAsText(index) 从输入界面获得的参数都会转变成字符串,没错都是字符串。

如果你只是输入输出地址这种,那么没有问题,因为地址本来就是字符串,但是如果你设置了一个选择长度范围的长整型的控件、亦或是某种布尔值选择,最后输入到 python 脚本这里都会变成字符串。

整数变成字符串,使用 int(str) 规避;

布尔型变成字符串,True 变成了 "True",False 变成了 "False",这样就不能判断真假了,需要写一个判断语句或者随便你,方法很多;

还有就是一个输入控件多值的情况,所有值根据先后连接成一个字符串,中间由 、(英文分号)间隔,可以使用 split 函数分开;

Python二次开发是什么意思

1、Python含义

Python 是一种面向对象的动态类型语言,如今被广泛用于独立的、大型项目的开发。

2、二次开发的含义

二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能,一般来说都不会改变原有系统的内核。

3、Python二次开发

Python二次开发顾名思义就是将Python作为脚本语言对系统进行定制修改,功能扩展,从而让系统变得更全面,便于企业的长远发展。市面上系统支持用Python进行二次开发不少,例如:百数搭建的系统就支持用Python进行二次开发,有需要的小伙伴们可以了解一下。

如何用Python进行微信二次开发

创建步骤:

1.申请免费且支持python的服务器,新浪云sae,新建SAE应用之后,有两种代码提交方式,建议使用SVN(因为git支持代码提交,但不支持环境配置);

2.将对应版本的信息复制到微信开发-基本配置-URL,提交显示错误,因为还没有写代码,可以先用web框webpy架写个网页;

查看webpy使用说明:

查看ase进行python开发入门说明:

3.配置信息,告诉新浪云需要什么运行环境。点击代码管理-编辑代码,将用到的第三方库信息写入config.yaml,注意破折号,冒号后面空格!!

libraries:

- name: webpy

  version: "0.36"

- name: lxml

  version: "2.3.4"

在index.wsgi文件中写入python启动程序

新建文件,写入接受微信get请求验证的Python文件

4.在index.wgsi中写入以下信息:

#coding=utf-8

import os

import sae

import web

from weixinInterface import WeixinInterface

#配置web的路由

urls = (

    '/weixin','WeixinInterface'

)

#拼接路径

app_root=os.path.dirname(__file__)

templates_root = os.path.join(app_root,'templates')

#渲染模版

render = web.template.render(templates_root)

#启动app

app = web.application(urls,globals()).wsgifunc()

application = sae.create_wsgi_app(app)

5.在自己编写的Python文件中写入微信验证和接受信息的程序

#coding=utf-8

import hashlib

import web

import time

import os

from lxml import etree

#hashlib用于加密,md5,hash等

#lxml用来解析xml文件

class WeixinInterface(object):

    #初始化

    def __init__(self):

        #拼接路径

        self.app_root = os.path.dirname(__file__)

        self.templates_root = os.path.join(self.app_root,'templates')

        #渲染模版

        self.render = web.template.render(self.templates_root)

    #使用get方法,接收微信的get请求,看开发者文档的说明

    #

    def GET(self):

        data = web.input()

        signature = data.signature#微信加密签名

        timestamp = data.timestamp#时间戳

        nonce = data.nonce#随机数

        echostr = data.echostr#随即字符串

        token = 'zq90857'#自己设置的token

        #将token、timestamp、nonce三个参数进行字典序排序

        list = [token,timestamp,nonce]

        list.sort()

        #将三个参数字符串拼接成一个字符串进行sha1加密

        sha1=hashlib.sha1()

        map(sha1.update,list)

        temStr = sha1.hexdigest()#加密

        #判断

        if temStr == signature:

            return echostr

6.假设接收文字信息,按照开发者文档的要求,配置template文件夹下reply_text.xml文件

$def with(toUser,fromUser,createtime,content)

xml

 ToUserName![CDATA[$toUser]]/ToUserName

 FromUserName![CDATA[$fromUser]]/FromUserName 

 CreateTime$createtime/CreateTime

 MsgType![CDATA[text]]/MsgType

 Content![CDATA[$content]]/Content

 /xml

python用pyautocad进行cad二次开发,连接总是出错OSError: [WinError -2147024156] 请求的操作需要提升

有可能是权限问题

启动python的时候 先用管理员身份打开命令行,然后再执行python

关于ABAQUS二次开发使用的Python版本问题?

不用。abaqus中的python是2.7版本的,即使你不装python编译器,也可以运行的。 你可以直接在PDE中使用python编程。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。