Cython-based Python bindings for dear imgui - a bloat-free immediate mode graphical user interface library
—
Tools for controlling widget placement, spacing, grouping, and alignment. The layout system provides precise control over how UI elements are arranged and positioned within windows and containers, enabling flexible and responsive interface designs.
Core functions for controlling widget spacing and line arrangement.
def separator() -> None:
"""Add a horizontal line separator."""
def same_line(position: float = 0.0, spacing: float = -1.0) -> None:
"""Keep next widget on same line with optional spacing."""
def new_line() -> None:
"""Add vertical spacing equivalent to a new line."""
def spacing() -> None:
"""Add vertical spacing between widgets."""
def dummy(width: float, height: float) -> None:
"""Add invisible dummy element of specified size."""
def indent(width: float = 0.0) -> None:
"""Move content horizontally to the right."""
def unindent(width: float = 0.0) -> None:
"""Move content horizontally to the left."""Functions for precise cursor positioning within windows for custom layouts.
def get_cursor_pos() -> tuple[float, float]:
"""Get cursor position in window coordinates as (x, y)."""
def get_cursor_pos_x() -> float:
"""Get cursor X position in window coordinates."""
def get_cursor_pos_y() -> float:
"""Get cursor Y position in window coordinates."""
def set_cursor_pos(pos: tuple[float, float]) -> None:
"""Set cursor position in window coordinates."""
def set_cursor_pos_x(x: float) -> None:
"""Set cursor X position in window coordinates."""
def set_cursor_pos_y(y: float) -> None:
"""Set cursor Y position in window coordinates."""
def get_cursor_start_pos() -> tuple[float, float]:
"""Get initial cursor position for current window."""
def get_cursor_screen_pos() -> tuple[float, float]:
"""Get cursor position in screen coordinates as (x, y)."""
def set_cursor_screen_pos(pos: tuple[float, float]) -> None:
"""Set cursor position in screen coordinates."""
def align_text_to_frame_padding() -> None:
"""Align text baseline to frame padding."""Functions for logically grouping widgets and controlling their collective behavior.
def begin_group() -> None:
"""Start item group for layout calculations."""
def end_group() -> None:
"""End item group."""Legacy column-based layout system (use Tables for new code).
def columns(count: int = 1, identifier: str = None, border: bool = True) -> None:
"""Setup columns layout."""
def next_column() -> None:
"""Move to next column."""
def get_column_index() -> int:
"""Get current column index."""
def get_column_offset(column_index: int = -1) -> float:
"""Get column offset in pixels."""
def set_column_offset(column_index: int, offset_x: float) -> None:
"""Set column offset in pixels."""
def get_column_width(column_index: int = -1) -> float:
"""Get column width in pixels."""
def set_column_width(column_index: int, width: float) -> None:
"""Set column width in pixels."""
def get_columns_count() -> int:
"""Get number of columns."""import imgui
# Horizontal layout using same_line
imgui.text("First")
imgui.same_line()
imgui.text("Second")
imgui.same_line()
imgui.text("Third")
# Add spacing between elements
imgui.text("Before spacing")
imgui.spacing()
imgui.text("After spacing")
# Separator line
imgui.text("Above separator")
imgui.separator()
imgui.text("Below separator")imgui.text("Normal text")
imgui.indent()
imgui.text("Indented text")
imgui.indent()
imgui.text("Double indented text")
imgui.unindent()
imgui.text("Single indented text")
imgui.unindent()
imgui.text("Back to normal")# Save current cursor position
start_pos = imgui.get_cursor_pos()
# Draw something at a specific position
imgui.set_cursor_pos((100, 50))
imgui.text("Positioned text")
# Return to saved position and continue layout
imgui.set_cursor_pos((start_pos[0], start_pos[1] + 30))
imgui.text("Back to normal flow")imgui.text("Before group")
imgui.begin_group()
imgui.text("Group item 1")
imgui.text("Group item 2")
imgui.text("Group item 3")
imgui.end_group()
# Same line after group
imgui.same_line()
imgui.text("Next to group")# Create a two-column layout manually
window_width = imgui.get_window_width()
column_width = window_width * 0.5
# Left column
imgui.text("Left Column")
imgui.button("Left Button")
# Move to right column
imgui.same_line(column_width)
imgui.text("Right Column")
imgui.same_line(column_width)
imgui.button("Right Button")imgui.text("Above dummy")
imgui.dummy(0, 20) # 20 pixel vertical space
imgui.text("Below dummy")
# Horizontal dummy for spacing
imgui.text("Left")
imgui.same_line()
imgui.dummy(50, 0) # 50 pixel horizontal space
imgui.same_line()
imgui.text("Right")# Create 3 columns
imgui.columns(3, "MyColumns")
# Column 1
imgui.text("Column 1")
imgui.button("Button 1")
imgui.next_column()
# Column 2
imgui.text("Column 2")
imgui.button("Button 2")
imgui.next_column()
# Column 3
imgui.text("Column 3")
imgui.button("Button 3")
imgui.next_column()
# End columns
imgui.columns(1)Install with Tessl CLI
npx tessl i tessl/pypi-imgui