Textual - framework phát triển ứng dụng nhanh cho Python
(github.com/Textualize)- Textual là một framework cho phép tạo giao diện người dùng đa nền tảng bằng API Python đơn giản, và chạy ứng dụng trong terminal hoặc trình duyệt web
- API kết hợp các yếu tố phát triển hiện đại của Python và web, đồng thời hỗ trợ bảo trì lâu dài nhờ các component tách biệt và framework kiểm thử nâng cao
- Thư viện widget cung cấp nút bấm, điều khiển cây, bảng dữ liệu, ô nhập, vùng văn bản, v.v., cùng với hệ thống layout linh hoạt và các theme dựng sẵn
- Về bản chất bên trong, đây là framework bất đồng bộ, có thể tích hợp với các thư viện async nếu muốn và không bắt buộc phải dùng async
- Cài đặt bằng
pip install textual textual-dev, và có thể chạy bản demo bằngpython -m textual- Có thể chạy textual demo mà không cần cài đặt bằng
uvx --python 3.12 textual-demo, cách này yêu cầu uv
- Có thể chạy textual demo mà không cần cài đặt bằng
- Gói
textual-devcung cấp bảng điều khiển phát triển kết nối tới ứng dụng từ một terminal khác, hỗ trợ xem thông điệp hệ thống, sự kiện, thông điệp log và đầu raprint - Ứng dụng Textual cung cấp command palette với tìm kiếm mờ, có thể mở bằng
ctrl+pvà mở rộng bằng lệnh tùy chỉnh cho ứng dụng - Có thể phục vụ ứng dụng Textual trên web bằng
textual serve "python -m textual", và Textual Web hỗ trợ triển khai ứng dụng ngoài việc phục vụ cục bộ - Ứng dụng Textual có yêu cầu hệ thống thấp, có thể cài ở bất cứ đâu chạy được Python và không cần môi trường desktop
1 bình luận
Ý kiến trên Hacker News
Demo Textual mình thích nhất hiện giờ là https://github.com/1j01/textual-paint
Một bản nhái Microsoft Paint khá ổn chạy trong terminal
Một trong những thứ đầu tiên mình thêm vào khi tạo dự án Python mới là https://github.com/Textualize/rich
Mình chọn vì nó giúp làm cho output trong terminal trông đẹp hơn quá dễ
Ngược lại, Rich thì tuyệt vời và làm luồng phát triển rất mượt. Mình thích việc có API tốt để dùng ngay các tính năng như chữ đậm, màu sắc, emoji, bảng
Trông khá hay
Ở công ty trading trước đây, khi làm text UI cho một quy trình quan trọng, chúng tôi đã dùng lanterna(https://github.com/mabe02/lanterna/tree/master). Đó là quy trình nhận dữ liệu thị trường được cập nhật và xử lý những thứ thay đổi giữa phiên giao dịch trước và hôm nay, chẳng hạn đổi tên mã/cổ phiếu (từ PCLN sang BKNG), đổi danh mục do thay đổi vốn hóa thị trường
Đó là những việc hệ thống real-time không xử lý, nhưng lại xảy ra quá thường xuyên hoặc quá khó để xử lý thủ công. Công ty có UI desktop cho nhân viên trading, nhưng không có khái niệm UI cho server, và server thì headless
Không có frontend developer; backend, system và data programmer thỉnh thoảng mới đụng frontend, nên web UI thường rất đơn giản hoặc chỉ phục vụ một mục đích cụ thể, cũng không có công cụ chung
Nếu là năm 2023 thì có thể tôi đã chọn create-react-app hoặc next.js, nhưng vì muốn có thể truy cập dễ dàng ngay cả qua kết nối SSH tệ hại trên 4G tethering khi on-call, nên tôi loại X11 forwarding và RDP. Vì vậy tôi tìm một TUI builder dùng được trong Java, ngôn ngữ của dự án
Điểm hay của Lanterna là có implementation dựa trên Swing, nên có thể chạy ngay trong IntelliJ để lặp nhanh khi phát triển, còn ở môi trường vận hành thì có thể SSH vào máy có server và chạy terminal
Tôi vẫn sẽ tiếp tục theo dõi Textual để xem có thể làm được thứ gì ổn không. Tôi vẫn không thích web app lắm, vì cảm giác để đạt được kết quả tương đương về chức năng so với TUI hoặc desktop GUI không chạy trong trình duyệt thì cần nhiều công sức hơn
Tiếc là cụm “phát triển ứng dụng nhanh” có vẻ cũng áp dụng cho chính thư viện này
Cứ hai tuần lại có release mới, và nó bị vỡ ở những chỗ hơi khó đoán. Dùng Textual để làm prototype thì dễ, nhưng bảo trì về sau thì khó
Tuy nhiên, khi vẫn còn ở phiên bản 0.x, chúng tôi đang tận dụng tối đa lợi thế là có thể dần đổi hướng ở những phần mà cách tiếp cận tốt hơn trở nên rõ ràng
Khi ra release mới, chúng tôi cố gắng làm cho các breaking change dễ thấy nhất có thể. Nếu có phần nào khó workaround hoặc khó làm cho chạy lại, bạn có thể nhờ trợ giúp qua GitHub issue, discussion, hoặc Discord nếu muốn
Vì tôi không phải developer có nhiều kinh nghiệm Python, cho tôi hỏi việc đóng gói cái này thành binary không kèm nhiều dependency thì dễ đến mức nào
Tôi đang tìm thứ gì đó giúp tạo gói cài đặt sản phẩm cho Windows và Linux. Khách hàng cần làm các bước cấu hình trước/sau khi cài phần mềm như ghi file INI, kiểm tra kết nối DB, kiểm tra HTTP server
Trông hay đấy. Tôi vừa làm một app nội bộ cho DevOps và change management bằng unicurses và Python; nó chạy được nhưng có lẽ khả năng mở rộng không tốt
Ban đầu tôi thử TK và QT, nhưng cả hai đều có vài điểm kỳ quặc ở khâu cài đặt ban đầu. QT thì chạy tốt, nhưng tài liệu hữu ích hơi thiếu
Textual có vẻ rất khớp với yêu cầu, nên chắc chắn tôi sẽ thử
Tôi lướt nhanh và xem https://textual.textualize.io/tutorial/ cùng https://github.com/Textualize/textual/blob/main/docs/example...
Tôi tò mò phía Go mọi người đã dùng thành công cái gì. Lý do Textualize hấp dẫn là nó có cảm giác khá giống trình duyệt web, và cả phần xem bảng có thể cuộn cũng gọn gàng
tviewtrông cũng thú vị, nhưng ví dụ nhìnbrew install dbuithì có cảm giác thiên về tự xử lý kiểu mệnh lệnh nhưif KeyPress.A: do_something()hơn là điều hướng khai báo và lồng nhauCó lẽ đây là khác biệt giữa góc nhìn ứng dụng-centric/SPA kiểu “kiểm soát mọi thứ” và góc nhìn document-centric kiểu “thêm component vào trang rồi để nó chảy”. Tôi muốn nghe phản hồi về các mục trong danh sách này: https://codeberg.org/tecras/awesome-go#advanced-console-uis
if KeyPress.A: do_something()” nghĩa là, thay vì che giấu message loop như xu hướng gần đây, nó thực sự cho bạn kiểm soát nó à?https://github.com/gizak/termui
Lazarus/Freepascal mới là đáp án. Phần còn lại gần như là bước lùi
Những animation và transition kiểu này được triển khai chỉ bằng text ASCII thuần à?
Nói nghiêm túc thì các tính năng “easing” và transition đáng để xem qua. Độ trễ khoảng 500ms có thể gây khó chịu với người dùng thành thạo, nhưng có vẻ hữu ích để cung cấp ngữ cảnh trong lúc học cách điều hướng app
Tôi tò mò những dự án như thế này được duy trì bằng cách nào
Dự án này đã được phát triển 2 năm rồi nhưng tôi không thấy nguồn doanh thu. Không biết các developer có được trả công dưới hình thức nào không
https://www.willmcgugan.com/blog/tech/post/from-open-source-...
Cũng cần xét đến thị trường. Năm 2023, gần như đúng nghĩa là rất ít người sẵn sàng trả tiền để dùng thư viện widget cho terminal