Files
linuxcncAllWasm/lib/python/qtvcp/widgets/radio_axis_selector.py
2026-08-20 06:17:39 +08:00

80 lines
2.3 KiB
Python

#!/usr/bin/env python3
from qtpy import QtCore, QtWidgets
from qtvcp.widgets.widget_baseclass import _HalWidgetBase
from qtvcp.core import Status, Action
from qtvcp import logger
# Instantiate the libraries with global reference
# STATUS gives us status messages from linuxcnc
# ACTION is for linuxcnc commands
# LOG is for running code logging
STATUS = Status()
ACTION = Action()
LOG = logger.getLogger(__name__)
# Force the log level for this module
#LOG.setLevel(logger.DEBUG) # One of DEBUG, INFO, WARNING, ERROR, CRITICAL
class RadioAxisSelector(QtWidgets.QRadioButton, _HalWidgetBase):
def __init__(self, parent=None):
super(RadioAxisSelector, self).__init__(parent)
self.toggled.connect(lambda:self.btnstate(self))
self.axis = ''
self.joint = -1
def _hal_init(self):
STATUS.connect('motion-mode-changed', lambda w,data: self.modeChanged(data))
def btnstate(self,b):
if b.isChecked() == True:
if STATUS.is_joint_mode():
ACTION.SET_SELECTED_JOINT(self.joint)
else:
ACTION.SET_SELECTED_AXIS(self.axis)
# set this without causing a STATUS message output
# in case we are selecting an axis to un/home
STATUS.selected_joint = self.joint
# change of joints mode / axis mode
def modeChanged(self, mode):
self.btnstate(self)
def setAxis(self, data):
if data.upper() in('X','Y','Z','A','B','C','U','V','W'):
self.axis = str(data.upper())
def getAxis(self):
return self.axis
def resetAxis(self):
self.axis = ''
def setJoint(self, data):
self.joint = data
def getJoint(self):
return self.joint
def resetJoint(self):
self.joint = -1
axis_selection = QtCore.Property(str, getAxis, setAxis, resetAxis)
joint_selection = QtCore.Property(int, getJoint, setJoint, resetJoint)
# for testing without editor:
def main():
import sys
from qtpy.QtWidgets import QApplication
app = QApplication(sys.argv)
widget = QtWidgets.QWidget()
layout = QtWidgets.QHBoxLayout()
widget.setLayout(layout)
cb = RadioAxisSelector()
layout.addWidget(cb)
cb2 = RadioAxisSelector()
layout.addWidget(cb2)
widget.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()