如何解决事件处理程序示例
我在Windows.Forms中编写了一个应用程序,想要切换到WPF以支持PickObject方法。
您能指导我如何从外部事件中获取价值吗? 基本上,我想从选择中获取元素-PickObjects()并将其名称传递给文本框。 我尝试了@CyrilWaechter的一些代码来进行简单或自定义事件处理程序,但失败了。 我基本上如何将值从event.Raise()方法传递给另一个,因为它不执行任何操作。 下面的代码使revit崩溃:
class ModelessForm(WPFWindow):
"""
Simple modeless form sample
"""
def __init__(self,xaml_file_name):
WPFWindow.__init__(self,xaml_file_name)
self.simple_text.Text = "Hello World"
self.Show()
def delete_click(self,sender,e):
reference = uidoc.Selection.PickObject(ObjectType.Element)
element = [doc.GetElement(x) for x in reference]
elf.txb1.Text = element.Name
# Let's launch our beautiful and useful form !
modeless_form = ModelessForm("ModelessForm.xaml")
Xaml:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Delete things:" Height="262.5" Width="298.79" ShowInTaskbar="False" Topmost="True"
WindowStartupLocation="CenterScreen" ScrollViewer.VerticalScrollBarVisibility="disabled" HorizontalContentAlignment="Center">
<StackPanel Margin="20" HorizontalAlignment="Stretch">
<TextBlock x:Name="simple_text" Text="" Grid.Column="0" HorizontalAlignment="Center" FontWeight="Bold"/>
<Button Content="Delete selected elements" Height="30" Margin="10,10" Click="pick_elements"/>
<TextBox x:Name="txb1" Height="23" textwrapping="Wrap" Text="TextBox"/>
</StackPanel>
</Window>
到目前为止,我在ModelessForm类之外尝试了以下方法:
def pick_elements():
reference = uidoc.Selection.PickObjects(ObjectType.Element)
elements = [doc.GetElement(x) for x in reference]
并使用
class SimpleEventHandler(IExternalEventHandler):
"""
Simple IExternalEventHandler sample
"""
# __init__ is used to make function from outside of the class to be executed by the handler. \
# Instructions Could be simply written under Execute method only
def __init__(self,do_this):
self.do_this = do_this
# Execute method run in Revit API environment.
def Execute(self,uiapp):
try:
self.do_this()
except InvalidOperationException:
# If you don't catch this exeption Revit may crash.
print "InvalidOperationException catched"
def GetName(self):
return "simple function executed by an IExternalEventHandler in a Form"
simple_event_handler = SimpleEventHandler(pick_elements)
# We Now need to create the ExternalEvent
ext_event = ExternalEvent.Create(simple_event_handler)
所以基本上我正在尝试:
def pick_elements():
reference = uidoc.Selection.PickObjects(ObjectType.Element)
elements = [doc.GetElement(x) for x in reference]
return elements
simple_event_handler = SimpleEventHandler(pick_elements)
# We Now need to create the ExternalEvent
ext_event = ExternalEvent.Create(simple_event_handler)
class ModelessForm(WPFWindow):
"""
Simple modeless form sample
"""
def __init__(self,xaml_file_name):
WPFWindow.__init__(self,xaml_file_name)
self.simple_text.Text = "Hello World"
self.Show()
def pick_elements(self,e):
*self.txb1.Text = ext_event.Raise()*
# Let's launch our beautiful and useful form !
modeless_form = ModelessForm("ModelessForm.xaml")
https://pythoncvc.net/?tag=externalevent-en
http://pythoncvc.net/?p=247
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。