+1

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. image.png 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.

image.png

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí