[Python] Event Handlers to change selection from Combobox

Discussão em 'Python' iniciado por Stack, Junho 10, 2025.

  1. Stack

    Stack Membro Participativo

    I'm implementing a UI using WPF to create grids in Revit. To allow users to switch between numeric values ('1, 2, 3, ...') and alphabetic values ('A, B, C, ...') for grid names, I used a ComboBox, as shown below.

    [​IMG]

    However, I'm struggling to set up event handlers to manage the selection for each grid orientation (X and Y) and to prevent the user from selecting the same values for both X and Y.

    Xaml code

    <!-- Symbol Type for Lx -->
    <DockPanel Margin="0,0,0,10">
    <TextBlock Text="Type de symbole Lx:" Width="120"/>
    <ComboBox x:Name="dropdown_symbol_x" Width="150" HorizontalAlignment="Right" >
    <ComboBoxItem Content="1 2 3 ..." />
    <ComboBoxItem Content="A B C ..." />
    </ComboBox>
    </DockPanel>

    <!-- Symbol Type for Ly -->
    <DockPanel Margin="0,0,0,10">
    <TextBlock Text="Type de symbole Ly:" Width="120"/>
    <ComboBox x:Name="dropdown_symbol_y" Width="150" HorizontalAlignment="Right" >
    <ComboBoxItem Content="1 2 3 ..." />
    <ComboBoxItem Content="A B C ..." />
    </ComboBox>
    </DockPanel>


    python code

    class Grids(Window):
    def __init__(self):
    # wpf.LoadComponent(self, StringReader(Grids.LAYOUT))
    # # Symbol sets
    self.all_symbols_numeric = ['1', '2', '3', '4', '5'] # Numeric
    self.all_symbols_alpha = ['A', 'B', 'C', 'D', 'E'] # Alphabetic
    self.selected_symbol_x = None
    self.selected_symbol_y = None
    self.data = {}

    self.ShowDialog()

    def _collect_input_data(self):
    """Collect and convert input data from the UI"""
    # Identify which key has missing or invalid input and alert the user
    if not self.input_Lx.Text:
    forms.alert("Please enter a valid value for : Lx")
    elif not self.input_Ly.Text:
    forms.alert("Please enter a valid value for : Ly")
    elif not self.input_extension.Text:
    forms.alert("Please enter a valid value for : e")
    elif not self.input_dx.Text:
    forms.alert("Please enter a valid value for : dx")
    elif not self.input_dy.Text:
    forms.alert("Please enter a valid value for : dy")
    elif self.select_symbol_x.ItemsSource is None:
    forms.alert("Please select symbols for : Sx")
    elif self.select_symbol_y.ItemsSource is None:
    forms.alert("Please select symbols for : Sy")
    if self.select_symbol_x.SelectedItem == self.select_symbol_y.SelectedItem:
    forms.alert("Symbols for Lx and Ly must be different.")

    else:
    try:
    self.data = {
    "Lx": _input_to_meters(self.input_Lx.Text),
    "Ly": _input_to_meters(self.input_Ly.Text),
    "e": _input_to_meters(self.input_extension.Text),
    "dx": _input_to_meters(self.input_dx.Text),
    "dy": _input_to_meters(self.input_dy.Text),
    "Sx": [self.select_symbol_x.SelectedItem],
    "Sy": [self.select_symbol_y.SelectedItem]
    }
    except ValueError:
    forms.alert(
    "Invalid input detected. "
    "Please ensure all inputs are numeric where required."
    )

    def OK_Clicked(self, sender, e):
    self._collect_input_data()
    # self.data
    if not self.data:
    return
    self.Close()

    def Cancel_Clicked(self, sender, e):
    self.Close()

    Continue reading...

Compartilhe esta Página