我一直在尝试构建一个表单来创建和删除 Revit 打印集。
我有两个主要问题:
1) 我可以创建打印集,但除非我重新启动表单,否则我无法访问其内容。我收到以下错误(取决于我是否定义了 view_set 变量)
List_object_has_no_attribute_Views
Local_variable_referenced_before_assignment
这是显示所选打印集的工作表的函数代码
def DisplaySheetsInSet (self, sender, args):
self.curItem = CurrentSetsListBox.SelectedItem
PrintSetForm_Load
try:
view_set=[]
for i in PrintSetForm.ViewSets:
if i.Name == str(self.curItem):
view_set = i
else:
continue
Sheets=[sheet.Name for sheet in view_set.Views]
SheetsLb.BeginUpdate()
SheetsLb.Items.Clear()
for sheet in Sheets:
SheetsLb.Items.Add(sheet)
SheetsLb.EndUpdate()
except Exception as e:
popup (str(e)
2)我可以删除一次打印集。如果我尝试删除另一个,我会收到以下错误,我需要重新启动表单(删除打印集的函数代码如下所示)
The_referenced_object_is_not_valid
def DelPrintSet(self, sender, args):
self.curItem = CurrentSetsListBox.SelectedItems
t = Transaction (doc, 'Delete printset')
t.Start()
for viewset in PrintSetForm.ViewSets:
if viewset.Name in [str(item) for item in self.curItem]:
doc.Delete(viewset.Id)
doc.Regenerate()
else:
continue
self.Refresh()
UpdateSetNames(CurrentSetsListBox)
t.Commit()
我试图构建一个函数来重新启动/刷新表单,但它不起作用(下面的代码):
全局 PrintSetForm_Load
def PrintSetForm_Load(self, sender):
Application.Exit()
Application.Restart()
#self.Refresh()
#self.ResetBindings()
#self.ActiveForm.Close()
sd = PrintSetForm()
sd.ShowDialog()
此 gif 显示了正在运行的表单:
有什么想法或建议吗?
谢谢你。
3) 如果我尝试使用 DataSource 填充 SheetsLb,则只显示单击的第一个集合。
Sheets=[sheet.Name for sheet in view_set.Views]
SheetNumber=[sheet.get_Parameter(BuiltInParameter.SHEET_NUMBER).AsString() for sheet in view_set.Views]
SheetsLb.BeginUpdate()
SheetsLb.DataSource = None
SheetsLb.Items.Clear()
UpdatedList=[]
for number,name in zip(SheetNumber,Sheets):
UpdatedList.append(number+" - "+ name + " [ ] ")
SheetsLb.DataSource=UpdatedList
SheetsLb.EndUpdate()