Skip to content

Commit fbd11e2

Browse files
committed
add dynamic change the combobox widget menu
1 parent dd46688 commit fbd11e2

File tree

5 files changed

+41
-10
lines changed

5 files changed

+41
-10
lines changed

NodeGraphQt/base/node.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,21 @@ def add_output(self, name='output', multi_output=True, display_name=True,
704704
self.model.outputs[port.name()] = port.model
705705
return port
706706

707+
def update_combo_menu(self, name, items):
708+
if not self.has_property(name):
709+
return
710+
old_value = self.get_property(name)
711+
self.set_property(name, items)
712+
_name = '_'+name+"_"
713+
if not self.has_property(_name):
714+
self.create_property(_name, items)
715+
else:
716+
self.set_property(_name, items)
717+
if old_value in items:
718+
self.set_property(name, old_value)
719+
else:
720+
self.set_property(name, items[0])
721+
707722
def inputs(self):
708723
"""
709724
Returns all the input ports from the node.

NodeGraphQt/qgraphics/node_base.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,9 @@ def get_widget(self, name):
691691
return widget
692692
raise NodeWidgetError('node has no widget "{}"'.format(name))
693693

694+
def has_widget(self, name):
695+
return name in self._widgets.keys()
696+
694697
def delete(self):
695698
for port, text in self._input_items.items():
696699
port.delete()

NodeGraphQt/widgets/node_widgets.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,10 @@ def value(self):
192192

193193
@value.setter
194194
def value(self, text=''):
195+
if type(text) is list:
196+
self._combo.clear()
197+
self._combo.addItems(text)
198+
return
195199
if text != self.value:
196200
index = self._combo.findText(text, QtCore.Qt.MatchExactly)
197201
self._combo.setCurrentIndex(index)

NodeGraphQt/widgets/properties.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,9 @@ def get_value(self):
245245
return self.currentText()
246246

247247
def set_value(self, value):
248+
if type(value) is list:
249+
self.set_items(value)
250+
return
248251
if value != self.get_value():
249252
idx = self.findText(value, QtCore.Qt.MatchExactly)
250253
self.setCurrentIndex(idx)
@@ -871,7 +874,11 @@ def _read_node(self, node):
871874
widget.setMinimumHeight(min_widget_height)
872875
if prop_name in common_props.keys():
873876
if 'items' in common_props[prop_name].keys():
874-
widget.set_items(common_props[prop_name]['items'])
877+
_prop_name = '_' + prop_name + "_"
878+
if node.has_property(_prop_name):
879+
widget.set_items(node.get_property(_prop_name))
880+
else:
881+
widget.set_items(common_props[prop_name]['items'])
875882
if 'range' in common_props[prop_name].keys():
876883
prop_range = common_props[prop_name]['range']
877884
widget.set_min(prop_range[0])

example_auto_nodes/node_base/auto_node.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from NodeGraphQt.base.node import BaseNode
22
from NodeGraphQt.base.port import Port
33
from NodeGraphQt.constants import NODE_PROP
4-
from Qt import QtCore
4+
from NodeGraphQt import QtCore
55
import hashlib
66
import copy
77
import time
@@ -83,10 +83,12 @@ def getData(self, port):
8383
return self.get_property(port.name())
8484

8585
def getInputData(self, port):
86-
# get input data by input Port,the type of "port" can be :
87-
# int : Port index
88-
# str : Port name
89-
# Port : Port object
86+
"""
87+
get input data by input Port,the type of "port" can be :
88+
int : Port index
89+
str : Port name
90+
Port : Port object
91+
"""
9092

9193
if type(port) is int:
9294
to_port = self.input(port)
@@ -126,10 +128,10 @@ def cook(self, forceCook=False):
126128

127129
_start_time = time.time()
128130

129-
#try:
130-
self.run()
131-
#except Exception as error:
132-
# self.error(error)
131+
try:
132+
self.run()
133+
except Exception as error:
134+
self.error(error)
133135

134136
self._autoCook = _tmp
135137

0 commit comments

Comments
 (0)