Build beautiful GUIs in Python with the power of Rust + Iced
Pyced is a Python binding for the Iced GUI library, built with Rust under the hood. It gives you a dead-simple, reactive interface to build cross-platform desktop apps that look clean and modern — without losing your mind.
- Python simplicity with Rust performance
- Hot reload-style widget creation
- Easy widget binding:
Button,Input,Text, and more coming - Custom callbacks straight from Python
- Cross-platform: Linux, macOS, Windows
pip install pyced # (coming soon to PyPI)Or for development:
git clone https://github.com/yourname/pyced
cd pyced/venv/components
maturin developMake sure you have Rust + maturin installed:
cargo install maturinfrom pyced.components import PyApp, Text, Button, Input, WidgetWrapper
app = PyApp("My App", (800, 600), "icon.png")
input_field = Input("Enter your name", False)
input_cb_id = app.add_callback(lambda: print("Input changed!"))
app.add_widget(WidgetWrapper.from_input(input_field, input_cb_id, size=(300, 40)))
button_cb_id = app.add_callback(lambda: print(input_field.get()))
btn = Button("Click me!")
btn.onclicked(button_cb_id)
app.add_widget(WidgetWrapper.from_button(btn, size=(200, 40)))
app.add_widget(WidgetWrapper.from_text(Text("Welcome!"), size=(300, 50)))
app.run()Creates the main application window.
Simple text display widget.
Standard button. You can attach a callback via btn.onclicked(id).
Basic text input. Use .get() to read the value.
Wraps a widget and its size (width, height).
- Built with Rust + PyO3 + Iced
- Everything runs in a single-threaded Iced event loop
- Widgets are passed between Python and Rust via a wrapper
- Add sliders, dropdowns, checkboxes
- Theme customization
- Async support
- Events/messaging bus
Pull requests, issues, and feedback are welcome.
MIT
Made with 💚 in Rust & Python