2009-02-26 3 views
1

Я разрабатываю приложение Windows Forms в IronPython Studio. Я хочу выбрать значок для моего проекта, но оба они не работают: 1- Окно свойств формы -> Значок (выберите файл * .ico) происходит ошибка компиляции и связана с файлом IronPython.targetsДоступ к встроенным ресурсам в IronPython

Задача «IronPythonCompilerTask» неожиданно провалилась. System.ArgumentNullException: Значение не может быть пустым.

2- добавить * .ico файл проекта (Project -> Add -> Existing Item) и в его свойствах, изменить 'Создать новое действие' на 'внедренный ресурс' Система теперь я не могу использовать. Reflection.Assembly, чтобы получить доступ к этому ресурсу мой код: (. Assembly.GetExecutingAssembly() GetManifestResourceStream ('IronPythonWinApp.myIcon.ico'))

self.Icon = Иконка

во время выполнения он выдает исключение:

Вызванный элемент боты поддерживаются в динамической сборке

Кто-нибудь знает лучше (лучше?) Способ добавить иконку к IronPython WinForms?

благодаря

ответ

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() 

В качестве альтернативы, вы можете загрузить значок, который включен в качестве встроенного ресурса в сборку .NET, который написан на C#, например.

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() 
Смежные вопросы