TemperatureTransformer¶
A PyObjC Example without documentation
Sources¶
Transformer.py¶
# import classes required to start application
import TransformerAppDelegate # noqa: F401
from PyObjCTools import AppHelper
if __name__ == "__main__":
AppHelper.runEventLoop()
TransformerAppDelegate.py¶
#
# TransformerAppDelegate.py
# Transformer
#
# Converted by ufiedler@web.de on 03.02.05.
#
# Value Transformer Example Application
# Based on Apples FahrenheitToCelsiusTransformer Example
import objc
from Cocoa import NSNumber, NSObject, NSValueTransformer
class FahrenheitToCelsiusTransformer(NSValueTransformer):
# While not strictly necessary, because PyObjC can deduce that
# these selectors should be implemented for the class,
# declaring them as classmethod helps make this more clear.
@classmethod
def transformedValueClass(cls):
return NSNumber
@classmethod
def allowsReverseTransformation(cls):
return True
def transformedValue_(self, value):
if value is None:
return None
# the forward value is coming from an ivar that's
# already a number, so we don't need to coerce this...
# but we do it anyway for
fahrenheitInputValue = float(value)
# calculate Celsius value
celsiusOutputValue = (5.0 / 9.0) * (fahrenheitInputValue - 32.0)
return celsiusOutputValue
def reverseTransformedValue_(self, value):
if value is None:
return None
# the reverse value comes from the text field, so it's
# going to be a string that we need to coerce to float.
celsiusInputValue = float(value)
# calculate Fahrenheit value
fahrenheitOutputValue = ((9.0 / 5.0) * celsiusInputValue) + 32.0
return fahrenheitOutputValue
class TransformerAppDelegate(NSObject):
fahrenheit = objc.ivar("fahrenheit", objc._C_DBL)
trans = FahrenheitToCelsiusTransformer.alloc().init()
NSValueTransformer.setValueTransformer_forName_(trans, "FahrenheitToCelsiusTransformer")
setup.py¶
"""
Script for building the example:
Usage:
python3 setup.py py2app
"""
from setuptools import setup
setup(
name="TemperatureTransformer",
app=["Transformer.py"],
data_files=["English.lproj"],
setup_requires=["py2app", "pyobjc-framework-Cocoa"],
)