2009-02-26 64 views
1

Je développe une application Windows Forms dans IronPython Studio. Je souhaite choisir une icône pour mon projet mais les deux échouent: 1- Fenêtre Propriétés du formulaire -> Icône (choisir un fichier * .ico) une erreur de compilation se produit et est liée au fichier IronPython.targetsAccès aux ressources incorporées dans IronPython

La tâche "IronPythonCompilerTask" a échoué de façon inattendue. System.ArgumentNullException: La valeur ne peut pas être nulle.

2- ajouter un fichier * .ico à Project (Projet -> Ajouter -> Article existant) et dans ses propriétés, changer le 'Build action' pour «ressources Embedded maintenant je ne peux pas utiliser le système. Reflection.Assembly pour accéder à cette ressource mon code: (. Assembly.GetExecutingAssembly() GetManifestResourceStream ('IronPythonWinApp.myIcon.ico'))

self.Icon = Icône

dans l'exécution il jette une exception:

Le membre est invoqué dans un bot pris en charge l'assemblage dynamique

Est-ce que quelqu'un sait mieux (mieux?) Façon d'ajouter une icône à un WinForms IronPython?

grâce

Répondre

5

IronPython est un langage de script dynamique; il est interprété à l'exécution à partir des fichiers de script eux-mêmes, plutôt que d'être compilé dans un assembly. Comme il n'existe aucun assembly compilé, vous ne pouvez pas avoir de ressource incorporée. Voici deux façons d'ajouter une icône à un formulaire dans IronPython:

D'abord, vous pouvez inclure l'icône en tant que fichier lâche à côté des scripts Python. Vous pouvez ensuite créer l'objet icône en transmettant le nom de fichier de l'icône au constructeur System.Drawing.Icon. Voici un exemple de ce scénario, où le script python principal et l'icône sont déployés dans le même répertoire. Le script utilise la solution trouvée here pour trouver le répertoire.

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

Vous pouvez charger une icône qui est inclus comme une ressource incorporée dans un assembly .NET qui est écrit en C#, par exemple.

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