Combobox
A combobox widget combines an entry with a list of choices. This lets users either choose from a set of values you've provided (e.g., typical settings), but also put in their own value (e.g., for less common cases).
| Combobox widgets |
|---|
![]() |
Comboboxes are created using the ttk_combobox command:
#![allow(unused)] fn main() { parent.add_ttk_combobox( "country" -textvariable("country") )?; }
Like entries, the textvariable option links a variable in your program to the
current value of the combobox. As with other widgets, you should initialize the
linked variable in your own code.
A combobox will generate a event::virtual_event( "ComboboxSelected" ) that you
can bind to whenever its value changes. (You could also trace changes on the
textvariable, as we've seen in the previous few widgets we covered. Binding to
the event is more straightforward, and so tends to be our preferred choice.)
#![allow(unused)] fn main() { country.bind( event::virtual_event( "ComboboxSelected" ), script )?; }
Predefined Values
You can provide a list of values that users can choose from using the values
configuration option:
#![allow(unused)] fn main() { country.configure( -values([ "USA","Canada","Australia" ].as_slice() ))?; }
If set, the TtkState::ReadOnly state flag will restrict users to making
choices only from the list of predefined values, but not be able to enter their
own (though if the current value of the combobox is not in the list, it won't be
changed).
#![allow(unused)] fn main() { country.set_state( TtkState::ReadOnly )?; }
If you're using the combobox in
TtkState::ReadOnlymode, I'd recommend that when the value changes (i.e., on aevent::virtual_event("ComboboxSelected")), that you call theselection_clearmethod. It looks a bit odd visually without doing that.
You can also get the current value using the get method, and change the
current value using the set method (which takes a single argument, the new
value).
As a complement to the get and set methods, you can also use the current
method to determine which item in the predefined values list is selected. Call
current with no arguments; it will return a 0-based index into the list, or -1
if the current value is not in the list. You can select an item in the list by
calling current with a single 0-based index argument.
Want to associate some other value with each item in the list so that your program can use one value internally, but it gets displayed in the combobox as something else? You'll want to have a look at the section entitled "Keeping Extra Item Data" when we get to the discussion of listboxes in a couple of chapters from now.
Run Example
cargo run --example combobox
