symetrie-hexapod 2023.1.0__tar.gz → 2024.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. symetrie_hexapod-2024.1.4/.gitignore +35 -0
  2. symetrie_hexapod-2024.1.4/PKG-INFO +23 -0
  3. symetrie_hexapod-2024.1.4/README.md +1 -0
  4. symetrie_hexapod-2024.1.4/pyproject.toml +64 -0
  5. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/__init__.py +23 -7
  6. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/alpha.py +35 -50
  7. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/dynalpha.py +2 -3
  8. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/hexapod_ui.py +17 -15
  9. symetrie_hexapod-2024.1.4/src/egse/hexapod/symetrie/joran.py +266 -0
  10. symetrie_hexapod-2024.1.4/src/egse/hexapod/symetrie/joran.yaml +62 -0
  11. symetrie_hexapod-2024.1.4/src/egse/hexapod/symetrie/joran_cs.py +184 -0
  12. symetrie_hexapod-2024.1.4/src/egse/hexapod/symetrie/joran_protocol.py +128 -0
  13. symetrie_hexapod-2024.1.4/src/egse/hexapod/symetrie/joran_ui.py +449 -0
  14. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/puna.yaml +5 -5
  15. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/puna_ui.py +5 -5
  16. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/punaplus.py +1 -1
  17. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/zonda.py +3 -3
  18. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/zonda.yaml +21 -21
  19. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/zonda_cs.py +1 -0
  20. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/zonda_ui.py +5 -5
  21. symetrie_hexapod-2023.1.0/PKG-INFO +0 -10
  22. symetrie_hexapod-2023.1.0/pyproject.toml +0 -36
  23. symetrie_hexapod-2023.1.0/setup.cfg +0 -4
  24. symetrie_hexapod-2023.1.0/src/symetrie_hexapod.egg-info/PKG-INFO +0 -10
  25. symetrie_hexapod-2023.1.0/src/symetrie_hexapod.egg-info/SOURCES.txt +0 -27
  26. symetrie_hexapod-2023.1.0/src/symetrie_hexapod.egg-info/dependency_links.txt +0 -1
  27. symetrie_hexapod-2023.1.0/src/symetrie_hexapod.egg-info/entry_points.txt +0 -11
  28. symetrie_hexapod-2023.1.0/src/symetrie_hexapod.egg-info/requires.txt +0 -5
  29. symetrie_hexapod-2023.1.0/src/symetrie_hexapod.egg-info/top_level.txt +0 -1
  30. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/__init__.py +0 -0
  31. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/pmac.py +0 -0
  32. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/pmac_regex.py +0 -0
  33. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/puna.py +0 -0
  34. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/puna_cs.py +0 -0
  35. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/puna_protocol.py +0 -0
  36. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/zonda_devif.py +0 -0
  37. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/egse/hexapod/symetrie/zonda_protocol.py +0 -0
  38. {symetrie_hexapod-2023.1.0 → symetrie_hexapod-2024.1.4}/src/scripts/cgse_service_plugins.py +0 -0
@@ -0,0 +1,35 @@
1
+ # Python versions and environment
2
+
3
+ __pycache__
4
+ .python-version
5
+ .envrc
6
+
7
+ # Build systems
8
+
9
+ build
10
+ dist
11
+ **/*.egg-info
12
+
13
+ # Apple specific
14
+
15
+ .DS_Store
16
+
17
+ # Unit testing
18
+
19
+ .pytest_cache
20
+ .coverage
21
+ htmlcov
22
+
23
+ # Virtual environments
24
+
25
+ .env
26
+ .venv
27
+ venv
28
+
29
+ # PyCharm IDE
30
+
31
+ .idea
32
+
33
+ # Packaging
34
+
35
+ uv.lock
@@ -0,0 +1,23 @@
1
+ Metadata-Version: 2.4
2
+ Name: symetrie-hexapod
3
+ Version: 2024.1.4
4
+ Summary: Symetrie Hexapod implementation for CGSE
5
+ Author: IVS KU Leuven
6
+ Maintainer-email: Rik Huygen <rik.huygen@kuleuven.be>, Sara Regibo <sara.regibo@kuleuven.be>
7
+ License-Expression: MIT
8
+ Keywords: CGSE,Common-EGSE,hardware testing,software framework
9
+ Requires-Python: >=3.9
10
+ Requires-Dist: cgse-common
11
+ Requires-Dist: cgse-coordinates
12
+ Requires-Dist: cgse-core
13
+ Requires-Dist: cgse-gui
14
+ Requires-Dist: invoke
15
+ Requires-Dist: paramiko
16
+ Requires-Dist: pyqt5>=5.15.11
17
+ Provides-Extra: test
18
+ Requires-Dist: pytest; extra == 'test'
19
+ Requires-Dist: pytest-cov; extra == 'test'
20
+ Requires-Dist: pytest-mock; extra == 'test'
21
+ Description-Content-Type: text/markdown
22
+
23
+ # Drivers for the Symétrie Hexapods
@@ -0,0 +1 @@
1
+ # Drivers for the Symétrie Hexapods
@@ -0,0 +1,64 @@
1
+ [project]
2
+ name = "symetrie-hexapod"
3
+ version = "2024.1.4"
4
+ description = "Symetrie Hexapod implementation for CGSE"
5
+ authors = [
6
+ {name = "IVS KU Leuven"}
7
+ ]
8
+ maintainers = [
9
+ {name = "Rik Huygen", email = "rik.huygen@kuleuven.be"},
10
+ {name = "Sara Regibo", email = "sara.regibo@kuleuven.be"}
11
+ ]
12
+ readme = {"file" = "README.md", "content-type" = "text/markdown"}
13
+ requires-python = ">=3.9"
14
+ license = "MIT"
15
+ keywords = [
16
+ "CGSE",
17
+ "Common-EGSE",
18
+ "hardware testing",
19
+ "software framework"
20
+ ]
21
+ dependencies = [
22
+ "cgse-common",
23
+ "cgse-core",
24
+ "cgse-gui",
25
+ "cgse-coordinates",
26
+ "PyQt5>=5.15.11",
27
+ "paramiko",
28
+ "invoke"
29
+ ]
30
+
31
+ [project.optional-dependencies]
32
+ test = ["pytest", "pytest-mock", "pytest-cov"]
33
+
34
+ [project.scripts]
35
+ puna_cs = 'egse.hexapod.symetrie.puna_cs:cli'
36
+
37
+ [project.gui-scripts]
38
+ puna_ui = "egse.hexapod.symetrie.puna_ui:main"
39
+
40
+ [project.entry-points."cgse.version"]
41
+ symetrie-hexapod = 'egse.plugins'
42
+
43
+ [project.entry-points."cgse.service.plugins"]
44
+ puna_cs = 'scripts.cgse_service_plugins:puna_cs'
45
+
46
+ [tool.hatch.build.targets.sdist]
47
+ exclude = [
48
+ "/tests",
49
+ "/pytest.ini",
50
+ "/.gitignore",
51
+ ]
52
+
53
+ [tool.hatch.build.targets.wheel]
54
+ packages = ["src/egse", "src/scripts"]
55
+
56
+ [tool.ruff]
57
+ line-length = 120
58
+
59
+ [tool.ruff.lint]
60
+ extend-select = ["E501"]
61
+
62
+ [build-system]
63
+ requires = ["hatchling"]
64
+ build-backend = "hatchling.build"
@@ -1,33 +1,41 @@
1
1
  """
2
- Device control for the Symétrie Hexapod PUNA and ZONDA.
2
+ Device control for the Symétrie Hexapod PUNA, ZONDA, and JORAN.
3
3
 
4
- This package contains the modules and classes to work with the Hexapod PUNA and the Hexapod ZONDA
4
+ This package contains the modules and classes to work with the Hexapod PUNA, the Hexapod ZONDA, and the Hexapod JORAN
5
5
  from [Symétrie](www.symetrie.fr).
6
6
 
7
7
  The main entry point for the user of this package is through the terminal commands to start the
8
- control servers for the PUNA and ZONDA Hexapod, and the GUIs that are provided to interact with
9
- the hexapods. The following commands start the control servers for both the PUNA and the ZONDA
8
+ control servers for the PUNA, ZONDA, and JORAN Hexapod, and the GUIs that are provided to interact with
9
+ the hexapods. The following commands start the control servers for the PUNA, ZONDA, and JORAN
10
10
  in the background.
11
11
 
12
12
  $ puna_cs start-bg
13
13
  $ zonda_cs start-bg
14
+ $ joran_cs start-bg
14
15
 
15
16
  The GUIs can be started with the following commands:
16
17
 
17
18
  $ puna_ui
18
19
  $ zonda_ui
20
+ $ joran_ui
19
21
 
20
- For developers, the `PunaProxy` and `ZondaProxy` classes are the main interface to command the
22
+ For developers, the `PunaProxy`, `ZondaProxy`, and `JoranProxy` classes are the main interface to command the
21
23
  hardware.
22
24
 
25
+ For the PUNA:
23
26
  >>> from egse.hexapod.symetrie.puna import PunaProxy
24
27
  >>> puna = PunaProxy()
25
28
 
26
- and for the ZONDA:
29
+ For the ZONDA:
27
30
 
28
31
  >>> from egse.hexapod.symetrie.zonda import ZondaProxy
29
32
  >>> zonda = ZondaProxy()
30
33
 
34
+ For the JORAN:
35
+
36
+ >>> from egse.hexapod.symetrie.joran import JoranProxy
37
+ >>> joran = JoranProxy()
38
+
31
39
  These classes will connect to their control servers and provide all commands to
32
40
  control the hexapod and monitor its positions and status.
33
41
 
@@ -113,6 +121,10 @@ class ProxyFactory(DeviceFactoryInterface):
113
121
  from egse.hexapod.symetrie.zonda import ZondaProxy
114
122
  return ZondaProxy()
115
123
 
124
+ elif "joran" in device_name.lower():
125
+ from egse.hexapod.symetrie.joran import JoranProxy
126
+ return JoranProxy()
127
+
116
128
  else:
117
129
  raise ValueError(f"Unknown device name: {device_name}")
118
130
 
@@ -121,7 +133,7 @@ class ControllerFactory(DeviceFactoryInterface):
121
133
  """
122
134
  A factory class that will create the Controller that matches the given device name and identifier.
123
135
 
124
- The device name is matched against the string 'puna' or 'zonda'. If the device name doesn't contain
136
+ The device name is matched against the string 'puna', 'zonda', or 'joran'. If the device name doesn't contain
125
137
  one of these names, a ValueError will be raised.
126
138
  """
127
139
  def create(self, device_name: str, *, device_id: str = None, **_ignored):
@@ -147,5 +159,9 @@ class ControllerFactory(DeviceFactoryInterface):
147
159
  from egse.hexapod.symetrie.zonda import ZondaController
148
160
  return ZondaController()
149
161
 
162
+ elif "joran" in device_name.lower():
163
+ from egse.hexapod.symetrie.joran import JoranController
164
+ return JoranController()
165
+
150
166
  else:
151
167
  raise ValueError(f"Unknown device name: {device_name}")
@@ -22,7 +22,7 @@ class AlphaControllerInterface:
22
22
  for 30 seconds which should complete the cycle, i.e. this command will
23
23
  only return after 30 seconds.
24
24
 
25
- .. Note::
25
+ Note:
26
26
  This command is equivalent to power cycling the controller manually.
27
27
 
28
28
  """
@@ -47,7 +47,7 @@ class AlphaControllerInterface:
47
47
  Returns:
48
48
  0 on success.
49
49
  Raises:
50
- HexapodError: when there is a time out or when there is a communication error with
50
+ HexapodError: when there is a timeout or when there is a communication error with
51
51
  the hexapod.
52
52
  """
53
53
  raise NotImplementedError
@@ -76,7 +76,7 @@ class AlphaControllerInterface:
76
76
  return_code: 0 on success, -1 when ignored
77
77
 
78
78
  Raises:
79
- HexapodError: when the arguments do not match up, or when there is a time out or when
79
+ HexapodError: when the arguments do not match up, or when there is a timeout or when
80
80
  there is a
81
81
  socket communication error.
82
82
 
@@ -85,12 +85,12 @@ class AlphaControllerInterface:
85
85
 
86
86
  @dynamic_interface
87
87
  def stop(self):
88
- """Stop the current motion. This command can be send during a motion of the Hexapod.
88
+ """Stop the current motion. This command can be sent during a motion of the Hexapod.
89
89
 
90
90
  Returns:
91
91
  0 on success.
92
92
  Raises:
93
- HexapodError: when there is a time out or when there is a communication error with
93
+ HexapodError: when there is a timeout or when there is a communication error with
94
94
  the hexapod.
95
95
  """
96
96
  raise NotImplementedError
@@ -114,7 +114,7 @@ class AlphaControllerInterface:
114
114
  Returns:
115
115
  0 on success, -1 when ignored, -2 on error.
116
116
  Raises:
117
- HexapodError: when there is a time out or when there is a communication error with
117
+ HexapodError: when there is a timeout or when there is a communication error with
118
118
  the hexapod
119
119
  hardware controller.
120
120
  """
@@ -127,7 +127,7 @@ class AlphaControllerInterface:
127
127
  Returns:
128
128
  0 on success.
129
129
  Raises:
130
- HexapodError: when there is a time out or when there is a communication error with
130
+ HexapodError: when there is a timeout or when there is a communication error with
131
131
  the hexapod.
132
132
  """
133
133
  raise NotImplementedError
@@ -136,7 +136,7 @@ class AlphaControllerInterface:
136
136
  def jog(self, axis: int, inc: float) -> int:
137
137
  """Perform a JOG-type movement on the specified actuator.
138
138
 
139
- .. note::
139
+ Note:
140
140
  This is a maintenance feature.
141
141
 
142
142
  Args:
@@ -145,7 +145,7 @@ class AlphaControllerInterface:
145
145
  Returns:
146
146
  0 on success, -1 if command was ignored due to non-compliance.
147
147
  Raises:
148
- HexapodError: when there is a time out or when there is a communication error with
148
+ HexapodError: when there is a timeout or when there is a communication error with
149
149
  the hexapod.
150
150
  """
151
151
  raise NotImplementedError
@@ -262,44 +262,29 @@ class AlphaControllerInterface:
262
262
 
263
263
  Args:
264
264
  tx_u (float): translation parameter that define the user coordinate system relative
265
- to the
266
- machine coordinate system [in mm]
265
+ to the machine coordinate system [in mm]
267
266
  ty_u (float): translation parameter that define the user coordinate system relative
268
- to the
269
- machine coordinate system [in mm]
267
+ to the machine coordinate system [in mm]
270
268
  tz_u (float): translation parameter that define the user coordinate system relative
271
- to the
272
- machine coordinate system [in mm]
273
-
269
+ to the machine coordinate system [in mm]
274
270
  rx_u (float): rotation parameter that define the user coordinate system relative to
275
- the machine
276
- coordinate system [in deg]
271
+ the machine coordinate system [in deg]
277
272
  ry_u (float): rotation parameter that define the user coordinate system relative to
278
- the machine
279
- coordinate system [in deg]
273
+ the machine coordinate system [in deg]
280
274
  rz_u (float): rotation parameter that define the user coordinate system relative to
281
- the machine
282
- coordinate system [in deg]
283
-
275
+ the machine coordinate system [in deg]
284
276
  tx_o (float): translation parameter that define the object coordinate system relative
285
- to the
286
- platform coordinate system [in mm]
277
+ to the platform coordinate system [in mm]
287
278
  ty_o (float): translation parameter that define the object coordinate system relative
288
- to the
289
- platform coordinate system [in mm]
279
+ to the platform coordinate system [in mm]
290
280
  tz_o (float): translation parameter that define the object coordinate system relative
291
- to the
292
- platform coordinate system [in mm]
293
-
294
- rx_o (float): rotation parameter that define the object coordinate system relative to
295
- the
296
- platform coordinate system [in deg]
297
- ry_o (float): rotation parameter that define the object coordinate system relative to
298
- the
299
- platform coordinate system [in deg]
300
- rz_o (float): rotation parameter that define the object coordinate system relative to
301
- the
302
- platform coordinate system [in deg]
281
+ to the platform coordinate system [in mm]
282
+ rx_o (float): rotation parameter that define the object coordinate system relative to the platform
283
+ coordinate system [in deg]
284
+ ry_o (float): rotation parameter that define the object coordinate system relative to the platform
285
+ coordinate system [in deg]
286
+ rz_o (float): rotation parameter that define the object coordinate system relative to the platform
287
+ coordinate system [in deg]
303
288
 
304
289
  Returns:
305
290
  0 on success and -1 when the configuration is ignored, e.g. when password protection
@@ -506,7 +491,7 @@ class AlphaControllerInterface:
506
491
 
507
492
  @dynamic_interface
508
493
  def get_user_positions(self):
509
- """Retreive the current position of the hexapod.
494
+ """Retrieve the current position of the hexapod.
510
495
 
511
496
  The returned position corresponds to the position of the Object Coordinate System
512
497
  in the User Coordinate System.
@@ -515,13 +500,13 @@ class AlphaControllerInterface:
515
500
  array: an array of six float values for Tx, Ty, Tz, Rx, Ry, Rz.
516
501
  None: when an Exception was raised and logs the error message.
517
502
 
518
- .. note:: This is equivalent to the POSUSER? command.
503
+ Note: This is equivalent to the POSUSER? command.
519
504
  """
520
505
  raise NotImplementedError
521
506
 
522
507
  @dynamic_interface
523
508
  def get_machine_positions(self):
524
- """Retreive the current position of the hexapod.
509
+ """Retrieve the current position of the hexapod.
525
510
 
526
511
  The returned position corresponds to the position of the Platform Coordinate System
527
512
  in the Machine Coordinate System.
@@ -530,7 +515,7 @@ class AlphaControllerInterface:
530
515
  array: an array of six float values for Tx, Ty, Tz, Rx, Ry, Rz.
531
516
  None: when a PMACError was raised and logs the error message.
532
517
 
533
- .. note:: This is equivalent to the POSMACH? command.
518
+ Note: This is equivalent to the POSMACH? command.
534
519
  """
535
520
  raise NotImplementedError
536
521
 
@@ -580,13 +565,13 @@ class AlphaControllerInterface:
580
565
 
581
566
  None: when an Exception was raised and logs the error message.
582
567
 
583
- .. note:: This is equivalent to the STATE#HEXA? Command.
568
+ Note: This is equivalent to the STATE#HEXA? Command.
584
569
  """
585
570
  raise NotImplementedError
586
571
 
587
572
  @dynamic_interface
588
573
  def get_actuator_state(self):
589
- """Retreive general state information of the actuators.
574
+ """Retrieve general state information of the actuators.
590
575
 
591
576
  For each of the six actuators, an integer value is returned that should be interpreted as a
592
577
  bit field containing status bits for that actuator.
@@ -616,7 +601,7 @@ class AlphaControllerInterface:
616
601
  Hexapod Controller API, section 4.5.5.
617
602
  None: when an Exception was raised and logs the error message.
618
603
 
619
- .. note:: This is equivalent to the STATE#ACTUATOR? Command.
604
+ Note: This is equivalent to the STATE#ACTUATOR? Command.
620
605
  """
621
606
  raise NotImplementedError
622
607
 
@@ -691,7 +676,7 @@ class AlphaControllerInterface:
691
676
 
692
677
  @dynamic_interface
693
678
  def perform_maintenance(self, axis):
694
- """Perform a maintenance cycle which consists to travel the full range
679
+ """Perform a maintenance cycle which consists of travelling the full range
695
680
  on one axis corresponding to the Hexapod machine limits. The movement is
696
681
  also in machine coordinate system.
697
682
 
@@ -839,9 +824,9 @@ class AlphaPlusControllerInterface(AlphaControllerInterface):
839
824
  """Sets the user workspace limits of the hexapod. Will raise error if not all the parameters are set (see
840
825
  Args definition)
841
826
 
842
- Remark: operational workspace limits must be understood as limits in terms of amplitude of movement. Those limits
843
- are defined for each operational axis with a negative and positive value and are used in the validation process.
844
- Position on each operational axis must be within those two values.
827
+ Remark: operational workspace limits must be understood as limits in terms of amplitude of movement. Those
828
+ limits are defined for each operational axis with a negative and positive value and are used in the
829
+ validation process. Position on each operational axis must be within those two values.
845
830
 
846
831
  Args:
847
832
  ntx(double): negative position limit in X in mm
@@ -602,9 +602,8 @@ class AlphaPlusTelnetInterface(DeviceTransport, DeviceConnectionInterface):
602
602
  def connect(self) -> None:
603
603
  """
604
604
  Connects to the Alpha+ Controller using the Telnet protocol. After connection
605
- the telnet session logs in with the username provided in the Settings under
606
- the `PUNA Alpha+ Controller` group. The password for this login is also provided
607
- in the Settings under the same group. Make sure their values are only given in
605
+ the telnet session logs in with the username provided in the Settings file. The password for this login is also
606
+ provided in the Settings under the same group. Make sure their values are only given in
608
607
  the local settings file, not the global settings.
609
608
 
610
609
  After login, the `gpascii` command is started with the option `-2` as instructed
@@ -1009,8 +1009,10 @@ class HexapodUIController(Observer):
1009
1009
  self.view.set_connection_state("disconnected")
1010
1010
  self.stop_timer()
1011
1011
 
1012
- if not self.model.is_device_connected(): self.view.disable_device_action()
1013
- if not self.model.is_cs_connected(): self.view.uncheck_cs_action()
1012
+ if not self.model.is_device_connected():
1013
+ self.view.disable_device_action()
1014
+ if not self.model.is_cs_connected():
1015
+ self.view.uncheck_cs_action()
1014
1016
 
1015
1017
  return
1016
1018
 
@@ -1170,7 +1172,7 @@ class HexapodUIView(QMainWindow, Observable):
1170
1172
 
1171
1173
  self.temperature_log = None
1172
1174
 
1173
- def onClick(self, icon: Union[QIcon, bool]):
1175
+ def on_click(self, icon: Union[QIcon, bool]):
1174
1176
 
1175
1177
  sender = self.sender()
1176
1178
 
@@ -1184,14 +1186,14 @@ class HexapodUIView(QMainWindow, Observable):
1184
1186
 
1185
1187
  self.notifyObservers(sender)
1186
1188
 
1187
- def createStatusBar(self):
1189
+ def create_status_bar(self):
1188
1190
 
1189
1191
  self.statusBar().setStyleSheet("border: 0; background-color: #FFF8DC;")
1190
1192
  self.statusBar().setStyleSheet("QStatusBar::item {border: none;}")
1191
1193
  self.statusBar().addPermanentWidget(VLine())
1192
1194
  self.statusBar().addPermanentWidget(self.mode_label)
1193
1195
 
1194
- def createToolbar(self):
1196
+ def create_toolbar(self):
1195
1197
 
1196
1198
  # The Switch On/OFF is in this case used for the Control ON/OFF action.
1197
1199
 
@@ -1202,7 +1204,7 @@ class HexapodUIView(QMainWindow, Observable):
1202
1204
  not_selected=get_resource(":/icons/switch-off.svg"),
1203
1205
  disabled=get_resource(":/icons/switch-disabled.svg")
1204
1206
  )
1205
- self.control.clicked.connect(self.onClick)
1207
+ self.control.clicked.connect(self.on_click)
1206
1208
 
1207
1209
  # The Home action is used to command the Homing to the Hexapod.
1208
1210
 
@@ -1212,7 +1214,7 @@ class HexapodUIView(QMainWindow, Observable):
1212
1214
  selected=get_resource(":/icons/home.svg"),
1213
1215
  disabled=get_resource(":/icons/home-disabled.svg"),
1214
1216
  )
1215
- self.homing.clicked.connect(self.onClick)
1217
+ self.homing.clicked.connect(self.on_click)
1216
1218
 
1217
1219
  # The Clear action is used to command the ClearErrors to the Hexapod.
1218
1220
 
@@ -1222,7 +1224,7 @@ class HexapodUIView(QMainWindow, Observable):
1222
1224
  selected=get_resource(":/icons/erase.svg"),
1223
1225
  disabled=get_resource(":/icons/erase-disabled.svg"),
1224
1226
  )
1225
- self.clear_errors.clicked.connect(self.onClick)
1227
+ self.clear_errors.clicked.connect(self.on_click)
1226
1228
 
1227
1229
  # The Reconnect action is used to reconnect to the control server
1228
1230
 
@@ -1233,7 +1235,7 @@ class HexapodUIView(QMainWindow, Observable):
1233
1235
  not_selected=get_resource(":/icons/cs-not-connected.svg"),
1234
1236
  disabled=get_resource(":/icons/cs-connected-disabled.svg")
1235
1237
  )
1236
- self.cs_connection.clicked.connect(self.onClick)
1238
+ self.cs_connection.clicked.connect(self.on_click)
1237
1239
 
1238
1240
  # The Reconnect action is used to reconnect the device
1239
1241
 
@@ -1244,7 +1246,7 @@ class HexapodUIView(QMainWindow, Observable):
1244
1246
  not_selected=get_resource(":/icons/unplugged.svg"),
1245
1247
  disabled=get_resource(":/icons/plugged-disabled.svg")
1246
1248
  )
1247
- self.device_connection.clicked.connect(self.onClick)
1249
+ self.device_connection.clicked.connect(self.on_click)
1248
1250
 
1249
1251
 
1250
1252
  # The STOP button is used to immediately stop the current motion
@@ -1253,7 +1255,7 @@ class HexapodUIView(QMainWindow, Observable):
1253
1255
 
1254
1256
  self.stop_action = QAction(stop_button, "STOP", self)
1255
1257
  self.stop_action.setToolTip("STOP Movement")
1256
- self.stop_action.triggered.connect(self.onClick)
1258
+ self.stop_action.triggered.connect(self.on_click)
1257
1259
 
1258
1260
  # The HELP button is used to show the on-line help in a browser window
1259
1261
 
@@ -1261,7 +1263,7 @@ class HexapodUIView(QMainWindow, Observable):
1261
1263
 
1262
1264
  self.help_action = QAction(help_button, "INFO", self)
1263
1265
  self.help_action.setToolTip("Browse the on-line documentation")
1264
- self.help_action.triggered.connect(self.onClick)
1266
+ self.help_action.triggered.connect(self.on_click)
1265
1267
 
1266
1268
  # spacer widget to help with aligning STOP button to the right
1267
1269
 
@@ -1280,7 +1282,7 @@ class HexapodUIView(QMainWindow, Observable):
1280
1282
 
1281
1283
  return self.toolbar
1282
1284
 
1283
- def createUserPositionWidget(self):
1285
+ def create_user_position_widget(self):
1284
1286
 
1285
1287
  vbox_labels = QVBoxLayout()
1286
1288
  vbox_values = QVBoxLayout()
@@ -1324,7 +1326,7 @@ class HexapodUIView(QMainWindow, Observable):
1324
1326
 
1325
1327
  return gbox_positions
1326
1328
 
1327
- def createMachinePositionWidget(self):
1329
+ def create_machine_position_widget(self):
1328
1330
 
1329
1331
  vbox_labels = QVBoxLayout()
1330
1332
  vbox_values = QVBoxLayout()
@@ -1368,7 +1370,7 @@ class HexapodUIView(QMainWindow, Observable):
1368
1370
 
1369
1371
  return gbox_positions
1370
1372
 
1371
- def createActuatorLengthWidget(self):
1373
+ def create_actuator_length_widget(self):
1372
1374
 
1373
1375
  vbox_labels = QVBoxLayout()
1374
1376
  vbox_values = QVBoxLayout()