爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3374|回复: 4

脚本程序问题

[复制链接]

新浪微博达人勋

发表于 2014-7-29 20:52:43 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
我是刚开始学MI,用的是最新1.1.3版本。按照帮助文档中方法运行demo_map.py时出现下面这样的错误,请问这是怎么回事?

Traceback (most recent call last):
  File "<string>", line 37, in <module>
AttributeError: 'MIApp' object has no attribute 'SetTitle'

如果把那个语句注释掉,再运行还会出现下面的错误:
Traceback (most recent call last):
  File "<string>", line 45, in <module>
SystemError: 在单个线程上开始另一个消息循环是无效操作。请改用 Form.ShowDialog。

程序代码:和帮助文档里的完全一样
import clr
clr.AddReferenceByPartialName("System.Windows.Forms")
clr.AddReferenceByPartialName("System.Drawing")
from System.Windows.Forms import *
from System.Drawing import *
clr.AddReference("MeteoInfoC.dll")
from MeteoInfoC import *

myApp = MIApp()
myApp.OpenLayer(".\\Map\\country1.shp")
myApp.SetLegendBreak("country1.shp",0,Color.Yellow,Color.Blue,1,True,False,True)
myApp.OpenGrADSData(".\\Sample\\model.ctl")
myApp.SetDrawType("shaded")
t = 2
myApp.TimeIndex = t
myApp.Display("PS")
myApp.MoveLayerToTop("country1.shp")
myApp.SetTitle("MeteoInfo script demo")
myApp.ProjectLayers("+proj=moll+lon_0=105")
myApp.MapLayout.Refresh()
#myApp.SaveFigure(".\\try.png")
Application.Run(myApp)

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-7-29 21:12:54 | 显示全部楼层
37行指的是:myApp.SetTitle("MeteoInfo script demo")
45行指的是:Application.Run(myApp)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-7-30 08:13:54 | 显示全部楼层
另外,我的系统是WIN7 32位的,MI是1.1.3的C#版。麻烦指导一下问题在哪?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-7-30 12:10:20 | 显示全部楼层
L-S-Y 发表于 2014-7-30 08:13
另外,我的系统是WIN7 32位的,MI是1.1.3的C#版。麻烦指导一下问题在哪?

那个脚本程序已经过时了,文档没有及时更新。
可以用下面这个脚本程序:
  1. #---- Import classes
  2. import clr
  3. clr.AddReferenceByPartialName("System.Windows.Forms")
  4. clr.AddReferenceByPartialName("System.Drawing")
  5. from System.Windows.Forms import *
  6. from System.Drawing import *
  7. clr.AddReference("MeteoInfoC.dll")
  8. from MeteoInfoC import MIApp
  9. from MeteoInfoC.Data.MapData import MapDataManage
  10. from MeteoInfoC.Data.MeteoData import MeteoDataInfo
  11. from MeteoInfoC.Data.MeteoData import DrawMeteoData
  12. from MeteoInfoC.Legend import LegendManage
  13. from MeteoInfoC.Legend import LegendType
  14. from MeteoInfoC.Shape import ShapeTypes
  15. from MeteoInfoC.Projections import ProjectionInfo
  16. from MeteoInfoC.Layout import LegendStyles
  17. import os.path

  18. #---- Set directory
  19. baseDir = 'D:/MyProgram/Distribution/CSharp/MeteoInfo/MeteoInfo'
  20. dataDir = os.path.join(baseDir, 'Sample/GrADS')
  21. mapDir = os.path.join(baseDir, 'Map')
  22. figDir = 'D:/Temp/test'

  23. #---- Create MIApp object
  24. myApp = MIApp()
  25. mapLayout = myApp.MapLayout
  26. layoutMap = mapLayout.ActiveLayoutMap
  27. mapFrame = layoutMap.MapFrame
  28. mapView = mapFrame.MapView
  29. layoutMap.DrawNeatLine = False

  30. #---- Open country layer
  31. countryLayer = MapDataManage.OpenLayer(os.path.join(mapDir, 'country1.shp'))
  32. lb = countryLayer.LegendScheme.LegendBreaks[0]
  33. lb.DrawFill = False
  34. lb.OutlineColor = Color.Blue
  35. mapFrame.AddLayer(countryLayer)

  36. #---- Open model data
  37. mdi = MeteoDataInfo()
  38. mdi.OpenGrADSData(os.path.join(dataDir, 'model.ctl'))
  39. #---- Set time index
  40. mdi.TimeIndex = 2
  41. #---- Get pressure grid data
  42. gdata = mdi.GetGridData('PS')
  43. gdata.ExtendToGlobal()
  44. #---- Create legend scheme
  45. ls = LegendManage.CreateLegendSchemeFromGridData(gdata, LegendType.GraduatedColor, ShapeTypes.Polygon)
  46. #---- Create pressure shaded layer
  47. pressLayer = DrawMeteoData.CreateShadedLayer(gdata, ls, 'Pressure', 'PS')
  48. #---- Add layer
  49. mapFrame.AddLayer(pressLayer)
  50. #--- Move pressure layer to bottom
  51. mapFrame.MoveLayerToBottom(pressLayer)
  52. #---- Add title
  53. title = mapLayout.AddText('MeteoInfo script demo', 350, 50, 'Arial', 12)
  54. #---- Project mapview
  55. projInfo = ProjectionInfo('+proj=moll+lon_0=105')
  56. mapView.ProjectLayers(projInfo)
  57. #---- Add legend
  58. legend = mapLayout.AddLegend(150, 420)
  59. legend.LegendStyle = LegendStyles.Bar_Horizontal
  60. legend.LegendLayer = pressLayer
  61. #---- Output figure
  62. mapLayout.PaintGraphics()
  63. #mapLayout.ExportToPicture(os.path.join(figDir, 'pressure_test.png'))

  64. #---- Show application form
  65. #Application.Run(myApp)
  66. myApp.Show()



Image00711.png

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-7-30 16:46:42 | 显示全部楼层
谢谢版主耐心解答,现在可以了。
慢慢学习
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表