dropdown.xml 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <class name="DropDown">
  2. <relationships>
  3. <association name="parent" class="A"/>
  4. </relationships>
  5. <!-- This is a hack to put some code before the super is called for tk.OptionMenu -->
  6. <method name="construct_strvar">
  7. <parameter name="parent"/>
  8. <parameter name="value"/>
  9. <body>
  10. self.strvar = tk.StringVar(parent)
  11. self.strvar.set(value)
  12. self.strvar.trace('w', lambda a, b, c: self.controller.addInput(Event("change_dropdown", "input", [id(self), self.strvar.get()])))
  13. return self.strvar
  14. </body>
  15. </method>
  16. <constructor>
  17. <parameter name="constructor_parameters" type='dict' default='{}' />
  18. <body>
  19. self.dropdown = tk.OptionMenu(constructor_parameters['parent'], self.construct_strvar(constructor_parameters['parent'], constructor_parameters['value']), *constructor_parameters['options'])
  20. self.name = constructor_parameters['name']
  21. print("Options: " + str(constructor_parameters['options']))
  22. </body>
  23. </constructor>
  24. <destructor>
  25. <body>
  26. self.dropdown.destroy()
  27. </body>
  28. </destructor>
  29. <scxml initial="main">
  30. <state id="main" initial='initializing'>
  31. <state id="initializing">
  32. <transition target="../ready">
  33. <raise event="tk_widget" scope="narrow" target="'parent'">
  34. <parameter expr="self.dropdown"/>
  35. </raise>
  36. </transition>
  37. </state>
  38. <state id="ready">
  39. <transition port='input' event="change_dropdown" target='.' cond='tagorid == id(self)'>
  40. <parameter name='tagorid'/>
  41. <parameter name='new_value'/>
  42. <raise event="changed_dropdown" scope="narrow" target="'parent'">
  43. <parameter expr="self.name"/>
  44. <parameter expr="new_value"/>
  45. </raise>
  46. </transition>
  47. <transition event="change_event_name" target=".">
  48. <parameter name="new_name"/>
  49. <script>
  50. self.name = new_name
  51. </script>
  52. </transition>
  53. </state>
  54. </state>
  55. </scxml>
  56. </class>