Hướng dẫn python create application window - python tạo cửa sổ ứng dụng
Bài viết được sự cho phép của tác giả Nguyễn Việt Hưng Show Giao diện đồ hoạ (GUI – Graphic User Interface) vốn từng là một phần không thể thiếu khi nói về lập trình. Dù học ngôn ngữ lập trình nào, người ta cũng nghĩ tới chuyện “làm sao để có giao diện đồ hoạ”. Thế giới thay đổi, thứ từng quan trọng của ngày hôm qua thì hôm nay chưa chắc đã cần tới. Thời đại tất cả mọi thứ đều chuyển lên web, thì web/app mobile trở thành giao diện để tương tác với người dùng, chứ không phải các phần mềm có giao diện chạy trên máy tính như trước kia. Giờ đây người ta: nghe nhạc trên web, xem film trên web, chơi game trên web, soạn thảo văn bản trên web… khó còn ứng dụng nào không đưa lên web nữa. Vậy nên về mặt “sự nghiệp”, có vẻ như bạn nên đầu tư vào kỹ năng làm web thay vì học để tạo một app trên desktop như cách đây chục năm. Dĩ nhiên, GUI không ngay lập tức biến mất, vẫn có nhu cầu sử dụng, vẫn có người dùng, 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 game mà chỉ chơi được 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 hỗ trợ không ít các thư viện làm GUI app, có thể kể tới: Qt, WxWidgets, Tkinter, Kivy (làm cả app mobile)… xem đầy đủ tại:
Qt là nền tảng phát triển ứng dụng dùng trong công nghiệp, hỗ trợ mọi hệ điều hành phổ biến, và rất “xịn”. Nếu có nhu cầu làm ứng dụng desktop với Python, hãy đầu tư vào Qt để có một sản phẩm đẳng cấp, không kém bất kỳ nền tảng nào khác. Tk là hệ thống thư viện đồ hoạ đơn giản, dễ dùng, chạy trên cả 3 hệ điều hành phổ biến: Windows, Ubuntu, OSX/MacOS và điều quan trọng nhất: thư viện Bài viết hướng dẫn tạo một chương trình đồ hoạ sử dụng Xem thêm các công việc python nhiều vị trí 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 chương trình. Dễ suy ra ở đây có chạy 1 vòng lặp vô hạn để luôn hiển thị giao diện (gọi là main loop). Chương trình này hoạt động dựa trên những tương tác của người dùng và phản ứng với các tương tác đó (bấm nút này thì chạy cái kia). Loại chương trình như vậy thuộc loại mô hình “Event-driven programming”. 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, gắn vào các bộ phận giao diện. Gắn callback vào nút bấm thì khi ta bấm nút, callback sẽ được gọi.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, gắn vào các bộ phận giao diện. Gắn callback vào nút bấm thì khi ta bấm nút, callback sẽ được gọi. Các bộ phận giao diện như nút bấm, chữ, ô nhập ký tự … được gọi là các widget.widget. Lập trình GUI với TkinterCode gõ trực tiếp trên IPython: In [1]: import tkinter as tk In [2]: tk.Frame(tk.Tk()).mainloop() Nếu Tk hoat động trên máy bạn, ngay lập tức một cửa sổ trắng tinh sẽ hiện ra. Cửa sổ hiển thị
Các widgetTkinter có sẵn 17 widget:
# on Ubuntu, requires install: `sudo apt-get install -y python3-tk` import tkinter as tk import requests class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.label = tk.Label(text="PyMi.vn checker") self.label.pack() self.entrythingy = tk.Entry() self.entrythingy.pack() self.contents = tk.StringVar() self.entrythingy["textvariable"] = self.contents self.entrythingy.bind("0 Frame # on Ubuntu, requires install: `sudo apt-get install -y python3-tk` import tkinter as tk import requests class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.label = tk.Label(text="PyMi.vn checker") self.label.pack() self.entrythingy = tk.Entry() self.entrythingy.pack() self.contents = tk.StringVar() self.entrythingy["textvariable"] = self.contents self.entrythingy.bind("2 # on Ubuntu, requires install: `sudo apt-get install -y python3-tk` import tkinter as tk import requests class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.label = tk.Label(text="PyMi.vn checker") self.label.pack() self.entrythingy = tk.Entry() self.entrythingy.pack() self.contents = tk.StringVar() self.entrythingy["textvariable"] = self.contents self.entrythingy.bind("3 # on Ubuntu, requires install: `sudo apt-get install -y python3-tk` import tkinter as tk import requests class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.label = tk.Label(text="PyMi.vn checker") self.label.pack() self.entrythingy = tk.Entry() self.entrythingy.pack() self.contents = tk.StringVar() self.entrythingy["textvariable"] = self.contents self.entrythingy.bind("4 # on Ubuntu, requires install: `sudo apt-get install -y python3-tk` import tkinter as tk import requests class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.label = tk.Label(text="PyMi.vn checker") self.label.pack() self.entrythingy = tk.Entry() self.entrythingy.pack() self.contents = tk.StringVar() self.entrythingy["textvariable"] = self.contents self.entrythingy.bind("5 # on Ubuntu, requires install: `sudo apt-get install -y python3-tk` import tkinter as tk import requests class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.label = tk.Label(text="PyMi.vn checker") self.label.pack() self.entrythingy = tk.Entry() self.entrythingy.pack() self.contents = tk.StringVar() self.entrythingy["textvariable"] = self.contents self.entrythingy.bind("6 # on Ubuntu, requires install: `sudo apt-get install -y python3-tk` import tkinter as tk import requests class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.label = tk.Label(text="PyMi.vn checker") self.label.pack() self.entrythingy = tk.Entry() self.entrythingy.pack() self.contents = tk.StringVar() self.entrythingy["textvariable"] = self.contents self.entrythingy.bind("7 # on Ubuntu, requires install: `sudo apt-get install -y python3-tk` import tkinter as tk import requests class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.label = tk.Label(text="PyMi.vn checker") self.label.pack() self.entrythingy = tk.Entry() self.entrythingy.pack() self.contents = tk.StringVar() self.entrythingy["textvariable"] = self.contents self.entrythingy.bind("8 # on Ubuntu, requires install: `sudo apt-get install -y python3-tk` import tkinter as tk import requests class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.label = tk.Label(text="PyMi.vn checker") self.label.pack() self.entrythingy = tk.Entry() self.entrythingy.pack() self.contents = tk.StringVar() self.entrythingy["textvariable"] = self.contents self.entrythingy.bind("9 tkinter 0 tkinter 1 tkinter 2 tkinter 3 Sau đây ta viết một GUI app có hiển thị tiêu đề (Label), có một ô nhập địa chỉ trang web (Entry), có một nút bấm để kiểm tra status của trang web (Button). Bài viết sử dụng thư viện # on Ubuntu, requires install: `sudo apt-get install -y python3-tk` import tkinter as tk import requests class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.create_widgets() def create_widgets(self): self.label = tk.Label(text="PyMi.vn checker") self.label.pack() self.entrythingy = tk.Entry() self.entrythingy.pack() self.contents = tk.StringVar() self.entrythingy["textvariable"] = self.contents self.entrythingy.bind(" Code trên:
Kết quả: Kết quả hiển thịDanh sách đầy đủ các widget xem tại https://github.com/python/cpython/blob/3.6/Lib/tkinter/init.py – search Tk nhẹ gọn, có sẵn, dễ dùng, đủ dùng khi bạn thấy đủ. Bao giờ thấy ngột ngạt, có lẽ lại chuyển sang Qt, các khái niệm lập trình giao diện dù dùng library/framework nào cũng đều tương tự nhau. Tham khảo
Hết. HVN @ https://pymi.vn and https://www.familug.org/ Bài viết gốc được đăng tải tại pp.pymi.vn Có thể bạn quan tâm:
Xem thêm các việc làm Developer hấp dẫn tại TopDev |