IronPython WPF 与 RevitPythonShell

2024-02-11

我根据我在 stackoverflow 上找到的代码片段编写了此脚本,但在运行时出现此错误:

System.InvalidOperationException:无法创建多个 同一 AppDomain 中的 System.Windows.Application 实例。

我知道这与最后一个语句在同一个 AppDomain 中创建一个新的应用程序实例有关,但我不知道如何解决这个问题。 这是脚本:

clr.AddReference('PresentationCore')
clr.AddReference("PresentationFramework")
clr.AddReference('Microsoft.Dynamic')
clr.AddReference('Microsoft.Scripting')
clr.AddReference('System')
clr.AddReference('IronPython')
clr.AddReference('IronPython.Modules')
clr.AddReference('IronPython.Wpf')
from System.Windows import Application, Window
from IronPython.Modules import Wpf as wpf

class AboutWindow(Window):
    def __init__(selfAbout):
        wpf.LoadComponent( selfAbout, os.path.join( folder, 'AboutWindow.xaml' ))

class MyWindow(Window):
    def __init__(self):
        wpf.LoadComponent( self, os.path.join( folder, 'IronPythonWPF.xaml' ))

    def MenuItem_Click(self, sender, e):   
        form = AboutWindow()
        form.ShowDialog()

if __name__ == '__main__':
    Application().Run( MyWindow() )

This https://stackoverflow.com/questions/8047610/re-open-wpf-window-from-a-console-application似乎是解决方案,但不知道我需要修复该代码的哪些部分。

以下是两个 XAML 文件的内容:

__WIP__wpfTest__AboutWindow.xaml

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="AboutWindow" Height="300" Width="300">
    <Grid>
        <TextBlock Text="AboutWindow" />
    </Grid>
</Window>

__WIP__wpfTest__IronPythonWPF.xaml

<Window 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       Title="IronPythonWPF" Height="300" Width="300">
    <StackPanel>
        <Menu>
            <MenuItem Header="About" Click="MenuItem_Click" />
        </Menu>
        <TextBlock Text="MainWindow" />
    </StackPanel>
</Window> 

根据msdn,你应该能够使用橱窗秀 https://msdn.microsoft.com/en-us/library/system.windows.window.show(v=vs.110).aspx(对于无模式版本)或窗口显示对话框 https://msdn.microsoft.com/en-us/library/system.windows.window.showdialog(v=vs.110).aspx(如果您想留在 Revit API 上下文中)

The Application().Run( MyWindow() )line 基本上设置了一个事件循环 - Revit 在启动时已经为您完成了一些操作,因此您可以继续显示您的窗口:)

我无法真正测试这个解决方案,因为我没有AboutWindow.xaml and IronPythonWPF.xaml,所以我只是在这里猜测...尝试一下并告诉我进展如何。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IronPython WPF 与 RevitPythonShell 的相关文章

随机推荐