Die ganz kurze Version. Ich will in diesem def hier den for Loop limitieren dass er pro Pluginaktivierung nur einmal läuft. Das ermittelt mir die Strings. Und die müssen ja nicht jeden Loop neu berechnet werden. Das frisst nur Ressourcen:
Code: Alles auswählen
# the mode text.
def draw_modetext(self, context, obj):
# ------------- String Variables
move_obj_string =""
# ------------ Get the hotkeys -------------------------------------------------
wm = bpy.context.window_manager # Blender window manager
keymaps_3DV = wm.keyconfigs['Blender User'].keymaps['3D View'] # 3D View hotkeys, Blender User for actual hotkeys
for (item, km) in keymaps_3DV.keymap_items.items(): # all the items in the tuple for 3D View
# ------------- Move object
try:
if item == 'transform.translate'":
move_obj_string += km.type
except:
move_obj_string = "not defined"
Das def hier wird natürlich von einer class aufgerufen.
In Unity ist das Arbeiten mit Variablen eigentlich ganz einfach. Oben in der Klasse hinschreiben zum definieren. Und dann kann man im gesamten File damit arbeiten. Und die Variable so ändern wie man lustig ist. Und diese Variable behält dann auch ihren Wert. In Unity hätte ich hier also einfach eine Flag eingebaut, auf False getestet, den Code abgearbeitet, und die Flag dann auf True gestellt. Done.
In Pyhton scheint die Sache ein wenig verzwickter zu sein. Denn in der Klasse lässt mich das Vieh die Variable nicht setzen. Meckert mir dann im def von wegen Referenzfehler. Und wenn ich die Variable im def deklariere, dann wird mir diese Variable bei jedem Aufruf sofort wieder auf False gesetzt. Definiere ich sie ausserhalb der Klasse bekomme ich einen Referenzfehler. Mache ich sie global muss ich sie erst wieder in einer Klasse definieren. Und sie wird wieder bei jedem Durchlauf auf False ... So wirds natürlich niemals was von wegen Kondition beenden weil die Variable True ist ^^
Auch nach längerem Suchen werde ich da einfach nicht fündig. Wie deklariere ich denn in Python eine Variable so dass ich mit dem Wert auch arbeiten kann? Und mir das nicht jedesmal wieder auf den Initiierungswert gesetzt wird? Ich steh hier grad echt komplett auf dem Schlauch ^^