Components¶
Element factory functions for the built-in PythonNative widgets. These
return immutable Element descriptors; nothing
is mounted to a native view tree until the
Reconciler processes them.
For the visual and layout properties accepted by each component's
style argument, see the
Component Property Reference.
Built-in element factories and the typed prop schemas they share.
Each @dataclass(frozen=True) class in this module — TextProps,
ButtonProps, etc. — is the canonical schema for one built-in
component. Each factory function (Text, Button, …) is a thin
ergonomic wrapper that builds an Element
through the shared :func:_make_element helper, so style resolution,
ref attachment, None-default dropping, and forced overrides
(e.g. Column's fixed flex_direction) live in exactly one place.
The same Props dataclasses are used by the pythonnative.sdk surface
for third-party components, so the built-in API and the extension API
speak the same shape.
Example
Classes:
| Name | Description |
|---|---|
TextProps |
Props for |
ButtonProps |
Props for |
TextInputProps |
Props for |
ImageProps |
Props for |
SwitchProps |
Props for |
ProgressBarProps |
Props for |
ActivityIndicatorProps |
Props for |
WebViewProps |
Props for |
SpacerProps |
Props for |
SliderProps |
Props for |
ViewProps |
|
ScrollViewProps |
Props for |
SafeAreaViewProps |
Props for |
ModalProps |
Props for |
PressableProps |
Props for |
StatusBarProps |
Props for |
KeyboardAvoidingViewProps |
Props for |
PickerProps |
Props for |
TouchableOpacityProps |
Props for |
ImageBackgroundProps |
Props for |
CheckboxProps |
Props for |
SegmentedControlProps |
Props for |
DatePickerProps |
Props for |
Functions:
| Name | Description |
|---|---|
Text |
Display a string of text. |
Button |
Display a tappable button. |
TextInput |
Display a text-entry field (single-line by default, or |
Image |
Display an image from a resource path or URL. |
Switch |
Display a toggle switch. |
ProgressBar |
Show determinate progress as a value between |
ActivityIndicator |
Show an indeterminate loading spinner. |
WebView |
Embed web content from a URL or an inline HTML string. |
Spacer |
Insert empty space inside a flex container. |
Slider |
Continuous-value slider between |
View |
Universal flex container (like React Native's |
Column |
Arrange children vertically. |
Row |
Arrange children horizontally. |
ScrollView |
Wrap children in a scrollable container. |
SafeAreaView |
Container that respects safe-area insets (notch, status bar, home indicator). |
Modal |
Overlay modal dialog backed by a real native presentation. |
Pressable |
Wrap children with tap and long-press handlers. |
TouchableOpacity |
Wrap children so they fade to |
ImageBackground |
Render |
Checkbox |
A boolean checkbox with an optional inline label. |
SegmentedControl |
A horizontal multi-choice control (one selected segment at a time). |
DatePicker |
A native date / time picker. |
Fragment |
Group children without adding a wrapping native view. |
ErrorBoundary |
Catch render errors in the wrapped subtree and display |
FlatList |
Virtualized scrollable list that renders items from |
SectionList |
Virtualized list that supports section headers. |
StatusBar |
Configure the device's status bar appearance. |
KeyboardAvoidingView |
Wrap content that should shift up when the keyboard is shown. |
RefreshControl |
Pull-to-refresh spec for |
Picker |
A real native dropdown / select widget. |
TextProps
dataclass
¶
ButtonProps
dataclass
¶
TextInputProps
dataclass
¶
TextInputProps(value: str = '', placeholder: Optional[str] = None, on_change: Optional[Callable[[str], None]] = None, on_submit: Optional[Callable[[str], None]] = None, secure: bool = False, multiline: bool = False, keyboard_type: Optional[KeyboardType] = None, auto_capitalize: Optional[AutoCapitalize] = None, auto_correct: Optional[bool] = None, auto_focus: bool = False, return_key_type: Optional[ReturnKeyType] = None, max_length: Optional[int] = None, placeholder_color: Optional[Color] = None, editable: bool = True, clear_button: bool = False, on_focus: Optional[Callable[[], None]] = None, on_blur: Optional[Callable[[], None]] = None, selection_color: Optional[Color] = None, text_content_type: Optional[str] = None, accessibility_label: Optional[str] = None, accessibility_hint: Optional[str] = None, accessible: Optional[bool] = None)
ImageProps
dataclass
¶
SwitchProps
dataclass
¶
ProgressBarProps
dataclass
¶
ActivityIndicatorProps
dataclass
¶
WebViewProps
dataclass
¶
WebViewProps(url: Optional[str] = None, html: Optional[str] = None, on_load: Optional[Callable[[str], None]] = None, on_message: Optional[Callable[[str], None]] = None, on_navigation_state_change: Optional[Callable[[str], None]] = None, inject_javascript: Optional[str] = None, scroll_enabled: bool = True)
SpacerProps
dataclass
¶
SliderProps
dataclass
¶
ViewProps
dataclass
¶
ScrollViewProps
dataclass
¶
ScrollViewProps(refresh_control: Optional[Dict[str, Any]] = None, scroll_axis: Optional[Literal['vertical', 'horizontal']] = None, on_scroll: Optional[Callable[[float, float], None]] = None, shows_scroll_indicator: bool = True, paging_enabled: bool = False, bounces: bool = True, content_container_style: StyleProp = None, keyboard_dismiss_mode: Optional[Literal['none', 'on_drag', 'interactive']] = None)
ModalProps
dataclass
¶
ModalProps(visible: bool = False, on_dismiss: Optional[Callable[[], None]] = None, on_show: Optional[Callable[[], None]] = None, title: Optional[str] = None, animation_type: Literal['slide', 'fade', 'none'] = 'slide', transparent: bool = False, presentation_style: Literal['page_sheet', 'form_sheet', 'full_screen', 'overlay'] = 'page_sheet', dismiss_on_backdrop: bool = True)
PressableProps
dataclass
¶
PressableProps(on_press: Optional[Callable[[], None]] = None, on_long_press: Optional[Callable[[], None]] = None, pressed_opacity: float = 0.6, accessibility_label: Optional[str] = None, accessibility_hint: Optional[str] = None, accessibility_role: Optional[str] = None, accessible: Optional[bool] = None)
StatusBarProps
dataclass
¶
KeyboardAvoidingViewProps
dataclass
¶
KeyboardAvoidingViewProps(behavior: Literal['padding', 'position'] = 'padding')
PickerProps
dataclass
¶
TouchableOpacityProps
dataclass
¶
TouchableOpacityProps(on_press: Optional[Callable[[], None]] = None, on_long_press: Optional[Callable[[], None]] = None, active_opacity: float = 0.2, disabled: bool = False, accessibility_label: Optional[str] = None, accessibility_hint: Optional[str] = None, accessibility_role: Optional[str] = None, accessible: Optional[bool] = None)
ImageBackgroundProps
dataclass
¶
CheckboxProps
dataclass
¶
SegmentedControlProps
dataclass
¶
DatePickerProps
dataclass
¶
DatePickerProps(value: Optional[str] = None, mode: Literal['date', 'time', 'datetime'] = 'date', on_change: Optional[Callable[[str], None]] = None, minimum: Optional[str] = None, maximum: Optional[str] = None, enabled: bool = True, accessibility_label: Optional[str] = None, accessible: Optional[bool] = None)
Bases: Props
Props for DatePicker.
value and the value passed to on_change are ISO-8601
strings ("2026-05-31" for mode="date", "14:30" for
mode="time", "2026-05-31T14:30" for mode="datetime"),
so the schema stays JSON-serializable and platform-agnostic.
Text
¶
Text(text: str = '', *, style: StyleProp = None, accessibility_label: Optional[str] = None, accessibility_hint: Optional[str] = None, accessibility_role: Optional[str] = None, accessible: Optional[bool] = None, ref: Optional[Dict[str, Any]] = None, key: Optional[str] = None) -> Element
Display a string of text.
Style properties: font_size, color, bold,
font_weight, font_family, italic, text_align,
background_color, max_lines, letter_spacing,
line_height, text_decoration ("underline" /
"line_through"), border_radius, border_width,
border_color, shadow_*, opacity, transform, plus
the common layout props.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
text
|
str
|
Text content to display. |
''
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
accessibility_label
|
Optional[str]
|
Spoken description for screen readers. |
None
|
accessibility_hint
|
Optional[str]
|
Spoken extra detail (iOS only). |
None
|
accessibility_role
|
Optional[str]
|
Semantic role for assistive tech. |
None
|
accessible
|
Optional[bool]
|
Override whether the element is exposed to AT. |
None
|
ref
|
Optional[Dict[str, Any]]
|
Optional |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Button
¶
Button(title: str = '', *, on_click: Optional[Callable[[], None]] = None, enabled: bool = True, style: StyleProp = None, accessibility_label: Optional[str] = None, accessibility_hint: Optional[str] = None, accessibility_role: Optional[str] = None, accessible: Optional[bool] = None, ref: Optional[Dict[str, Any]] = None, key: Optional[str] = None) -> Element
Display a tappable button.
Style properties: color, background_color, font_size,
border_radius, border_width, border_color, shadow_*,
opacity, transform, plus the common layout props.
Buttons get accessibility_role="button" by default.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
title
|
str
|
Button label. |
''
|
on_click
|
Optional[Callable[[], None]]
|
Callback invoked when the user taps the button. |
None
|
enabled
|
bool
|
When |
True
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
accessibility_label
|
Optional[str]
|
Spoken description for screen readers. |
None
|
accessibility_hint
|
Optional[str]
|
Spoken extra detail (iOS only). |
None
|
accessibility_role
|
Optional[str]
|
Override the default |
None
|
accessible
|
Optional[bool]
|
Override whether the element is exposed to AT. |
None
|
ref
|
Optional[Dict[str, Any]]
|
Optional |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
TextInput
¶
TextInput(*, value: str = '', placeholder: Optional[str] = None, on_change: Optional[Callable[[str], None]] = None, on_submit: Optional[Callable[[str], None]] = None, secure: bool = False, multiline: bool = False, keyboard_type: Optional[KeyboardType] = None, auto_capitalize: Optional[AutoCapitalize] = None, auto_correct: Optional[bool] = None, auto_focus: bool = False, return_key_type: Optional[ReturnKeyType] = None, max_length: Optional[int] = None, placeholder_color: Optional[Color] = None, editable: bool = True, clear_button: bool = False, on_focus: Optional[Callable[[], None]] = None, on_blur: Optional[Callable[[], None]] = None, selection_color: Optional[Color] = None, text_content_type: Optional[str] = None, style: StyleProp = None, accessibility_label: Optional[str] = None, accessibility_hint: Optional[str] = None, accessible: Optional[bool] = None, ref: Optional[Dict[str, Any]] = None, key: Optional[str] = None) -> Element
Display a text-entry field (single-line by default, or multiline).
Style properties: font_size, color, background_color,
border_*, plus the common layout props.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
str
|
Current text content (controlled-input pattern). |
''
|
placeholder
|
Optional[str]
|
Hint shown when |
None
|
on_change
|
Optional[Callable[[str], None]]
|
Callback invoked with the new string each keystroke. |
None
|
on_submit
|
Optional[Callable[[str], None]]
|
Callback invoked when the user submits (Return / Done / etc.). Receives the final text. |
None
|
secure
|
bool
|
When |
False
|
multiline
|
bool
|
When |
False
|
keyboard_type
|
Optional[KeyboardType]
|
One of |
None
|
auto_capitalize
|
Optional[AutoCapitalize]
|
One of |
None
|
auto_correct
|
Optional[bool]
|
Enable/disable autocorrection. |
None
|
auto_focus
|
bool
|
Request focus on mount. |
False
|
return_key_type
|
Optional[ReturnKeyType]
|
One of |
None
|
max_length
|
Optional[int]
|
Maximum number of characters allowed. |
None
|
placeholder_color
|
Optional[Color]
|
Color used for the placeholder string. |
None
|
editable
|
bool
|
When |
True
|
clear_button
|
bool
|
When |
False
|
on_focus
|
Optional[Callable[[], None]]
|
Callback invoked when the field gains focus. |
None
|
on_blur
|
Optional[Callable[[], None]]
|
Callback invoked when the field loses focus. |
None
|
selection_color
|
Optional[Color]
|
Cursor / selection highlight color. |
None
|
text_content_type
|
Optional[str]
|
Semantic content hint for autofill (e.g.
|
None
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
accessibility_label
|
Optional[str]
|
Spoken description for screen readers. |
None
|
accessibility_hint
|
Optional[str]
|
Spoken extra detail (iOS only). |
None
|
accessible
|
Optional[bool]
|
Override whether the element is exposed to AT. |
None
|
ref
|
Optional[Dict[str, Any]]
|
Optional |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Image
¶
Image(source: str = '', *, scale_type: Optional[ScaleType] = None, tint_color: Optional[Color] = None, style: StyleProp = None, accessibility_label: Optional[str] = None, accessibility_role: Optional[str] = None, accessible: Optional[bool] = None, ref: Optional[Dict[str, Any]] = None, key: Optional[str] = None) -> Element
Display an image from a resource path or URL.
Style properties: background_color, border_*, opacity,
transform, plus the common layout props.
Network images (http:// / https://) are loaded
asynchronously off the main thread on both iOS (via
NSURLSession) and Android (via a worker thread plus
BitmapFactory).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
source
|
str
|
Image resource name or URL. |
''
|
scale_type
|
Optional[ScaleType]
|
Fit mode: |
None
|
tint_color
|
Optional[Color]
|
Color overlay applied to template images (monochrome icons). |
None
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
accessibility_label
|
Optional[str]
|
Spoken description for screen readers. |
None
|
accessibility_role
|
Optional[str]
|
Override the default |
None
|
accessible
|
Optional[bool]
|
Override whether the element is exposed to AT. |
None
|
ref
|
Optional[Dict[str, Any]]
|
Optional |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Switch
¶
Switch(*, value: bool = False, on_change: Optional[Callable[[bool], None]] = None, style: StyleProp = None, key: Optional[str] = None) -> Element
Display a toggle switch.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
bool
|
Current on/off state. |
False
|
on_change
|
Optional[Callable[[bool], None]]
|
Callback invoked with the new boolean state. |
None
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
ProgressBar
¶
ProgressBar(*, value: float = 0.0, color: Optional[Color] = None, track_color: Optional[Color] = None, indeterminate: bool = False, style: StyleProp = None, key: Optional[str] = None) -> Element
Show determinate progress as a value between 0.0 and 1.0.
For a spinner instead of a bar, use
ActivityIndicator; for an
indeterminate bar pass indeterminate=True.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
float
|
Fraction complete (clamped to |
0.0
|
color
|
Optional[Color]
|
Color of the filled portion of the bar. |
None
|
track_color
|
Optional[Color]
|
Color of the unfilled track behind the fill. |
None
|
indeterminate
|
bool
|
When |
False
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
ActivityIndicator
¶
ActivityIndicator(*, animating: bool = True, color: Optional[Color] = None, size: Literal['small', 'large'] = 'small', style: StyleProp = None, key: Optional[str] = None) -> Element
Show an indeterminate loading spinner.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
animating
|
bool
|
When |
True
|
color
|
Optional[Color]
|
Spinner color. |
None
|
size
|
Literal['small', 'large']
|
|
'small'
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Element
|
|
WebView
¶
WebView(*, url: str = '', html: Optional[str] = None, on_load: Optional[Callable[[str], None]] = None, on_message: Optional[Callable[[str], None]] = None, on_navigation_state_change: Optional[Callable[[str], None]] = None, inject_javascript: Optional[str] = None, scroll_enabled: bool = True, style: StyleProp = None, key: Optional[str] = None) -> Element
Embed web content from a URL or an inline HTML string.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
url
|
str
|
HTTP(S) URL to load. Ignored when |
''
|
html
|
Optional[str]
|
Inline HTML markup to render instead of loading a URL. |
None
|
on_load
|
Optional[Callable[[str], None]]
|
Callback invoked with the final URL once a page finishes loading. |
None
|
on_message
|
Optional[Callable[[str], None]]
|
Callback invoked with the string payload whenever
page JavaScript calls
|
None
|
on_navigation_state_change
|
Optional[Callable[[str], None]]
|
Callback invoked with the URL each time the top-level document begins navigating. |
None
|
inject_javascript
|
Optional[str]
|
JavaScript evaluated after each page load
(useful for installing the |
None
|
scroll_enabled
|
bool
|
When |
True
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Spacer
¶
Spacer(*, size: Optional[float] = None, flex: Optional[float] = None, key: Optional[str] = None) -> Element
Insert empty space inside a flex container.
Pass size for a fixed gap, or flex to expand and absorb
remaining space.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
size
|
Optional[float]
|
Fixed gap in dp/pt along the parent's main axis. Mirrored
on both axes — whichever axis the parent's
|
None
|
flex
|
Optional[float]
|
None
|
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Slider
¶
Slider(*, value: float = 0.0, min_value: float = 0.0, max_value: float = 1.0, on_change: Optional[Callable[[float], None]] = None, style: StyleProp = None, key: Optional[str] = None) -> Element
Continuous-value slider between min_value and max_value.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
float
|
Current slider value. |
0.0
|
min_value
|
float
|
Lower bound. |
0.0
|
max_value
|
float
|
Upper bound. |
1.0
|
on_change
|
Optional[Callable[[float], None]]
|
Callback invoked with the new value as the user drags. |
None
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
View
¶
View(*children: Element, style: StyleProp = None, accessibility_label: Optional[str] = None, accessibility_hint: Optional[str] = None, accessibility_role: Optional[str] = None, accessible: Optional[bool] = None, ref: Optional[Dict[str, Any]] = None, key: Optional[str] = None) -> Element
Universal flex container (like React Native's View).
Defaults to flex_direction: "column" (override via style).
Flex container properties (passed via style):
flex_direction:"column"(default),"row","column_reverse","row_reverse".justify_content: main-axis distribution. Accepts"flex_start"(default),"center","flex_end","space_between","space_around","space_evenly".align_items: cross-axis alignment. Accepts"stretch"(default),"flex_start","center","flex_end".overflow:"visible"(default) or"hidden".spacing,padding,background_color,border_radius,border_width,border_color,shadow_color,shadow_offset,shadow_opacity,shadow_radius,elevation,opacity,transform.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*children
|
Element
|
Child elements rendered inside the container. |
()
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
accessibility_label
|
Optional[str]
|
Spoken description for screen readers. |
None
|
accessibility_hint
|
Optional[str]
|
Spoken extra detail (iOS only). |
None
|
accessibility_role
|
Optional[str]
|
Semantic role for assistive tech. |
None
|
accessible
|
Optional[bool]
|
Override whether the element is exposed to AT. |
None
|
ref
|
Optional[Dict[str, Any]]
|
Optional |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Column
¶
Column(*children: Element, style: StyleProp = None, ref: Optional[Dict[str, Any]] = None, key: Optional[str] = None) -> Element
Arrange children vertically.
Convenience wrapper around View with
flex_direction locked to "column". Use View directly if
you need to switch between row and column at runtime.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*children
|
Element
|
Child elements stacked top to bottom. |
()
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
ref
|
Optional[Dict[str, Any]]
|
Optional |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Row
¶
Row(*children: Element, style: StyleProp = None, ref: Optional[Dict[str, Any]] = None, key: Optional[str] = None) -> Element
Arrange children horizontally.
Convenience wrapper around View with
flex_direction locked to "row". Use View directly if you
need to switch between row and column at runtime.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*children
|
Element
|
Child elements arranged left to right. |
()
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
ref
|
Optional[Dict[str, Any]]
|
Optional |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
ScrollView
¶
ScrollView(*children: Element, refresh_control: Optional[Dict[str, Any]] = None, scroll_axis: Optional[Literal['vertical', 'horizontal']] = None, on_scroll: Optional[Callable[[float, float], None]] = None, shows_scroll_indicator: bool = True, paging_enabled: bool = False, bounces: bool = True, content_container_style: StyleProp = None, keyboard_dismiss_mode: Optional[Literal['none', 'on_drag', 'interactive']] = None, style: StyleProp = None, ref: Optional[Dict[str, Any]] = None, key: Optional[str] = None) -> Element
Wrap children in a scrollable container.
ScrollView typically takes a single child (a Column or
Row aggregating the scrollable content). It accepts *children
for ergonomic call sites; the underlying native scroll view stacks
them on its content axis.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*children
|
Element
|
Child elements to scroll. |
()
|
refresh_control
|
Optional[Dict[str, Any]]
|
Optional pull-to-refresh spec, typically
constructed via
|
None
|
scroll_axis
|
Optional[Literal['vertical', 'horizontal']]
|
|
None
|
on_scroll
|
Optional[Callable[[float, float], None]]
|
Callback invoked with |
None
|
shows_scroll_indicator
|
bool
|
When |
True
|
paging_enabled
|
bool
|
When |
False
|
bounces
|
bool
|
When |
True
|
content_container_style
|
StyleProp
|
Style applied to the inner content
wrapper (padding, alignment, spacing of the scrollable
content), distinct from |
None
|
keyboard_dismiss_mode
|
Optional[Literal['none', 'on_drag', 'interactive']]
|
|
None
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
ref
|
Optional[Dict[str, Any]]
|
Optional |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
SafeAreaView
¶
Container that respects safe-area insets (notch, status bar, home indicator).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*children
|
Element
|
Child elements that should avoid system UI overlays. |
()
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Modal
¶
Modal(*children: Element, visible: bool = False, on_dismiss: Optional[Callable[[], None]] = None, on_show: Optional[Callable[[], None]] = None, title: Optional[str] = None, animation_type: Literal['slide', 'fade', 'none'] = 'slide', transparent: bool = False, presentation_style: Literal['page_sheet', 'form_sheet', 'full_screen', 'overlay'] = 'page_sheet', dismiss_on_backdrop: bool = True, style: StyleProp = None, key: Optional[str] = None) -> Element
Overlay modal dialog backed by a real native presentation.
The modal is shown when visible=True and hidden when False.
Drive visible from a hook so the parent component can dismiss
the modal in response to user actions. On iOS this presents a
UIViewController; on Android it shows an android.app.Dialog.
Children are mounted as the modal's content view, not into the on-tree placeholder, so they appear above all other native content and don't influence the underlying layout.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*children
|
Element
|
Modal content. |
()
|
visible
|
bool
|
Controls whether the modal is presented. |
False
|
on_dismiss
|
Optional[Callable[[], None]]
|
Callback invoked when the user dismisses the modal via system gesture. |
None
|
on_show
|
Optional[Callable[[], None]]
|
Callback invoked once the modal has finished presenting. |
None
|
title
|
Optional[str]
|
Optional title-bar text. |
None
|
animation_type
|
Literal['slide', 'fade', 'none']
|
|
'slide'
|
transparent
|
bool
|
When |
False
|
presentation_style
|
Literal['page_sheet', 'form_sheet', 'full_screen', 'overlay']
|
iOS presentation style —
|
'page_sheet'
|
dismiss_on_backdrop
|
bool
|
When |
True
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Pressable
¶
Pressable(*children: Element, on_press: Optional[Callable[[], None]] = None, on_long_press: Optional[Callable[[], None]] = None, pressed_opacity: float = 0.6, style: StyleProp = None, accessibility_label: Optional[str] = None, accessibility_hint: Optional[str] = None, accessibility_role: Optional[str] = None, accessible: Optional[bool] = None, key: Optional[str] = None) -> Element
Wrap children with tap and long-press handlers.
Useful for making non-button elements (text, images, custom views)
respond to user taps. The wrapper view fades to pressed_opacity
on touch-down and back to full opacity on touch-up.
Pressable gets accessibility_role="button" by default.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*children
|
Element
|
Elements to make pressable. |
()
|
on_press
|
Optional[Callable[[], None]]
|
Callback invoked on a normal tap. |
None
|
on_long_press
|
Optional[Callable[[], None]]
|
Callback invoked on a sustained press. |
None
|
pressed_opacity
|
float
|
Opacity (0–1) applied while the user's finger
is down. Set to |
0.6
|
style
|
StyleProp
|
Style dict applied to the wrapper. |
None
|
accessibility_label
|
Optional[str]
|
Spoken description for screen readers. |
None
|
accessibility_hint
|
Optional[str]
|
Spoken extra detail (iOS only). |
None
|
accessibility_role
|
Optional[str]
|
Override the default |
None
|
accessible
|
Optional[bool]
|
Override whether the element is exposed to AT. |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
TouchableOpacity
¶
TouchableOpacity(*children: Element, on_press: Optional[Callable[[], None]] = None, on_long_press: Optional[Callable[[], None]] = None, active_opacity: float = 0.2, disabled: bool = False, style: StyleProp = None, accessibility_label: Optional[str] = None, accessibility_hint: Optional[str] = None, accessibility_role: Optional[str] = None, accessible: Optional[bool] = None, key: Optional[str] = None) -> Element
Wrap children so they fade to active_opacity while pressed.
A thin ergonomic alias over Pressable
that mirrors React Native's TouchableOpacity: the only visual
feedback is an opacity dip on touch-down. When disabled is set,
the press callbacks are dropped so the wrapper is inert.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*children
|
Element
|
Elements to make tappable. |
()
|
on_press
|
Optional[Callable[[], None]]
|
Callback invoked on a normal tap. |
None
|
on_long_press
|
Optional[Callable[[], None]]
|
Callback invoked on a sustained press. |
None
|
active_opacity
|
float
|
Opacity (0–1) applied while the finger is down. |
0.2
|
disabled
|
bool
|
When |
False
|
style
|
StyleProp
|
Style dict applied to the wrapper. |
None
|
accessibility_label
|
Optional[str]
|
Spoken description for screen readers. |
None
|
accessibility_hint
|
Optional[str]
|
Spoken extra detail (iOS only). |
None
|
accessibility_role
|
Optional[str]
|
Override the default |
None
|
accessible
|
Optional[bool]
|
Override whether the element is exposed to AT. |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
ImageBackground
¶
ImageBackground(*children: Element, source: str = '', scale_type: Optional[ScaleType] = None, style: StyleProp = None, accessibility_label: Optional[str] = None, accessible: Optional[bool] = None, key: Optional[str] = None) -> Element
Render children layered on top of a background image.
Composed entirely from existing primitives: an absolutely-filled
Image sits behind a content
View holding children. The container's
style controls sizing/padding; the image stretches to fill it
via position: "absolute" and zeroed insets.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*children
|
Element
|
Foreground content drawn over the image. |
()
|
source
|
str
|
Image resource name or URL. |
''
|
scale_type
|
Optional[ScaleType]
|
Background fit mode ( |
None
|
style
|
StyleProp
|
Style dict for the container (size, padding, alignment). |
None
|
accessibility_label
|
Optional[str]
|
Spoken description of the background image. |
None
|
accessible
|
Optional[bool]
|
Override whether the image is exposed to AT. |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Element
|
the background image and foreground content. |
Checkbox
¶
Checkbox(*, value: bool = False, on_change: Optional[Callable[[bool], None]] = None, label: Optional[str] = None, disabled: bool = False, color: Optional[Color] = None, style: StyleProp = None, accessibility_label: Optional[str] = None, accessibility_hint: Optional[str] = None, accessible: Optional[bool] = None, key: Optional[str] = None) -> Element
A boolean checkbox with an optional inline label.
Backed by android.widget.CheckBox on Android and a checkmark
UIButton on iOS. Tapping the control (or its label) toggles the
value and fires on_change(new_value).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
bool
|
Current checked state. |
False
|
on_change
|
Optional[Callable[[bool], None]]
|
Callback invoked with the new boolean state. |
None
|
label
|
Optional[str]
|
Optional text shown beside the box (also tappable). |
None
|
disabled
|
bool
|
When |
False
|
color
|
Optional[Color]
|
Tint applied to the checked box. |
None
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
accessibility_label
|
Optional[str]
|
Spoken description for screen readers. |
None
|
accessibility_hint
|
Optional[str]
|
Spoken extra detail (iOS only). |
None
|
accessible
|
Optional[bool]
|
Override whether the element is exposed to AT. |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
SegmentedControl
¶
SegmentedControl(*, segments: Optional[List[str]] = None, selected_index: int = 0, on_change: Optional[Callable[[int], None]] = None, enabled: bool = True, tint_color: Optional[Color] = None, style: StyleProp = None, accessibility_label: Optional[str] = None, accessible: Optional[bool] = None, key: Optional[str] = None) -> Element
A horizontal multi-choice control (one selected segment at a time).
Backed by UISegmentedControl on iOS and a styled toggle row on
Android. Selecting a segment fires on_change(index).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
segments
|
Optional[List[str]]
|
Ordered list of segment labels. |
None
|
selected_index
|
int
|
Index of the currently selected segment. |
0
|
on_change
|
Optional[Callable[[int], None]]
|
Callback invoked with the newly selected index. |
None
|
enabled
|
bool
|
When |
True
|
tint_color
|
Optional[Color]
|
Accent color for the selected segment. |
None
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
accessibility_label
|
Optional[str]
|
Spoken description for screen readers. |
None
|
accessible
|
Optional[bool]
|
Override whether the element is exposed to AT. |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Element
|
|
DatePicker
¶
DatePicker(*, value: Optional[str] = None, mode: Literal['date', 'time', 'datetime'] = 'date', on_change: Optional[Callable[[str], None]] = None, minimum: Optional[str] = None, maximum: Optional[str] = None, enabled: bool = True, style: StyleProp = None, accessibility_label: Optional[str] = None, accessible: Optional[bool] = None, key: Optional[str] = None) -> Element
A native date / time picker.
Backed by UIDatePicker on iOS and a trigger button that opens
the platform DatePickerDialog / TimePickerDialog on
Android. value and the value reported to on_change are
ISO-8601 strings (see DatePickerProps).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
Optional[str]
|
Currently selected value as an ISO-8601 string. |
None
|
mode
|
Literal['date', 'time', 'datetime']
|
|
'date'
|
on_change
|
Optional[Callable[[str], None]]
|
Callback invoked with the new ISO-8601 string. |
None
|
minimum
|
Optional[str]
|
Earliest selectable value (ISO-8601), if any. |
None
|
maximum
|
Optional[str]
|
Latest selectable value (ISO-8601), if any. |
None
|
enabled
|
bool
|
When |
True
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
accessibility_label
|
Optional[str]
|
Spoken description for screen readers. |
None
|
accessible
|
Optional[bool]
|
Override whether the element is exposed to AT. |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Fragment
¶
Group children without adding a wrapping native view.
Like React's <></>: returns multiple elements from a component
without introducing an extra container. The reconciler flattens
Fragment elements at the children-list level, so each child appears
as a direct sibling of the Fragment's parent in the native tree.
Useful inside Provider /
memo / conditional logic when grouping
siblings inside another component's child list:
pn.Column(
pn.Text("Top"),
pn.Fragment(
pn.Text("Middle A"),
pn.Text("Middle B"),
),
pn.Text("Bottom"),
)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*children
|
Optional[Element]
|
Child elements to expose at the parent level. |
()
|
key
|
Optional[str]
|
Optional key for the Fragment itself (rarely useful since Fragment doesn't appear in the native tree). |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
ErrorBoundary
¶
ErrorBoundary(*children: Element, fallback: Optional[Any] = None, key: Optional[str] = None) -> Element
Catch render errors in the wrapped subtree and display fallback instead.
fallback may be an Element or a
callable that receives the exception and returns an Element.
Useful for isolating risky subtrees so a single failure doesn't
crash the page.
When multiple children are passed they're grouped under a
Fragment so the boundary still wraps a
single logical subtree.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*children
|
Element
|
Subtree to wrap. |
()
|
fallback
|
Optional[Any]
|
Element rendered when the subtree raises during
render, or a callable |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Element
|
|
FlatList
¶
FlatList(*, data: Optional[List[Any]] = None, render_item: Optional[Callable[[Any, int], Element]] = None, key_extractor: Optional[Callable[[Any, int], str]] = None, item_height: Optional[float] = None, separator_height: float = 0, refresh_control: Optional[Dict[str, Any]] = None, on_item_press: Optional[Callable[[int], None]] = None, horizontal: bool = False, num_columns: int = 1, list_header: Optional[Element] = None, list_footer: Optional[Element] = None, list_empty: Optional[Element] = None, on_end_reached: Optional[Callable[[], None]] = None, on_end_reached_threshold: float = 0.5, content_container_style: StyleProp = None, style: StyleProp = None, key: Optional[str] = None) -> Element
Virtualized scrollable list that renders items from data lazily.
Backed by UITableView on iOS and RecyclerView on Android via
the VirtualList element. Each visible row is mounted on demand
by a nested
Reconciler when
item_height is specified.
When item_height is omitted the implementation falls back to an
eager (non-virtualized) ScrollView of every row — keep the data
set small in that mode (the fallback is convenient for short lists
where virtualization overhead would dominate).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
Optional[List[Any]]
|
Iterable of arbitrary item values. |
None
|
render_item
|
Optional[Callable[[Any, int], Element]]
|
None
|
|
key_extractor
|
Optional[Callable[[Any, int], str]]
|
Function returning a stable key per item. |
None
|
item_height
|
Optional[float]
|
Fixed row height in layout units. Required to enable native virtualization. When omitted, the list falls back to an eager scroll of every row (not recommended for long lists). |
None
|
separator_height
|
float
|
Vertical gap between items, in layout units.
Combined with |
0
|
refresh_control
|
Optional[Dict[str, Any]]
|
Optional |
None
|
on_item_press
|
Optional[Callable[[int], None]]
|
Callback invoked with the row index when the user taps a row (virtualized backend only). |
None
|
horizontal
|
bool
|
Lay rows out left-to-right instead of top-to-bottom (forces the eager backend). |
False
|
num_columns
|
int
|
Render items in a grid of this many columns
(forces the eager backend). |
1
|
list_header
|
Optional[Element]
|
Optional element rendered once above all rows. |
None
|
list_footer
|
Optional[Element]
|
Optional element rendered once below all rows. |
None
|
list_empty
|
Optional[Element]
|
Optional element rendered when |
None
|
on_end_reached
|
Optional[Callable[[], None]]
|
Callback invoked when the user scrolls within
|
None
|
on_end_reached_threshold
|
float
|
Fraction of the viewport from the end
at which |
0.5
|
content_container_style
|
StyleProp
|
Style applied to the inner content wrapper (forces the eager backend). |
None
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation of the list itself. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Element
|
(virtualized) or |
SectionList
¶
SectionList(*, sections: Optional[List[Dict[str, Any]]] = None, render_item: Optional[Callable[[Any, int, int], Element]] = None, render_section_header: Optional[Callable[[Dict[str, Any], int], Element]] = None, item_height: Optional[float] = None, section_header_height: float = 32.0, separator_height: float = 0, style: StyleProp = None, key: Optional[str] = None) -> Element
Virtualized list that supports section headers.
Internally flattens sections into a single virtualized list
where each row is either a section header or a section item. The
row mounter dispatches to render_section_header or
render_item depending on the row's type.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
sections
|
Optional[List[Dict[str, Any]]]
|
Each section is |
None
|
render_item
|
Optional[Callable[[Any, int, int], Element]]
|
|
None
|
render_section_header
|
Optional[Callable[[Dict[str, Any], int], Element]]
|
|
None
|
item_height
|
Optional[float]
|
Fixed row height for items, in layout units. |
None
|
section_header_height
|
float
|
Fixed header height in layout units. |
32.0
|
separator_height
|
float
|
Gap appended below each item, in layout units. |
0
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Element
|
(virtualized). When |
Element
|
back to an eager column. |
StatusBar
¶
StatusBar(*, bar_style: Optional[Literal['light', 'dark', 'default']] = None, background_color: Optional[Color] = None, hidden: Optional[bool] = None, key: Optional[str] = None) -> Element
Configure the device's status bar appearance.
StatusBar is a side-effect element: it doesn't render any visible content but applies its props to the host platform's status bar. Mount one near the top of your tree.
The bar_style parameter is named separately from the universal
style kwarg (which is unused here) to avoid the conflict that
style="light" would create with the visual-style dict used
elsewhere.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
bar_style
|
Optional[Literal['light', 'dark', 'default']]
|
|
None
|
background_color
|
Optional[Color]
|
Color of the status-bar background (Android only — iOS draws the bar transparent over your content). |
None
|
hidden
|
Optional[bool]
|
When |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
KeyboardAvoidingView
¶
KeyboardAvoidingView(*children: Element, behavior: Literal['padding', 'position'] = 'padding', style: StyleProp = None, key: Optional[str] = None) -> Element
Wrap content that should shift up when the keyboard is shown.
Subscribes to the platform-reported keyboard height (via
use_keyboard_height
internally) and applies it as bottom padding so the focused text
input stays visible.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*children
|
Element
|
Children rendered inside the avoiding container. |
()
|
behavior
|
Literal['padding', 'position']
|
|
'padding'
|
style
|
StyleProp
|
Style dict (or list of dicts). |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Element
|
|
RefreshControl
¶
RefreshControl(*, refreshing: bool = False, on_refresh: Optional[Callable[[], None]] = None, tint_color: Optional[Color] = None) -> Dict[str, Any]
Pull-to-refresh spec for ScrollView / FlatList.
Returns a plain dict that should be passed as the
refresh_control= prop. Modeled as a dict (not an
Element) so the host scroll container can
hold one without it appearing as a child node.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
refreshing
|
bool
|
Drive the spinner's visibility from a use_state value. |
False
|
on_refresh
|
Optional[Callable[[], None]]
|
Callback invoked when the user pulls down past the
threshold. Set |
None
|
tint_color
|
Optional[Color]
|
Color of the spinner. |
None
|
Returns:
| Type | Description |
|---|---|
Dict[str, Any]
|
Dict suitable for the |
Dict[str, Any]
|
container. |
Example
import pythonnative as pn
@pn.component
def MyList():
refreshing, set_refreshing = pn.use_state(False)
def reload():
set_refreshing(True)
# ... fetch data ...
set_refreshing(False)
return pn.ScrollView(
pn.Text("Pull me!"),
refresh_control=pn.RefreshControl(
refreshing=refreshing, on_refresh=reload
),
)
Picker
¶
Picker(*, value: Any = None, items: Optional[List[Dict[str, Any]]] = None, on_change: Optional[Callable[[Any], None]] = None, placeholder: str = 'Select…', style: StyleProp = None, accessibility_label: Optional[str] = None, accessibility_hint: Optional[str] = None, accessible: Optional[bool] = None, ref: Optional[Dict[str, Any]] = None, key: Optional[str] = None) -> Element
A real native dropdown / select widget.
Renders a tappable trigger labelled with the selected item; the
iOS handler attaches a UIMenu (system dropdown) and the Android
handler uses a native Spinner. Selecting an item fires
on_change(value).
items is an ordered list of {"value": Any, "label": str}
entries (label defaults to str(value) when omitted).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
value
|
Any
|
Currently selected value (matched against
|
None
|
items
|
Optional[List[Dict[str, Any]]]
|
Selectable options. |
None
|
on_change
|
Optional[Callable[[Any], None]]
|
Callback invoked with the new value. |
None
|
placeholder
|
str
|
Label shown when no item matches |
'Select…'
|
style
|
StyleProp
|
Style dict applied to the trigger. |
None
|
accessibility_label
|
Optional[str]
|
Spoken description for screen readers. |
None
|
accessibility_hint
|
Optional[str]
|
Spoken extra detail (iOS only). |
None
|
accessible
|
Optional[bool]
|
Override whether the element is exposed to AT. |
None
|
ref
|
Optional[Dict[str, Any]]
|
Optional |
None
|
key
|
Optional[str]
|
Stable identity for keyed reconciliation. |
None
|
Returns:
| Type | Description |
|---|---|
Element
|
An |
Next steps¶
- Wire interactions with Hooks.
- Compose styles with
StyleSheet. - Build navigation with
NavigationContainer.