9 thư viện GUI Python để xây ứng dụng hiện đại
Bạn nghĩ Python tuyệt, nhưng làm desktop app với giao diện tử tế thì quá phiền phức? Đã đến lúc bỏ định kiến đó. Hệ sinh thái GUI của Python hiện nay rất mạnh mẽ, giúp bạn xây ứng dụng đẹp, mượt và đa nền tảng—chỉ với Python.
Môi trường phát triển trước đã
Khi quản lý nhiều dự án, việc chuyển đổi phiên bản Python dễ trở thành ác mộng. Dự án A còn cần 2.7, trong khi dự án B lại đòi 3.12 hoặc mới hơn. Việc nhảy qua lại môi trường khiến ai cũng nản.
Đó là lúc ServBay phát huy tác dụng: cài và quản lý nhiều phiên bản Python chỉ bằng vài cú nhấp—từ 2.7 đến 3.14. Khi môi trường đã ổn, bạn có thể tập trung hoàn toàn vào việc xây phần mềm chất lượng.

Tkinter — Thư viện GUI tích hợp sẵn
Nếu đã cài Python, bạn đã có Tkinter. Đây là toolkit mặc định đi kèm Python. Dù giao diện hơi “cổ điển”, Tkinter phù hợp cho công cụ nội bộ nhỏ hoặc giao diện quản trị: ổn định, nhẹ và tài liệu đầy đủ.
Có sẵn trong Python
Dễ học, gọn nhẹ
Ổn định, tài liệu phong phú
python import tkinter as tk from tkinter import messagebox
def show_greeting(): messagebox.showinfo("Greeting", "Hello from Tkinter!")
window = tk.Tk() window.title("My First Tkinter App") window.geometry("300x150")
greet_button = tk.Button(window, text="Click Me", command=show_greeting) greet_button.pack(pady=40)
window.mainloop()
PySimpleGUI — Viết GUI siêu nhanh
Nếu Tkinter quá dài dòng hoặc trông “cũ kỹ”, PySimpleGUI là lựa chọn tuyệt vời. Nó bọc các thư viện như Tkinter, Qt, WxPython bằng cú pháp đơn giản hơn, giúp tạo UI đầy đủ chỉ trong vài dòng.
Cú pháp cực đơn giản
Trừu tượng đa backend (Tk/Qt/Wx)
Tuyệt vời cho prototype và tool nhanh
python import PySimpleGUI as sg
layout = [ [sg.Text("Enter your name:")], [sg.InputText(key='-NAME-')], [sg.Button("OK"), sg.Button("Exit")] ]
window = sg.Window("PySimpleGUI Example", layout)
while True: event, values = window.read() if event == sg.WIN_CLOSED or event == 'Exit': break if event == 'OK': sg.popup(f"Hello, {values['-NAME-']}!")
window.close()
Flet — Làm UI kiểu Flutter bằng Python
Flet cho phép bạn xây giao diện dùng “động cơ” Flutter nhưng viết bằng Python. Kết quả là UI đẹp, animation mượt, chạy tốt trên desktop, web, và mobile—mà không cần học Dart.
Dựa trên Flutter
Đa nền tảng thực sự
UI đẹp, nhanh triển khai
python import flet as ft
def main(page: ft.Page): page.title = "Flet Counter" page.vertical_alignment = ft.MainAxisAlignment.CENTER
txt_number = ft.TextField(value="0", text_align=ft.TextAlign.RIGHT, width=100)
def minus_click(e):
txt_number.value = str(int(txt_number.value) - 1)
page.update()
def plus_click(e):
txt_number.value = str(int(txt_number.value) + 1)
page.update()
page.add(
ft.Row(
[
ft.IconButton(ft.icons.REMOVE, on_click=minus_click),
txt_number,
ft.IconButton(ft.icons.ADD, on_click=plus_click),
],
alignment=ft.MainAxisAlignment.CENTER,
)
)
ft.app(target=main)
NiceGUI — Web UI hiện đại chỉ với Python
NiceGUI giúp xây web UI hiện đại hoàn toàn bằng Python. Dựa trên FastAPI và Vue.js nhưng bạn không phải đụng vào JavaScript. Có thể triển khai thành website hoặc desktop app. Rất phù hợp cho dashboard và công cụ tương tác.
Viết frontend logic bằng Python
Chạy dạng web hoặc desktop
Tuyệt cho nội bộ và dashboard
python from nicegui import ui
def handle_greet(): ui.notify(f'Hello, {name_input.value}!')
ui.label('Enter your name:') name_input = ui.input(placeholder='Type here…') ui.button('Greet', on_click=handle_greet)
ui.run()
PyWebview — Biến web app thành desktop app
Thoải mái với HTML/CSS/JS? PyWebview cho phép hiển thị web page trong cửa sổ desktop native, giống Electron nhưng nhẹ hơn nhờ dùng WebView của hệ thống. Có cầu nối JS–Python để tương tác hai chiều.
Cực nhẹ so với Electron
Tận dụng kỹ năng web sẵn có
Giao tiếp JS–Python tiện lợi
python import webview import threading import time
def background_task(window): time.sleep(5) window.evaluate_js('alert("Hello from Python after 5 seconds!");')
if name == 'main': window = webview.create_window('PyWebview Example', html='
Waiting for Python…
') thread = threading.Thread(target=background_task, args=(window,)) thread.start() webview.start()Dear PyGui — GUI tăng tốc GPU cho trực quan hóa
Dear PyGui dùng rendering GPU, cực nhanh và phù hợp ứng dụng thời gian thực, dữ liệu lớn. API immediate-mode có khác lạ lúc đầu, nhưng rất mạnh cho dashboard, tool và hệ thống visualization.
Tăng tốc GPU
Lý tưởng cho trực quan dữ liệu
Mô hình immediate-mode
python import dearpygui.dearpygui as dpg
dpg.create_context()
def save_callback(sender, app_data): user_input = dpg.get_value("input_text") dpg.set_value("output_text", f"Saved: {user_input}")
with dpg.window(label="Dear PyGui Example", width=400, height=200): dpg.add_input_text(label="Type something", tag="input_text") dpg.add_button(label="Save", callback=save_callback) dpg.add_text("", tag="output_text")
dpg.create_viewport(title='My App', width=420, height=240) dpg.setup_dearpygui() dpg.show_viewport() dpg.start_dearpygui() dpg.destroy_context()
Kivy — Hỗ trợ cảm ứng, đa nền tảng “thật”
Kivy là framework đầy đủ để xây app đa chạm chạy trên Windows, macOS, Linux, Android, iOS. Không phụ thuộc widget native, nên giao diện và hành vi đồng nhất trên mọi nền tảng.
Hỗ trợ đa chạm
Đa nền tảng thực sự
UI nhất quán
python from kivy.app import App from kivy.uix.button import Button
class MyApp(App): def build(self): return Button(text='Kivy Button', on_press=self.btn_press)
def btn_press(self, instance):
instance.text = 'Clicked!'
if name == 'main': MyApp().run()
Toga — Giao diện native trên từng hệ điều hành
Toga thuộc bộ BeeWare, đi theo hướng dùng widget native của hệ điều hành. Nhờ đó app mang cảm giác “chuẩn” native trên Windows, macOS và Linux.
Look & feel native
Một phần của BeeWare
UX nhất quán theo từng OS
python import toga from toga.style import Pack from toga.style.pack import COLUMN, ROW
class TogaApp(toga.App): def startup(self): main_box = toga.Box(style=Pack(direction=COLUMN))
name_label = toga.Label("Your Name: ", style=Pack(padding=(0, 5)))
self.name_input = toga.TextInput(style=Pack(flex=1))
name_box = toga.Box(style=Pack(direction=ROW, padding=5))
name_box.add(name_label)
name_box.add(self.name_input)
button = toga.Button("Greet", on_press=self.say_hello, style=Pack(padding=5))
main_box.add(name_box)
main_box.add(button)
self.main_window = toga.MainWindow(title=self.formal_name)
self.main_window.content = main_box
self.main_window.show()
def say_hello(self, widget):
self.main_window.info_dialog('Greeting', f'Hello, {self.name_input.value}')
def main(): return TogaApp('Hello Toga', 'org.example.hellotoga')
if name == 'main': main().main_loop()
Gooey — Biến CLI thành GUI chỉ với một dòng
Gooey tự động chuyển tool dòng lệnh thành ứng dụng GUI. Chỉ cần “decorate” hàm main(), Gooey sẽ tạo giao diện trực quan dựa trên argparse—không cần viết lại logic.
Biến CLI thành GUI ngay lập tức
Không phải sửa code lõi
Hữu ích cho người dùng không rành terminal
python from gooey import Gooey, GooeyParser
@Gooey(program_name="Simple Calculator") def main(): parser = GooeyParser(description="Add two numbers") parser.add_argument('num1', type=int, help='First number') parser.add_argument('num2', type=int, help='Second number') args = parser.parse_args()
result = args.num1 + args.num2
print(f"Result: {result}")
if name == 'main': main()
Kết luận
Hệ sinh thái GUI của Python đang rất “khỏe”:
Cần tool nội bộ nhỏ: dùng Tkinter hoặc PySimpleGUI.
Muốn UI hiện đại, đa nền tảng: Flet và NiceGUI rất sáng.
Đã có web app: PyWebview nhẹ và hợp lý.
Cần hiệu năng cho công cụ trực quan: Dear PyGui là lựa chọn mạnh.
Nhắm đến mobile/cảm ứng: Kivy và Toga là “cặp bài trùng”.
Muốn bọc nhanh CLI thành GUI: Gooey xử đẹp.
Dù dự án của bạn là gì, luôn có một thư viện GUI Python phù hợp. Lần tới ai đó nói “Python không làm được desktop app”, hãy gửi cho họ bài này.
Gợi ý thêm cho Viblo Thêm thẻ chủ đề: Python, GUI, Desktop, Cross-platform, Flutter, WebView, Visualization.
Ảnh minh họa tiêu đề: “9 Python GUI Libraries for Modern Apps” với icon các thư viện.
Nếu cần, có thể chèn mục lục bằng Markdown ở đầu bài cho dễ điều hướng.
All rights reserved