Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions tests/test_autocompletewidgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
12 changes: 10 additions & 2 deletions ttkwidgets/autocomplete/autocompletecombobox.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,20 @@

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.

:param master: master widget
: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)
Expand Down Expand Up @@ -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
Expand Down