Giao diện đồ hoạ (GUI – Graphic User Interface) luôn là một phần không thể thiếu trong lập trình. Dù bạn học ngôn ngữ lập trình nào, bạn đều nghĩ đến việc “làm sao để có giao diện đồ hoạ”.
Thời đại đã thay đổi. Các ứng dụng trước đây được chạy trên máy tính, có giao diện riêng, nhưng hiện nay, tất cả mọi thứ đã chuyển lên web hoặc app di động. Người ta nghe nhạc trên web, xem phim trên web, chơi game trên web, soạn thảo văn bản trên web… Có lẽ không còn ứng dụng nào không có phiên bản web. Vì vậy, để “kiếm sống”, chắc chắn bạn nên tập trung vào kỹ năng làm web thay vì học tạo app trên desktop như trước đây.
Tuy nhiên, GUI vẫn không bao giờ biến mất hoàn toàn. Vẫn có nhu cầu sử dụng, vẫn có người dùng, và vẫn có hàng tá thư viện đồ hoạ tồn tại từ lâu (và vẫn tiếp tục phát triển). Vẫn có những trò chơi chỉ chạy trên máy tính do yêu cầu về hiệu năng mà web không đáp ứng nổi (như Half-Life, Đế chế, Đua xe…).
Python cung cấp nhiều thư viện để làm GUI app như: Qt, WxWidgets, Tkinter, Kivy (cả app di động)… Bạn có thể tìm hiểu đầy đủ thông tin tại:
- https://docs.python.org/3/faq/gui.html
- https://www.python.org/about/apps/#desktop-guis
- https://docs.python-guide.org/scenarios/gui/
Qt là một nền tảng phát triển ứng dụng đa nền tảng, hỗ trợ mọi hệ điều hành phổ biến, và rất xuất sắc. Nếu bạn muốn làm ứng dụng desktop với Python, đầu tư vào Qt và bạn sẽ có một sản phẩm đẳng cấp, không thua kém bất kỳ nền tảng nào khác.
Tkinter là một hệ thống thư viện đồ hoạ đơn giản, dễ sử dụng, chạy trên cả 3 hệ điều hành phổ biến: Windows, Ubuntu, OSX/MacOS. Đặc biệt, thư viện tkinter đã được cài đặt sẵn trong mọi bản phân phối Python, vì vậy bạn không cần phải cài đặt thêm gì.
Trong bài viết này, chúng ta sẽ hướng dẫn tạo một chương trình đồ hoạ sử dụng tkinter với Python 3.6, thực hiện trên MacOS Sierra (10.12.6).
Khái niệm cơ bản về một chương trình giao diện đồ hoạ
Một chương trình có giao diện đồ hoạ là một chương trình luôn chạy cho tới khi người dùng thoát. Điều này có nghĩa là chúng ta cần chạy một vòng lặp vô hạn để luôn hiển thị giao diện (gọi là main loop). Chương trình hoạt động dựa trên các tương tác của người dùng và phản ứng với những tương tác đó (ví dụ: khi nhấn nút này thì chạy cái kia). Loại chương trình như vậy thuộc mô hình “Event-driven programming” (lập trình dựa trên sự kiện).
Các thao tác của người dùng được gọi là các “event”, các hành động tương ứng của chương trình (các function) được gọi là các “callback”, và chúng được liên kết với các phần giao diện. Khi chúng ta liên kết một callback vào nút bấm, khi người dùng nhấn nút, callback sẽ được gọi.
Các phần giao diện như nút bấm, chữ, ô nhập ký tự… được gọi là các “widget”.
Lập trình GUI với Tkinter
Dưới đây là đoạn code để tạo một chương trình GUI sử dụng tkinter trên IPython:
import tkinter as tk
class App:
def __init__(self, master):
# Khởi tạo cửa sổ chính
self.master = master
# Tạo một Frame để chứa các widget khác
frame = tk.Frame(self.master)
# Tạo một label để hiển thị tiêu đề
self.title_label = tk.Label(frame, text="Tiêu đề")
# Tạo một ô nhập địa chỉ trang web
self.entry = tk.Entry(frame)
# Gắn widget entry với phím Enter và gọi method check_site khi người dùng gõ enter
self.entry.bind("<Return>", self.check_site)
# Tạo một nút bấm để kiểm tra status của trang web
self.check_button = tk.Button(frame, text="Kiểm tra", command=self.check_site)
# Tạo nút bấm "Thoát" để đóng chương trình
self.quit_button = tk.Button(frame, text="Thoát", command=frame.quit)
# Đặt tiêu đề và kích thước cho cửa sổ
self.master.title("Ứng dụng tkinter")
self.master.geometry("300x200")
# Gắn các widget vào Frame
self.title_label.pack()
self.entry.pack()
self.check_button.pack()
self.quit_button.pack()
# Hiển thị Frame
frame.pack()
def check_site(self):
# Lấy nội dung từ entry
url = self.entry.get()
# Kiểm tra status của trang web
# Code kiểm tra status ở đây
# Hiển thị kết quả
# Code hiển thị kết quả ở đây
# Tạo cửa sổ chính
root = tk.Tk()
# Tạo ứng dụng
app = App(root)
# Chạy giao diện mãi mãi cho tới khi người dùng đóng lại
root.mainloop()
Kết quả sẽ là một cửa sổ chứa tiêu đề, ô nhập địa chỉ trang web và nút bấm “Kiểm tra”. Danh sách đầy đủ các widget của tkinter có thể được tìm thấy tại đây (Widget là các subclass của class Widget).
Tkinter nhẹ nhàng, dễ sử dụng và đã được cài đặt sẵn trong Python. Nếu bạn cảm thấy hài lòng với Tkinter, bạn có thể tiếp tục sử dụng nó. Nếu không, bạn cũng có thể chuyển sang Qt hoặc các thư viện khác. Các khái niệm lập trình giao diện không thay đổi, dù bạn sử dụng thư viện/framework nào.
Bài viết gốc được đăng tải tại pp.pymi.vn