Python UI pop-up goes to the background

Hi all,

I have a question, I try to build my script without any custom nodes and use python instead.
When I use the Data-Shape UI and try to select elements the pop-up window doesn’t “disappear” and stays in the foreground.

But when I use my python script and click the select button, the pop-up windows goes to the background.
Does someone know how I can change this?

import clr #.NET Laden
import sys #sys is de fundamentele Python bibliotheek
#de standaard IronPython-bibliotheken
#sys.path.append('C:\Program Files (x86)\IronPython 2.7\Lib') #Imports the
#standaard IronPython-bibliotheken, die alles dekken, van servers en
#encryptie tot reguliere expressies.
import System #The System namespace in de hoofdmap .NET
from System import Array #.NET class voor het verwerken van array-informatie
import System.Collections.Generic as MGen #Module kan nu benaderd worden met MGen.xxxx
#from System.Collections.Generic import * #Hiermee kunt u generieke afhandelen. Revit's API
#soms wil hard-getypte 'generieke' lijsten, genaamd ILists. Als je niet nodig hebt
#deze kunt u deze regel verwijderen.
clr.AddReference('ProtoGeometry')  #Een Dynamo-bibliotheek voor zijn proxygeometrie
#classes. Je hebt dit alleen nodig als je interactie hebt met geometrie.
import Autodesk.DesignScript.Geometry as AGeo #Module kan worden opgeroepen a=met AGeo.xxxx
#from Autodesk.DesignScript.Geometry import * #Laadt alles in Dynamo's
#geometriebibliotheek
clr.AddReference("RevitNodes") #Dynamo's nodes voor Revit
import Revit #Laad in de Revit-namespaces in RevitNodes
clr.ImportExtensions(Revit.Elements) #Meer laden van Dynamo's Revit-bibliotheken
clr.ImportExtensions(Revit.GeometryConversion) #Meer laden van Dynamo's
#Revit-bibliotheken. Je hebt dit alleen nodig als je interactie hebt met geometrie.
clr.AddReference("RevitServices") #Dynamo's classes voor het omgaan met Revit-documenten
import RevitServices 
from RevitServices.Persistence import DocumentManager #Een interne Dynamo class
#dat het document bijhoudt waaraan Dynamo momenteel is gekoppeld
from RevitServices.Transactions import TransactionManager #Een Dynamo class voor
#transacties openen en sluiten om de database van het Revit-document te wijzigen

clr.AddReference("RevitAPI") #Verwijzing naar Revit's API DLL's toevoegen
clr.AddReference("RevitAPIUI") #Verwijzing naar Revit's APIUI DLL's toevoegen

import Autodesk #Loads the Autodesk namespace
import Autodesk.Revit.DB as RDB #Loading Revit's API UI classes module kan nu worden aangeroepen met RDB.xxxx
#from Autodesk.Revit.DB import * #Loading Revit's API UI classes
import Autodesk.Revit.UI as RUI # Loading Revit's API UI classes als RUI.xxxx
#from Autodesk.Revit.UI import * #Loading Revit's API UI classes
import Autodesk.Revit.UI.Selection as RSel #Revit Select

def GetName(ele):
	elename = None
 	try:
 		elename = ele.Name
 	except:
 		elename = RDB.Element.Name.__get__(ele)
 	return elename 

doc = DocumentManager.Instance.CurrentDBDocument #Dit is het actieve Revit document
uiapp = DocumentManager.Instance.CurrentUIApplication #Een handle instellen voor het actieve Revit UI-document
app = uiapp.Application  #Een handle instellen op de momenteel geopende instantie van de Revit-toepassing
uidoc = uiapp.ActiveUIDocument #Een handle instellen op de momenteel geopende instantie van de Revit UI-toepassing

clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

import System.Drawing
import System.Windows.Forms

from System.Drawing import *
from System.Windows.Forms import *

class MySelectionFilter(RSel.ISelectionFilter):
	def __init__(self):
		pass
	def AllowElement(self, element):
		if element.Category.Name.Contains("Tag"):
			return True
		else:
			return False
	def AllowReference(self, element):
		return False


class Gebruikersinvoer(Form):
	def __init__(self):
		self.out = []
		self.selectElems = []
		self.InitializeComponent()
	
	def InitializeComponent(self):	
		self._button1 = System.Windows.Forms.Button()
		self._button2 = System.Windows.Forms.Button()
		self.SuspendLayout()
		# 
		# Voltooien button
		# 
		self._button1.Location = System.Drawing.Point(210, 15)
		self._button1.Name = "button1"
		self._button1.Size = System.Drawing.Size(200, 27)
		self._button1.TabIndex = 2
		self._button1.Text = "Voltooien"
		self._button1.UseVisualStyleBackColor = True
		self._button1.Click += self.Button1Click
		# 
		# Selectie button
		# 	
		self._button2.Location = System.Drawing.Point(10, 15)
		self._button2.Name = "button2"
		self._button2.Size = System.Drawing.Size(200, 27)
		self._button2.TabIndex = 1
		self._button2.Text = "Selecteer elementen"
		self._button2.UseVisualStyleBackColor = True
		self._button2.Click += self.Button2Click
		
		#	
		# MainForm
		# 
		self.AutoSize = True
		self.ClientSize = System.Drawing.Size(275, 50)
		self.Controls.Add(self._button1)
		self.Controls.Add(self._button2)
		self.MaximizeBox = False
		self.MinimizeBox = False
		self.Name = "MainForm"
		self.ShowIcon = False
		self.Text = "Tags uitlijnen"
		self.ResumeLayout(False)
		self.PerformLayout()
		
		
	def Button1Click(self, sender, e):
		self.Close()  
		
	def Button2Click(self, sender, e):
		try:
			if sender.Click:
				refs = uidoc.Selection.PickObjects(RSel.ObjectType.Element, MySelectionFilter())
				self.selectElems = [doc.GetElement(ref) for ref in refs]
		except:
			None
		
form = Gebruikersinvoer()
Application.Run(form)


OUT = form.selectElems
1 Like

Fixed:

		self.Text = "Tags uitlijnen"
		self.ResumeLayout(False)
		self.PerformLayout()

Must be:

		self.Text = "Tags uitlijnen"
		self.TopMost = True
		self.ResumeLayout(False)
		self.PerformLayout()
7 Likes

Just wanted to say I appreciate the annotation in the code here. Great work. :slight_smile:

2 Likes

Thanks @jacob.small :slight_smile:

1 Like