TRƢỜNG ĐẠI HỌC VINH VIỆN KỸ THUẬT VÀ CÔNG NGHỆ CHƢƠNG 8 LẬP TRÌNH GIAO DIỆN TRONG PYTHON Nghệ An, 2022 Chƣơng 8: LẬP TRÌNH GIAO DIỆN TRONG PYTHON NỘI DUNG GIẢNG DẠY: 8. Giới thiệu về lập trình giao diện và thư viện Tkinter 8. Đồ họa Chƣơng 8: LẬP TRÌNH GIAO DIỆN TRONG PYTHON NỘI DUNG GIẢNG DẠY: 8. Giới thiệu về lập trình giao diện và thư viện Tkinter 8.
Đồ họa GIỚI THIỆU VỀ LẬP TRÌNH GIAO DIỆN VÀ THƯ VIỆN TKINTER Khái niệm về chƣơng trình có giao diện đồ họa - 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 (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 đồ họa 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ào thì thực hiện công việc tương ứng). Loại chương trình như vậy thuộc loại mô hình "Event-driven programming". GIỚI THIỆU VỀ LẬP TRÌNH GIAO DIỆN VÀ THƯ VIỆN TKINTER Khái niệm về chƣơng trình có giao diện đồ họa - Trong chương trình đồ họa, 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, được 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. GIỚI THIỆU VỀ LẬP TRÌNH GIAO DIỆN VÀ THƯ VIỆN TKINTER So sánh chƣơng trình có giao diện kiểu dòng lệnh (Command Line Interface - CLI) và chƣơng trình có giao diện đồ họa (Graphical User Interface - GUI) CLI GUI - Chiếm ít tài nguyên. - Dễ dàng hơn cho người dùng - Người dùng có nhiều quyền khi tương tác với ứng dụng.
xử lý hệ thống. - Có khả năng hoạt động đa - Chỉ việc gõ một vài dòng để nhiệm. thực hiện một việc. GIỚI THIỆU VỀ LẬP TRÌNH GIAO DIỆN VÀ THƯ VIỆN TKINTER Giới thiệu thư viện Tkinter - Tkinter là một gói trong Python có chứa module Tk hỗ trợ cho việc lập trình GUI.
- Tk ban đầu được viết cho ngôn ngữ Tcl, sau đó Tkinter được viết ra để sử dụng Tk bằng trình thông dịch Tcl trên nền Python. - Ngoài Tkinter ra còn có một số công cụ khác giúp tạo một ứng dụng GUI viết bằng Python như wxPython, PyQt, và PyGTK. GIỚI THIỆU VỀ LẬP TRÌNH GIAO DIỆN VÀ THƯ VIỆN TKINTER Để tạo ra một một khung cửa sổ đơn giản trong Tkinter chỉ cần làm như sau: from tkinter import Tk, Frame, BOTH class Example(Frame): def __init__(self, parent): Frame.parent = parent self.mainloop() Chƣơng 8: LẬP TRÌNH GIAO DIỆN TRONG PYTHON NỘI DUNG GIẢNG DẠY: 8. Giới thiệu về lập trình giao diện và thư viện Tkinter 8.
Đồ họa QUẢN LÝ LAYOUT Trong Tkinter có hai loại widget: - Các widget thường như nút bấm, textbox… - Containter, đây là những widget chứa các widget khác (còn đợc gọi là layout). Trong Tkinter có 3 loại layout: - Place là kiểu layout tự do, tức là bạn sẽ phải tự quy định vị trí cũng như kích thước của các widget. - Pack sắp xếp các widget của bạn theo chiều ngang và chiều dọc. - Grid sắp xếp widget theo dạng bảng.
QUẢN LÝ LAYOUT Place: - Khi thiết kế giao diện thường dùng layout kiểu tự do: - Người lập trình phải tự quy định vị trí và kích thước cho các widget trên màn hình, nếu kích thước cửa sổ thay đổi thì kích thước và vị trí của các widget không thay đổi. - Thiết kế theo kiểu tự do cũng rất bất tiện khi muốn thay đổi, thêm hay bớt các widget thì hầu như sẽ phải sắp xếp lại toàn bộ widget. QUẢN LÝ LAYOUT Ví dụ: import Tkinter as tk import random root = tk.Tk() # width x height + x_offset + y_offset: root.geometry("170x200+30+30") languages = ['Python','Perl','C++','Java','Tcl/Tk'] labels = range(5) QUẢN LÝ LAYOUT Ví dụ: for i in range(5): ct = [random.randrange(256) for x in range(3)] brightness = int(round(0.114*ct[2])) ct_hex = "%02x%02x%02x" % tuple(ct) bg_colour = '#' + "".mainloop() QUẢN LÝ LAYOUT Pack: Dễ sử dụng nhất trong ba trình quản lý hình học của Tk và Tkinter. - Thay vì phải khai báo chính xác vị trí của một widget sẽ xuất hiện trên màn hình hiển thị, chúng ta có thể khai báo vị trí của các widget bằng lệnh pack tương đối với nhau.
Lệnh pack sẽ chăm sóc các chi tiết. - Trình quản lý layout này bị hạn chế về khả năng so với các trình quản lý Grid và Place. Đối với các ứng dụng đơn giản, nó chắc chắn là người quản lý của sự lựa chọn. Ví dụ, các ứng dụng đơn giản như đặt một số vật dụng cạnh nhau hoặc đặt lên nhau.
QUẢN LÝ LAYOUT Ví dụ: from Tkinter import * root = Tk() Label(root, text="Red Sun", bg="red", fg="white").grid(row=r,column=1) r=r+1 mainloop() QUẢN LÝ LAYOUT Grid: Trong nhiều trường hợp là sự lựa chọn tốt nhất. Grid đặt các widget trong bảng 2 chiều, bao gồm một số hàng và cột. - Vị trí của một widget được xác định bởi một hàng và một số cột. - Các widget có cùng số cột và số hàng khác nhau sẽ ở trên hoặc dưới nhau.
Tương ứng, các vật dụng có cùng số hàng nhưng số cột khác nhau sẽ nằm trên cùng một "dòng" và sẽ nằm cạnh nhau, tức là ở bên trái hoặc bên phải. Chƣơng 8: LẬP TRÌNH GIAO DIỆN TRONG PYTHON NỘI DUNG GIẢNG DẠY: 8. Giới thiệu về lập trình giao diện và thư viện Tkinter 8. Đồ họa WIDGET Widget là các thành phần cấu tạo nên một ứng dụng GUI.
Widget rất đa dạng, có một số widget quan trọng cần phải có của bất kì nền tảng nào kể cả Tkinter ví dụ như button (nút bấm), check box hay scroll bar (thanh cuộn). Ngoài những widget cơ bản lập trình viên còn có thể tùy chỉnh widget của riêng mình. WIDGET Checkbutton: là widget hiển thị hộp đánh dấu. Ví dụ: from tkinter import Tk, Frame, Checkbutton from tkinter import BooleanVar, BOTH class Example(Frame): def __init__(self, parent): Frame.parent = parent self.var = BooleanVar() cb = Checkbutton(self, text="Show Title", variable=self.var, command=self.place(x=50, y=50) WIDGET def onClick(self): if self.get() == True: self.title("Checkbutton") else: self.mainloop() WIDGET Label: dùng để hiển thị text hoặc hình ảnh.
Ví dụ: dùng Label để hiển thị ảnh lên màn hình. from PIL import Image, ImageTk from tkinter import Tk, Frame, Label class Example(Frame): def __init__(self, parent): Frame.parent = parent self.jpg") tatras = ImageTk.img) label = Label(self, image=tatras) label.image = tatras label.mainloop() WIDGET Scale: hiển thị một thanh cuộn gắn với một khoảng giá trị nào đó. Ví dụ: from tkinter import Tk, BOTH, IntVar, LEFT from tkinter.ttk import Frame, Label, Scale, Style class Example(Frame): def __init__(self, parent): Frame.parent = parent self.style = Style() self.theme_use("default") self.pack(fill=BOTH, expand=1) scale = Scale(self, from_=0, to=100, command=self.var = IntVar() self.label = Label(self, text=0, textvariable=self.mainloop() WIDGET Listbox: cho phép hiển thị một danh sách các item. Người dùng có thể chọn một hoặc nhiều item.ttk import Frame, Label from tkinter import Tk, BOTH, Listbox, StringVar, END class Example(Frame): def __init__(self, parent): Frame.parent = parent self.pack(fill=BOTH, expand=1) acts = ["Scarlet Johansson", "Rachel Weiss", "Natalie Portman", "Jessica Alba"] lb = Listbox(self) WIDGET for i in acts: lb.bind("<<ListboxSelect>>", self.var = StringVar() self.label = Label(self, text=0, textvariable=self.pack() WIDGET def onSelect(self, val): sender = val.widget idx = sender.curselection() value = sender.mainloop() THẢO LUẬN NHÓM NỘI DUNG: Cách tổ chức giao diện người dùng trong một số hệ điều hành thông dụng.
BÀI TẬP NỘI DUNG: Tạo một chương trình GUI giới thiệu về thông tin cá nhân. CHUẨN BỊ CHO BUỔI HỌC TIẾP THEO: Đọc các tài liệu về nội dung mục 8. Chƣơng 8: LẬP TRÌNH GIAO DIỆN TRONG PYTHON NỘI DUNG GIẢNG DẠY: 8. Giới thiệu về lập trình giao diện và thư viện Tkinter 8.
Bài tập MENU Trình bày tất cả các lệnh và chức năng của ứng dụng, có sẵn cho người dùng thông qua giao diện người dùng. Menu trong GUI được trình bày với sự kết hợp của văn bản và ký hiệu để thể hiện các lựa chọn bằng chuột (hoặc ngón tay trên màn hình cảm ứng) trên một trong các biểu tượng hoặc văn bản, một hành động sẽ được bắt đầu. Một hành động hoặc hoạt động (lựa chọn) có thể, là mở hoặc lưu tệp, hoặc thoát hoặc thoát khỏi ứng dụng,. MENU Ví dụ: cách tạo menu trong Tkinter.
from tkinter import Frame, Tk, Menu class Example(Frame): def __init__(self, parent): Frame.parent = parent self.title("Simple Menu") menuBar = Menu(self.add_command(label="Exit", command=self.add_cascade(label="File", menu=fileMenu) MENU def onExit(self): self.mainloop() MENU Tạo menu con: tạo một menu con từ một menu cha. from Tkinter import Tk, Frame, Menu class Example(Frame): def __init__(self, parent): Frame.parent = parent self.title("Submenu") menubar = Menu(self.add_command(label="New feed") submenu.add_command(label="Bookmarks") submenu.add_command(label="Mail") fileMenu.add_cascade(label='Import', menu=submenu) MENU fileMenu.add_separator() fileMenu.add_command(label="Exit", command=self.add_cascade(label="File", menu=fileMenu) def onExit(self): self.mainloop() MENU Popup menu: còn được gọi là menu ngữ cảnh là menu được hiện ra khi click chuột lên cửa sổ. from Tkinter import Tk, Frame, Menu class Example(Frame): def __init__(self, parent): Frame.parent = parent self.menu = Menu(self.parent, tearoff=0) self.add_command(label="Beep", command=self.add_command(label="Exit", command=self.bind("<Button-3>", self.y_root) MENU def onExit(self): self.mainloop() Chƣơng 8: LẬP TRÌNH GIAO DIỆN TRONG PYTHON NỘI DUNG GIẢNG DẠY: 8. Giới thiệu về lập trình giao diện và thư viện Tkinter 8.
Bài tập HỘP THOẠI - Có thể được sử dụng để hiển thị các hộp thông báo, hiển thị cảnh báo hoặc lỗi hoặc widget để chọn tệp và màu sắc. - Ngoài ra còn có các hộp thoại đơn giản, yêu cầu người dùng nhập chuỗi, số nguyên hoặc số float. HỘP THOẠI Messagebox: dùng để hiển thị thông báo cho người dùng và đôi khi còn dùng để đưa ra yêu cầu chọn lựa cho người dùng.ttk import Frame, Button from tkinter import Tk, BOTH import tkinter.messagebox as mbox class Example(Frame): def __init__(self, parent): Frame.parent = parent self.