Fix Parameter.hasDefault (#1275)

When a default value is not set, hasDefault returns False. If
default=None is passed, hasDefault still returns False.
This commit is contained in:
Kenneth Lyons 2020-06-24 21:35:05 -07:00 committed by GitHub
parent 302d66dd67
commit b41c4a71e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 3 deletions

View File

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
from ..Qt import QtGui, QtCore
import os, weakref, re
from ..pgcollections import OrderedDict
@ -188,13 +189,11 @@ class Parameter(QtCore.QObject):
self.addChildren(self.opts.pop('children', []))
self.opts['value'] = None
if value is not None:
self.setValue(value)
if 'default' not in self.opts:
self.opts['default'] = None
self.setDefault(self.opts['value'])
## Connect all state changed signals to the general sigStateChanged
self.sigValueChanged.connect(lambda param, data: self.emitStateChanged('value', data))
@ -420,7 +419,7 @@ class Parameter(QtCore.QObject):
def hasDefault(self):
"""Returns True if this parameter has a default value."""
return 'default' in self.opts
return self.opts['default'] is not None
def valueIsDefault(self):
"""Returns True if this parameter's value is equal to the default value."""

View File

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
import pytest
from pyqtgraph.parametertree import Parameter
def test_parameter_hasdefault():
opts = {'name': 'param', 'type': int, 'value': 1}
# default unspecified
p = Parameter(**opts)
assert not p.hasDefault()
p.setDefault(1)
assert p.hasDefault()
assert p.defaultValue() == 1
# default specified
p = Parameter(default=0, **opts)
assert p.hasDefault()
assert p.defaultValue() == 0
@pytest.mark.parametrize('passdefault', [True, False])
def test_parameter_hasdefault_none(passdefault):
# test that Parameter essentially ignores defualt=None, same as not passing
# a default at all
opts = {'name': 'param', 'type': int, 'value': 0}
if passdefault:
opts['default'] = None
p = Parameter(**opts)
assert not p.hasDefault()
assert p.defaultValue() is None
p.setDefault(None)
assert not p.hasDefault()