Skip to content

Commit dd46688

Browse files
committed
solve NODE_PROP_BUTTON function link issue
1 parent f998135 commit dd46688

File tree

4 files changed

+36
-21
lines changed

4 files changed

+36
-21
lines changed

NodeGraphQt/base/model.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@ def __init__(self):
9292
}
9393

9494
def add_property(self, name, value, items=None, range=None,
95-
widget_type=NODE_PROP, tab='Properties', ext=None):
95+
widget_type=NODE_PROP, tab='Properties',
96+
ext=None, funcs=None):
9697
"""
9798
add custom property.
9899
@@ -104,6 +105,7 @@ def add_property(self, name, value, items=None, range=None,
104105
widget_type (int): widget type flag.
105106
tab (str): widget tab name.
106107
ext (str) file ext for NODE_PROP_FILE
108+
funcs (list) functions for NODE_PROP_BUTTON
107109
"""
108110
tab = tab or 'Properties'
109111

@@ -125,6 +127,8 @@ def add_property(self, name, value, items=None, range=None,
125127
self._TEMP_property_attrs[name]['range'] = range
126128
if ext:
127129
self._TEMP_property_attrs[name]['ext'] = ext
130+
if funcs:
131+
self._TEMP_property_attrs[name]['funcs'] = funcs
128132
else:
129133
attrs = {self.type_: {name: {
130134
'widget_type': widget_type,
@@ -136,6 +140,8 @@ def add_property(self, name, value, items=None, range=None,
136140
attrs[self.type_][name]['range'] = range
137141
if ext:
138142
attrs[self.type_][name]['ext'] = ext
143+
if funcs:
144+
attrs[self.type_][name]['funcs'] = funcs
139145
self._graph_model.set_node_common_properties(attrs)
140146

141147
def set_property(self, name, value):
@@ -249,6 +255,7 @@ def to_dict(self):
249255
json.dumps(v)
250256
except:
251257
to_remove.append(k)
258+
252259
[custom_props.pop(k) for k in to_remove]
253260

254261
node_dict['custom'] = custom_props

NodeGraphQt/base/node.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,8 @@ def set_selected(self, selected=True):
237237
self.set_property('selected', selected)
238238

239239
def create_property(self, name, value, items=None, range=None,
240-
widget_type=NODE_PROP, tab=None, ext=None):
240+
widget_type=NODE_PROP, tab=None, ext=None,
241+
funcs=None):
241242
"""
242243
Creates a custom property to the node.
243244
@@ -269,8 +270,9 @@ def create_property(self, name, value, items=None, range=None,
269270
widget_type (int): widget flag to display in the ``PropertiesBinWidget``
270271
tab (str): name of the widget tab to display in the properties bin.
271272
ext (str): file ext of ``NODE_PROP_FILE``
273+
funcs (list) list of functions for NODE_PROP_BUTTON
272274
"""
273-
self.model.add_property(name, value, items, range, widget_type, tab, ext)
275+
self.model.add_property(name, value, items, range, widget_type, tab, ext, funcs)
274276

275277
def properties(self):
276278
"""
@@ -567,11 +569,8 @@ def add_file_input(self, name, label='', text='', tab=None, ext="*"):
567569
tab (str): name of the widget tab to display in.
568570
ext (str): file ext
569571
"""
570-
self.model.add_property(name, text, None, None, NODE_PROP_FILE, tab, ext)
571-
# use create_property will cause strange error
572-
# self.create_property(
573-
# name, text, widget_type=NODE_PROP_FILE, tab=tab, ext=None)
574-
572+
self.create_property(
573+
name, text, widget_type=NODE_PROP_FILE, tab=tab, ext=ext)
575574
widget = NodeFilePath(self.view, name, label, text, ext)
576575
widget.value_changed.connect(lambda k, v: self.set_property(k, v))
577576
self.view.add_widget(widget)

NodeGraphQt/widgets/properties.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -676,10 +676,12 @@ class PropButton(QtWidgets.QPushButton):
676676
def __init__(self, parent=None):
677677
super(PropButton, self).__init__(parent)
678678

679-
def set_value(self, value):
679+
def set_value(self, value, node=None):
680680
# value: list of functions
681+
if type(value) is not list:
682+
return
681683
for func in value:
682-
self.clicked.connect(func)
684+
self.clicked.connect(lambda: func(node))
683685

684686
def get_value(self):
685687
return None
@@ -876,6 +878,8 @@ def _read_node(self, node):
876878
widget.set_max(prop_range[1])
877879
if 'ext' in common_props[prop_name].keys():
878880
widget.set_ext(common_props[prop_name]['ext'])
881+
if 'funcs' in common_props[prop_name].keys():
882+
widget.set_value(common_props[prop_name]['funcs'], node)
879883

880884
prop_window.add_widget(prop_name, widget, value,
881885
prop_name.replace('_', ' '))

example_auto_nodes/node_base/auto_node.py

Lines changed: 16 additions & 11 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 NodeGraphQt import QtCore
4+
from Qt import QtCore
55
import hashlib
66
import copy
77
import time
@@ -25,7 +25,7 @@ def get(self, text, Min=50, Max=200):
2525
return self.colors[text]
2626

2727

28-
class AutoNode(BaseNode,QtCore.QObject):
28+
class AutoNode(BaseNode, QtCore.QObject):
2929
cooked = QtCore.Signal()
3030

3131
def __init__(self, defaultInputType=None, defaultOutputType=None):
@@ -75,7 +75,8 @@ def cookTime(self, time):
7575
def cookNextNode(self):
7676
for nodeList in self.connected_output_nodes().values():
7777
for n in nodeList:
78-
n.cook()
78+
if n is not self:
79+
n.cook()
7980

8081
def getData(self, port):
8182
# for custom output data
@@ -125,10 +126,10 @@ def cook(self, forceCook=False):
125126

126127
_start_time = time.time()
127128

128-
try:
129-
self.run()
130-
except Exception as error:
131-
self.error(error)
129+
#try:
130+
self.run()
131+
#except Exception as error:
132+
# self.error(error)
132133

133134
self._autoCook = _tmp
134135

@@ -202,8 +203,8 @@ def set_port_type(self, port, value_type):
202203
current_port.view.setToolTip('{}: {} ({}) '.format(current_port.name(), data_type_name, conn_type))
203204

204205
def create_property(self, name, value, items=None, range=None,
205-
widget_type=NODE_PROP, tab=None):
206-
super(AutoNode, self).create_property(name, value, items, range, widget_type, tab)
206+
widget_type=NODE_PROP, tab=None, ext=None, funcs=None):
207+
super(AutoNode, self).create_property(name, value, items, range, widget_type, tab, ext, funcs)
207208

208209
if value is not None:
209210
self.set_port_type(name, type(value))
@@ -235,7 +236,6 @@ def set_disabled(self, mode=False):
235236
else:
236237
self.cook()
237238

238-
239239
def _close_error(self):
240240
self._error = False
241241
self.set_property('color', self.defaultColor)
@@ -250,7 +250,7 @@ def _show_error(self, message):
250250
tooltip = '<font color="red"><br>({})</br></font>'.format(message)
251251
self._update_tool_tip(tooltip)
252252

253-
def _update_tool_tip(self, message = None):
253+
def _update_tool_tip(self, message=None):
254254
if message is None:
255255
tooltip = self._toolTip.format(self._cookTime)
256256
else:
@@ -269,3 +269,8 @@ def error(self, message=None):
269269
return self._error
270270

271271
self._show_error(message)
272+
273+
def update_model(self):
274+
if self.error():
275+
self.set_property('color', self.defaultColor)
276+
super(AutoNode, self).update_model()

0 commit comments

Comments
 (0)