访问IronPython中的嵌入式资源

时间:2009-02-26 10:37:59

标签: ironpython icons ironpython-studio

我正在IronPython Studio中开发Windows窗体应用程序。 我想为我的项目选择一个Icon,但这两个都失败了: 1-表单属性窗口 - >图标(选择* .ico文件) 发生编译时错误并与IronPython.targets文件

相关
  

“IronPythonCompilerTask”任务   意外失败了。   System.ArgumentNullException:Value   不能为空。

2-我将* .ico文件添加到Project(项目 - >添加 - >现有项目),并在其属性中将“Build Action”更改为“Embedded Resource” 现在我无法使用System.Reflection.Assembly来访问此资源 我的代码:

  

self.Icon = Icon(Assembly.GetExecutingAssembly()。GetManifestResourceStream('IronPythonWinApp.myIcon.ico'))

在运行时它抛出异常:

  

调用的成员在动态程序集中受机器人支持

有没有人知道向IronPython WinForms添加图标的更好(最佳?)方式?

感谢

1 个答案:

答案 0 :(得分:5)

IronPython是一种动态脚本语言;它在运行时从脚本文件本身解释,而不是编译成程序集。由于没有已编译的程序集,因此您无法拥有嵌入式资源。以下是在IronPython中向表单添加图标的两种方法:

首先,您可以将图标作为松散文件包含在python脚本旁边。然后,您可以通过将图标文件名传递给System.Drawing.Icon构造函数来创建图标对象。以下是此场景的示例,其中主python脚本和图标部署在同一目录中。该脚本使用找到的解决方案here来查找目录。

import clr
clr.AddReference('System.Drawing')
clr.AddReference('System.Windows.Forms')

import os
import __main__
from System.Drawing import Icon
from System.Windows.Forms import Form

scriptDirectory = os.path.dirname(__main__.__file__)
iconFilename = os.path.join(scriptDirectory, 'test.ico')
icon = Icon(iconFilename)

form = Form()
form.Icon = icon
form.ShowDialog()

或者,您可以加载一个图标,该图标作为嵌入式资源包含在用C#编写的.NET程序集中。

import clr
clr.AddReference('System.Drawing')
clr.AddReference('System.Windows.Forms')

from System.Drawing import Icon
from System.Reflection import Assembly
from System.Windows.Forms import Form

assembly = Assembly.LoadFile('C:\\code\\IconAssembly.dll')
stream = assembly.GetManifestResourceStream('IconAssembly.Resources.test.ico')
icon = Icon(stream)

form = Form()
form.Icon = icon
form.ShowDialog()