Notes for Python
1. Every type implements __str__()
and __repr__()
for debug printing
2. Simple (non-union) enum types implement__richcmp__()
:
align = LayoutAlignItems.Stretch
if align == LayoutAlignItems.Stretch:
print("ok!")
3. union enums
have a @staticmethod
constructor and a hidden .match()
function
that will return the enum tag as a string and the enum payload as a PyObject:
size = OptionLogicalSize.Some(LogicalSize(600, 800))
tag, payload = size.match()
if tag == "Some":
print("size is {}, {}".format(payload.width, payload.height))
elif tag == "None":
print("no size available")
4. new()
constructors are the default constructors:
dom = Dom(NodeType.Div) # not Dom.new(NodeType.Div)!
5. If no explicit new()
constructors exist, the default constructor takes all arguments in the order as they are specified in the API:
# API: struct ColorU { r: u8, g: u8, b: u8 a: u8 }
# therefore the arguments to the default constructor are passed in order:
color = ColorU(/*r*/ 255, /*g*/ 255, /*b*/ 255, /*a*/ 255)
6. Whenever a RefAny
parameter is required to call a function, you can use any PyObject as a replacement:
mydata = MyClass() # your custom data type
# App::new() takes a RefAny as the first argument - pass in your custom data type here
app = App(mydata, AppConfig(LayoutSolver.Default))
7. All functions that take a *Vec
type accept a PyList and all *Option
types are automatically converted to and from Pythons None
value:
monitors = app.get_monitors() # returns MonitorVec = PyList[Monitor]
print(str(monitors[0]))
# returns OptionLogicalPosition = Optional[LogicalPosition]
cursor_relative = callbackinfo.get_cursor_relative_to_viewport()
if cursor_relative is not None:
print(str(cursor_relative))
8. Due to a bug in the Python PyO3 bindings, you cannot modify a struct through a struct (see issue).
window = WindowCreateOptions(LayoutSolver.Default)
window.state.flags.frame = WindowFrame.Maximized # does not work
# workaround (yes, it's annoying):
state = window.state.copy()
flags = state.flags.copy()
flags.frame = WindowFrame.Maximized
state.flags = flags
window.state = state