rq_connect

example code
import sys

from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QLabel

from pyreaqtive.models import RQFloat
from pyreaqtive.rq_connect import RQConnect
from pyreaqtive.widgets import RQDoubleSpinBox


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        widget = QWidget()
        layout = QVBoxLayout()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

        celsius = RQFloat(1)
        fahrenheit = RQFloat(1)

        layout.addWidget(QLabel("Celsius"))
        celsius_spinbox = RQDoubleSpinBox(celsius)
        celsius_spinbox.setMinimum(-10000)
        celsius_spinbox.setMaximum(10000)
        layout.addWidget(celsius_spinbox)

        layout.addWidget(QLabel("Fahrenheit"))
        fahrenheit_spinbox = RQDoubleSpinBox(fahrenheit)
        fahrenheit_spinbox.setMinimum(-10000)
        fahrenheit_spinbox.setMaximum(10000)
        layout.addWidget(fahrenheit_spinbox)

        # It's important to reference the connect object so it's not garbage collected
        self.connect = RQConnect(
            model_a=celsius,  # Connect to model A
            model_b=fahrenheit,  # Connect to Model B
            conversion=RQConnect.Conversion(  # Declare conversion formulas to convert reciprocally
                a_to_b=lambda c: c * (9 / 5) + 32,
                b_to_a=lambda f: (f - 32) / (9 / 5)
            )
        )
        # Note RQConnect only makes sense for functions that are reversible.

        # In this case we could also use LinearConversion
        # self.connect = RQConnect(
        #    model_a=celsius,
        #    model_b=fahrenheit,
        #    conversion=RQConnect.LinearConversion(
        #        scale_a_to_b=9 / 5,
        #        offset_a_to_b=32
        #    )
        # )


app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
../_images/rq_connect.gif