errorlog.xml 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <class name="Errorlog">
  2. <relationships>
  3. <association name="parent" class="A"/>
  4. </relationships>
  5. <constructor>
  6. <parameter name="constructor_parameters" type='dict' default='{}' />
  7. <body>
  8. self.entries = []
  9. self.parent = constructor_parameters['parent']
  10. self.entry_timers = []
  11. </body>
  12. </constructor>
  13. <destructor>
  14. <body>
  15. for entry in self.entries:
  16. entry.destroy()
  17. </body>
  18. </destructor>
  19. <scxml initial="main">
  20. <state id="main" initial='initializing'>
  21. <state id="initializing">
  22. <transition target="../ready"/>
  23. </state>
  24. <state id="ready">
  25. <transition event="errorlog_log" target=".">
  26. <parameter name="new_value"/>
  27. <script>
  28. [i.pack_forget() for i in self.entries]
  29. entry = tk.Label(self.parent, text=new_value, wraplength=150, bg="red", width=30)
  30. self.entries.append(entry)
  31. self.entry_timers.append(time.time() + 5)
  32. [i.pack(anchor=tk.N, fill=tk.X) for i in reversed(self.entries)]
  33. </script>
  34. </transition>
  35. <transition after="max(min(self.entry_timers + [1000 + time.time()]) - time.time(), 0)" target=".">
  36. <script>
  37. for i, v in enumerate(self.entry_timers):
  38. if v &lt; time.time():
  39. self.entries[i].config(bg="lightgrey")
  40. self.entry_timers[i] = float('inf')
  41. </script>
  42. </transition>
  43. </state>
  44. </state>
  45. </scxml>
  46. </class>