第一个背景(包括它有帮助):
我的应用程序是最近升级到.Net Framework v3.5的基于Web的框架,但不使用母版页/用户控制系统.它更类似于MVC模式(虽然更旧),并从模板的响应流中输出纯HTML.Python表达式允许实现一些规则和模板变体.
旧的方式
在C#中嵌入IronPython 1.x引擎时,我们能够执行以下代码:
PythonEngine pe = new PythonEngine();
Assembly a = Assembly.LoadFile("path to assembly");
pe.LoadAssembly(a);
pe.Import("Script");
Run Code Online (Sandbox Code Playgroud)
ipy 2.0中没有Import()方法,并且ImportModule()方法似乎没有相同的工作方式.Import()减轻了在我们编写的每个python脚本中放置一行的需要,例如:
from MyAssembly import MyClass
Run Code Online (Sandbox Code Playgroud)
MyClass充满了静态方法,这意味着对MyClass.MyMethod()的调用非常有效.我不能只是实例化一个对象并将其分配给范围内的变量,因为包含MyClass的程序集是在运行时动态加载的.
现在问题
我已经整理了IronPython 2.0集成的所有其他部分,但是我不希望我的实现者在他们编写的每个脚本的顶部输入"来自MyAssembly import MyClass"(在ipy 1中没有必要时,这似乎很愚蠢) .x)也可能暂时成为一个支持问题.
最后问题
有人有这个问题并解决了吗?我是否以错误的方式为DLR做事?还是我错过了一些明显的东西?
我不确定有人提供帮助的细节,但我希望这已经足够了.
循环Python对象的方法并调用它们的正确方法是什么?
鉴于对象:
class SomeTest():
def something1(self):
print "something 1"
def something2(self):
print "something 2"
Run Code Online (Sandbox Code Playgroud) 因为我是Python粉丝,所以我想学习使用IronPython的.NET框架.我会错过什么吗?这在某种程度上不推荐吗?
编辑:我非常了解Java(因此学习/使用新语言对我来说不是问题).如果需要,我是否可以使用我在IronPython中学到的所有东西(不包括语言特征)来编写C#代码?
例如:如何将C:\ Program Files\Music_Files重命名为C:\ Program Files\MusicFiles
我可以看到控制台应用程序,WPF,WinForm等
但是没有图书馆,我只需要一个图书馆。
我该如何欺骗呢?还是没有办法用Iron Python创建库?
我最近发现了一个以Python为代码库的新项目.我之前从未做过Python - 来自C/C++编译代码世界.我遇到了一些了解我当前代码库的问题.
当我们编写代码时,我们有我们的库(比其他代码更通用的组件),以及我们的应用程序代码(应用该库的代码),对吧?在我以前参与过的项目中,我会将我的库代码和应用程序保存在一个项目文件夹中的包含文件夹中.在C/C++版本中,会有一个makefile(或一些make系统)将所有内容挂钩在一起,以便包含所有适当的工作.
Project/
Library/
Utilities.cpp
Application/
Main.cpp
makefile
Run Code Online (Sandbox Code Playgroud)
我现在进入的项目在site-packages文件夹中有自己的库,该文件夹本身位于IronPython/Python系统文件夹中.该库代码是我们的,并且仍然是"热门"并正在进行中.应用程序代码在系统的其他位置.
这似乎是糟糕的设计,但我的同行们坚持认为这只是"Python的工作方式".Python支持包含/导入.难道一切都不应该是自给自足的吗?像这样分散代码似乎很奇怪.
谢谢!
我能够创建Python脚本并通过Visual Studio/.NET 4.0动态运行它们,如下所示:
# testScript.py file:
import sys
sys.path.append(r'C:\Program Files (x86)\IronPython 2.7.1\Lib')
import os
os.environ['HTTP_PROXY'] = "127.0.0.1:8888"
import urllib2
response = urllib2.urlopen("http://www.google.com")
Run Code Online (Sandbox Code Playgroud)
然后在.NET 4.0 WinForms项目中:
ScriptEngine engine = Python.CreateEngine();
ScriptSource script = engine.CreateScriptSourceFromFile("testScript.py");
ScriptScope scope = engine.CreateScope();
script.Execute(scope);
Run Code Online (Sandbox Code Playgroud)
但是,我导入的IronPython DLL不包含所有标准模块,所以我必须这样做
import sys
sys.path.append(r'C:\Program Files (x86)\IronPython 2.7.1\Lib')
Run Code Online (Sandbox Code Playgroud)
步骤,以便我可以运行接下来的4行.
有什么方法可以避免这种情况吗?
我将发布应用程序,我不想依赖于每个人的机器上的文件路径相同!
请耐心等待,我是GUI编程,IronPython,WPF和.NET的新手.但是,我对Python非常熟悉.我浏览了很多在线教程,但似乎没有人能解决我面临的确切问题.(也许这是微不足道的?但对像我这样的人来说这并不是微不足道的!)
问题:我想知道如何从Windows.System.Application中将新的WPF窗口(XAML)作为新窗口启动.基本上,我想从我的应用程序的帮助菜单中启动一个"关于"对话框.我知道这可以通过使用System.Windows.Forms.Form来实现,但从长远来看,我希望能够通过使用XAML标记加载更复杂的窗口安排.
目前,当我单击关于菜单(mnuAboutClick)时,这会加载XAML窗口,但在此过程中替换/销毁原始主窗口(WpfMainWindow).我希望两个窗户都保持打开状态.
编辑:或者,有没有办法将xaml加载到System.Windows.Forms.Form?这将适合我的需要.
这是我的代码示例:
import wpf
from System.Windows import Application, Window
class MyWindow(Window):
def __init__(self):
wpf.LoadComponent(self, 'WpfMainWindow.xaml')
def mnuAboutClick(self, sender, e):
print 'About Menu Click'
wpf.LoadComponent(self, 'WpfAboutWindow.xaml') # How to launch "About Dialog", This works, but destroys "WpfMainWindow"!
if __name__ == '__main__':
Application().Run(MyWindow())
Run Code Online (Sandbox Code Playgroud) 大家早上好,
我已经在这个问题上工作了几天,但找不到解决方法。我已经研究过,但没有用谷歌搜索。任何帮助/见解将不胜感激。我正在尝试创建一个按钮,当单击该按钮时,它将自动通过日期过滤器(例如从1/1/15开始),并通过1/2 -1/5,随着新过滤的标记层逐步通过,从而更新地图功能。我已使过滤器逐步通过1 / 1-1 / 5;但是,它不会随着进度的进行而更新地图可视化效果,因此用户看到的只是从1/1到1/5的跳转,中间有一个暂停(每个步骤都有一个睡眠计时器)。我已经包含了下面的代码,我只是在学习IronPython,并且不确定刷新可视化需要调用什么。Visualization.Refresh()不起作用。非常感谢!
import Spotfire.Dxp.Application.Filters as filters
import Spotfire.Dxp.Application.Filters.ItemFilter
import time
from Spotfire.Dxp.Application.Filters import FilterTypeIdentifiers
from Spotfire.Dxp.Data import DataProperty, DataType, DataPropertyAttributes, DataPropertyClass
from Spotfire.Dxp.Application.Visuals import MarkerLayer
myPanel = Document.ActivePageReference.FilterPanel
myFilter= myPanel.TableGroups[2].GetFilter("Date (Daily)")
myFilter.FilterReference.TypeId = FilterTypeIdentifiers.ItemFilter
itemFilter = myFilter.FilterReference.As[filters.ItemFilter]()
whichCol = itemFilter.DataColumnReference
count = 0
while count < 5:
count = count +1
if (whichCol.Properties.PropertyExists("CurrentStep") == False):
myProp = DataProperty.CreateCustomPrototype("CurrentStep",0,DataType.Integer,DataPropertyAttributes.IsVisible|DataPropertyAttributes.IsEditable)
Document.Data.Properties.AddProperty(DataPropertyClass.Column, myProp)
whichCol.Properties.SetProperty("CurrentStep",0)
Document.Properties["DateTest"] = "1/1/15"
time.sleep(1)
else:
time.sleep(1)
whichVal = whichCol.Properties.GetProperty("CurrentStep")
#print whichVal
#print itemFilter.Values.Count
if …Run Code Online (Sandbox Code Playgroud) 我已经安装了IronPython
我的python文件看起来像这样:
import sys
print(sys.version)
import json
Run Code Online (Sandbox Code Playgroud)
运行它的代码:
var p = Python.CreateEngine();
var scope = p.CreateScope();
p.ExecuteFile("Test.py", scope);
Run Code Online (Sandbox Code Playgroud)
它输出:
2.7.7(.NET 4.0.30319.42000(32位)上的IronPython 2.7.7(2.7.7.0))
但是随后失败,但出现以下异常:
没有名为json的模块
据我了解,此版本的IronPython中应包含json模块。
为什么会出现此错误?