diff --git a/tests/test_autocompletewidgets.py b/tests/test_autocompletewidgets.py index 0ac7ea70..71e764eb 100644 --- a/tests/test_autocompletewidgets.py +++ b/tests/test_autocompletewidgets.py @@ -29,6 +29,14 @@ def test_autocompletecombobox(self): box['completevalues'] = ["Test"] self.assertEqual(box['completevalues'], ["Test"]) + def test_autocompletecombobox_unsorted(self): + box = AutocompleteCombobox(self.window, completevalues=["Apple", "Pear", "Banana"], sort=False) + box.pack() + self.window.update() + + self.assertIn('completevalues', box.keys()) + self.assertEqual(box['completevalues'], ["Apple", "Pear", "Banana"]) + def test_autocompleteentry(self): entry = AutocompleteEntry(self.window, completevalues=["Apple", "Pear", "Banana"]) entry.pack() diff --git a/ttkwidgets/autocomplete/autocompletecombobox.py b/ttkwidgets/autocomplete/autocompletecombobox.py index 1b451139..26fa4938 100644 --- a/ttkwidgets/autocomplete/autocompletecombobox.py +++ b/ttkwidgets/autocomplete/autocompletecombobox.py @@ -15,7 +15,7 @@ class AutocompleteCombobox(ttk.Combobox): """:class:`ttk.Combobox` widget that features autocompletion.""" - def __init__(self, master=None, completevalues=None, **kwargs): + def __init__(self, master=None, completevalues=None, sort=True, **kwargs): """ Create an AutocompleteCombobox. @@ -23,9 +23,12 @@ def __init__(self, master=None, completevalues=None, **kwargs): :type master: widget :param completevalues: autocompletion values :type completevalues: list + :param sort: sort autocompletion values, default is True for backwards compatibility with older versions + :type sort: boolean (default: True) :param kwargs: keyword arguments passed to the :class:`ttk.Combobox` initializer """ ttk.Combobox.__init__(self, master, values=completevalues, **kwargs) + self._sort = sort self._completion_list = completevalues if isinstance(completevalues, list): self.set_completion_list(completevalues) @@ -74,7 +77,12 @@ def set_completion_list(self, completion_list): :param completion_list: completion values :type completion_list: list """ - self._completion_list = sorted(completion_list, key=str.lower) # Work with a sorted list + + # Clone the list to avoid unintentional modifications to the input list + self._completion_list = completion_list[:] + if self._sort: + # Work with a sorted list if sorting is enabled + self._completion_list.sort(key=str.lower) self.configure(values=completion_list) self._hits = [] self._hit_index = 0