Urwid
|pypi| |docs| |gitter| |ci| |pre-commit| |coveralls|
About
Urwid is a console user interface library for Python on Linux, OSX, Cygwin or other unix-like OS
and partially supports Windows OS (see below).
It includes many features useful for text console application developers including:
- Applications resize quickly and smoothly
- Automatic, programmable text alignment and wrapping
- Simple markup for setting text attributes within blocks of text
- Powerful list box with programmable content for scrolling all widget types
- Your choice of event loops: Twisted, Glib, Tornado, asyncio, trio, ZeroMQ or select-based loop
- Pre-built widgets include edit boxes, buttons, check boxes and radio buttons
- Display modules include raw, curses, and experimental LCD and web displays
- Support for UTF-8, simple 8-bit and CJK encodings
- 24-bit (true color), 256 color, and 88 color mode support
- Compatible with Python 3.7+ and PyPy
Home Page:
http://urwid.org/
Installation
To install using pip
.. code:: bash
pip install urwid
For advanced functionality extra requirements need to be installed.
Example for ZeroMQ event loop and LCD display:
.. code:: bash
pip install urwid[serial,zmq]
Alternatively if you are on Debian or Ubuntu
.. code:: bash
apt-get install python3-urwid
Windows support notes
- Terminal widget and all related render API (TermCanvas, TermCharset, TermModes, TermScroller)
- Any file descriptors except sockets (Windows OS limitation)
- ZMQEventLoop.
- Extra libraries required for curses display support:
.. code-block:: bash
pip install urwid[curses]
- CursesDisplay incorrectly handles mouse input in case of fast actions.
- Only UTF-8 mode is supported.
Testing
To run tests locally, install & run tox
. You must have
appropriate Python versions installed to run tox
for
each of them.
To test code in all Python versions:
.. code:: bash
tox # Test all versions specified in tox.ini:
tox -e py39 # Test Python 3.9 only
tox -e py39,py10,pypy3 # Test Python 3.9, Python 3.10 & pypy3
Supported Python versions
- 3.7
- 3.8
- 3.9
- 3.10
- 3.11
- 3.12
- 3.13
- pypy3
Authors
Creator
wardi <//github.com/wardi>
_
Maintainers
and3rson <//github.com/and3rson>
,
tonycpsu <//github.com/tonycpsu>
,
ulidtko <//github.com/ulidtko>
,
penguinolog <//github.com/penguinolog>
Contributors
1in7billion <//github.com/1in7billion>
,
abadger <//github.com/abadger>
,
agrenott <//github.com/agrenott>
,
akorb <//github.com/akorb>
,
alethiophile <//github.com/alethiophile>
,
aleufroy <//github.com/aleufroy>
,
alobbs <//github.com/alobbs>
,
amjltc295 <//github.com/amjltc295>
,
and-semakin <//github.com/and-semakin>
,
andrewshadura <//github.com/andrewshadura>
,
andy-z <//github.com/andy-z>
,
anttin2020 <//github.com/anttin2020>
,
Apteryks <//github.com/Apteryks>
,
Arfrever <//github.com/Arfrever>
,
AutoAwesome <//github.com/AutoAwesome>
,
belak <//github.com/belak>
,
berney <//github.com/berney>
,
bk2204 <//github.com/bk2204>
,
BkPHcgQL3V <//github.com/BkPHcgQL3V>
,
bwesterb <//github.com/bwesterb>
,
carlos-jenkins <//github.com/carlos-jenkins>
,
Certseeds <//github.com/Certseeds>
,
Chipsterjulien <//github.com/Chipsterjulien>
,
chrisspen <//github.com/chrisspen>
,
cltrudeau <//github.com/cltrudeau>
,
Codeberg-AsGithubAlternative-buhtz <//github.com/Codeberg-AsGithubAlternative-buhtz>
,
cortesi <//github.com/cortesi>
,
d0c-s4vage <//github.com/d0c-s4vage>
,
derdon <//github.com/derdon>
,
dholth <//github.com/dholth>
,
dimays <//github.com/dimays>
,
dlo <//github.com/dlo>
,
dnaeon <//github.com/dnaeon>
,
doddo <//github.com/doddo>
,
douglas-larocca <//github.com/douglas-larocca>
,
drestebon <//github.com/drestebon>
,
dsotr <//github.com/dsotr>
,
dwf <//github.com/dwf>
,
EdwardBetts <//github.com/EdwardBetts>
,
elenril <//github.com/elenril>
,
EnricoBilla <//github.com/EnricoBilla>
,
extempore <//github.com/extempore>
,
fabiand <//github.com/fabiand>
,
floppym <//github.com/floppym>
,
flowblok <//github.com/flowblok>
,
fmoreau <//github.com/fmoreau>
,
goncalopp <//github.com/goncalopp>
,
Gordin <//github.com/Gordin>
,
GregIngelmo <//github.com/GregIngelmo>
,
grzaks <//github.com/grzaks>
,
gurupras <//github.com/gurupras>
,
HarveyHunt <//github.com/HarveyHunt>
,
Hoolean <//github.com/Hoolean>
,
hukka <//github.com/hukka>
,
hydratim <//github.com/hydratim>
,
ids1024 <//github.com/ids1024>
,
imrek <//github.com/imrek>
,
isovector <//github.com/isovector>
,
itaisod <//github.com/itaisod>
,
ixxra <//github.com/ixxra>
,
jeblair <//github.com/jeblair>
,
johndeaton <//github.com/johndeaton>
,
jonblack <//github.com/jonblack>
,
jspricke <//github.com/jspricke>
,
kedder <//github.com/kedder>
,
Kelketek <//github.com/Kelketek>
,
KennethNielsen <//github.com/KennethNielsen>
,
kesipyc <//github.com/kesipyc>
,
kkrolczyk <//github.com/kkrolczyk>
,
Kwpolska <//github.com/Kwpolska>
,
Lahorde <//github.com/Lahorde>
,
laike9m <//github.com/laike9m>
,
larsks <//github.com/larsks>
,
lfam <//github.com/lfam>
,
lgbaldoni <//github.com/lgbaldoni>
,
lighth7015 <//github.com/lighth7015>
,
livibetter <//github.com/livibetter>
,
Lothiraldan <//github.com/Lothiraldan>
,
Mad-ness <//github.com/Mad-ness>
,
madebr <//github.com/madebr>
,
magniff <//github.com/magniff>
,
marlox-ouda <//github.com/marlox-ouda>
,
mattymo <//github.com/mattymo>
,
mdtrooper <//github.com/mdtrooper>
,
mgk <//github.com/mgk>
,
mimi1vx <//github.com/mimi1vx>
,
mobyte0 <//github.com/mobyte0>
,
MonAaraj <//github.com/MonAaraj>
,
MonthlyPython <//github.com/MonthlyPython>
,
mountainstorm <//github.com/mountainstorm>
,
mselee <//github.com/mselee>
,
mwhudson <//github.com/mwhudson>
,
naquad <//github.com/naquad>
,
nchavez324 <//github.com/nchavez324>
,
neumond <//github.com/neumond>
,
nolash <//github.com/nolash>
,
ntamas <//github.com/ntamas>
,
nyov <//github.com/nyov>
,
ocarneiro <//github.com/ocarneiro>
,
okayzed <//github.com/okayzed>
,
pquentin <//github.com/pquentin>
,
rbanffy <//github.com/rbanffy>
,
ReddyKilowatt <//github.com/ReddyKilowatt>
,
regebro <//github.com/regebro>
,
renegarcia <//github.com/renegarcia>
,
rianhunter <//github.com/rianhunter>
,
roburban <//github.com/roburban>
,
RRMoelker <//github.com/RRMoelker>
,
rwarren <//github.com/rwarren>
,
scopatz <//github.com/scopatz>
,
seanhussey <//github.com/seanhussey>
,
seonon <//github.com/seonon>
,
shadedKE <//github.com/shadedKE>
,
sithglan <//github.com/sithglan>
,
Sjc1000 <//github.com/Sjc1000>
,
sporkexec <//github.com/sporkexec>
,
squrky <//github.com/squrky>
,
ssbr <//github.com/ssbr>
,
techdragon <//github.com/techdragon>
,
thehunmonkgroup <//github.com/thehunmonkgroup>
,
thisch <//github.com/thisch>
,
thornycrackers <//github.com/thornycrackers>
,
TomasTomecek <//github.com/TomasTomecek>
,
tompickering <//github.com/tompickering>
,
tony <//github.com/tony>
,
ttanner <//github.com/ttanner>
,
tu500 <//github.com/tu500>
,
uSpike <//github.com/uSpike>
,
vega0 <//github.com/vega0>
,
vit1251 <//github.com/vit1251>
,
waveform80 <//github.com/waveform80>
,
Wesmania <//github.com/Wesmania>
,
xandfury <//github.com/xandfury>
,
xndcn <//github.com/xndcn>
,
zhongshangwu <//github.com/zhongshangwu>
,
zrax <//github.com/zrax>
.. |pypi| image:: https://img.shields.io/pypi/v/urwid
:alt: current version on PyPi
:target: https://pypi.python.org/pypi/urwid
.. |docs| image:: https://github.com/urwid/urwid/actions/workflows/documentation.yml/badge.svg?branch=master
:alt: Documentation Status
:target: https://urwid.org
.. |gitter| image:: https://img.shields.io/gitter/room/urwid/community
:alt: Gitter
:target: https://gitter.im/urwid/community
.. |ci| image:: https://github.com/urwid/urwid/actions/workflows/pythonpackage.yml/badge.svg?branch=master
:target: https://github.com/urwid/urwid/actions
:alt: CI status
.. |pre-commit| image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit
:target: https://github.com/pre-commit/pre-commit
:alt: pre-commit
.. |coveralls| image:: https://coveralls.io/repos/github/urwid/urwid/badge.svg
:alt: test coverage
:target: https://coveralls.io/github/urwid/urwid