Như chúng ta đã biết Tkinter là thư viện GUI vô cùng phổ biến của Python. Với Tkinter, bạn có thể tạo ra phần mềm dành cho máy tính. Trong bài viết này, tôi sẽ hướng dẫn các bạn lập trình ra một App đơn giản: đổi 1 số từ hệ thập phân sang nhị phân.
Lưu ý: Bạn phải biết sơ qua về Tkinter mới có thể hiểu hết được tác dụng của từng dòng lệnh.
Đây là kết quả cuối cùng mà chúng ta đạt được:

1) Source Code:
Dưới đây là toàn bộ mã nguồn của ứng dụng trên:
from tkinter import *
win = Tk()
win.geometry("500x300")
win.config(bg="#4b9ce3")
fr1 = Frame()
fr1.pack()
fr2 =Frame()
fr2.pack()
fr3 = Frame()
fr3.place(x = 1,y = 150)
lb1 = Label(fr1,text = "Đổi từ hệ thập phân sang nhị phân",font=("Arial",12,"bold"),bg = "#4b9ce3")
lb1.pack(side="top")
lb2 = Label(fr2,text = "Số thập phân",font=("Arial",12,"bold"))
lb2.pack(side="left")
def doi():
b = int(te1.get())
i = 0
s = ''
while b != 0:
c = b % 2
b = b // 2
i = i + 1
s = s + str(c)
lb4.config(text = s[::-1])
te1 = Entry(fr2,font=("Arial",12),width=50)
te1.pack()
but1 = Button(win,font = ("Arial",12),text = "Chuyển đổi",command=doi).place(x = 200, y = 90)
lb3 = Label(fr3,text = "Số nhị phân",font=("Arial",12,"bold"))
lb3.pack(side="left")
lb4 = Label(fr3,font=("Arial",12,"bold"))
lb4.pack()
win.mainloop()
2) Giải thích Code:
from tkinter import *
Dòng lệnh đầu tiên có tác dụng thêm tất cả các chức năng và các module từ thư viện Tkinter. Ví dụ như: Label, Button,…
win = Tk()
win.geometry("500x300")
win.config(bg="#4b9ce3")
Dòng lệnh win = Tk() là dòng lệnh khởi tạo cửa sổ chính của App. Dòng lệnh thứ hai có tác dụng quy định kích thước của cửa sổ. Dòng lệnh thứ ba có tác dụng điều chỉnh các thuộc tính của cửa sổ chính, ví dụ như: màu nền (bg), chiều cao (height),… Với câu lệnh như trên thì mình đang quy định màu nền của cửa số có màu xanh dương.
win.mainloop()
Câu lệnh này là 1 câu lệnh cơ bản luôn để ở dòng cuối cùng. Tuy nhiên, mình muốn giới thiệu nó trước vì câu lệnh này vô cùng cần thiết để phần mềm có thể chạy được. Bạn cứ hiểu đơn giản rằng, phải có phương thức .mainloop() thì cửa sổ phần mềm mới có thể hiển thị và chạy được.
fr1 = Frame()
fr1.pack() #hiển thị frame thứ nhất
fr2 =Frame()
fr2.pack() #hiển thị frame thứ hai
fr3 = Frame()
fr3.place(x = 1,y = 150) #hiển thị frame thứ ba tại tọa độ (1,150)
Để có thể dễ dàng quản lý vị trí các thành phần trong App, mình khởi tạo 3 frame bằng 6 dòng lệnh trên.
lb1 = Label(fr1,text = "Đổi từ hệ thập phân sang nhị phân",font=("Arial",12,"bold"),bg = "#4b9ce3")
lb1.pack(side="top")
lb2 = Label(fr2,text = "Số thập phân",font=("Arial",12,"bold"))
lb2.pack(side="left")
Các dòng lệnh trên có tác dụng hiển thị văn bản và nút nhấn. Mình sẽ không giải thích nhiều và đưa ra hình ảnh về những thành phần 2 câu lệnh này biểu diễn:

Bạn có thể thấy hàng chữ “Số thập phân” ở giữa dòng. Các bạn yên tâm, vì khi thêm các dòng lệnh sau, nó sẽ tự căn về vị trí bên trái.
te1 = Entry(fr2,font=("Arial",12),width=50)
te1.pack()
but1 = Button(win,font = ("Arial",12),text = "Chuyển đổi",command=doi).place(x = 200, y = 90)
lb3 = Label(fr3,text = "Số nhị phân",font=("Arial",12,"bold"))
lb3.pack(side="left")
lb4 = Label(fr3,font=("Arial",12,"bold"))
lb4.pack()
Mình sẽ giải thích phần này trước rồi mới quay lại chương trình con kia. Ở đoạn chương trình này, mình đã khởi tạo thêm một Widget đó là Entry. Entry, hiểu đơn giản là một ô cho phép bạn nhập văn bản vào đó. Mình tạo ra 1 button đóng vai trò là nút chuyển đổi, khi bạn nhấn vào thì số thập phân đó sẽ được chuyển sang nhị phân hiển thị ở phía dưới. Ở but1, mình để thuộc tính command = doi, chương trình con mình sẽ giới thiệu ở bên dưới. Nếu bạn mới học qua về Tkinter, thì bạn hiểu nôm na rằng khi bạn nhấn vào button thì nó sẽ thực thi chương trình con có tên đã gán cho command.
def doi():
b = int(te1.get())
i = 0
s = ''
while b != 0:
c = b % 2
b = b // 2
i = i + 1
s = s + str(c)
lb4.config(text = s[::-1])
doi() là 1 chương trình con mình viết ra với mục đích đổi số mà người dùng nhập từ bàn phím sang hệ nhị phân. Chương trình con này chính là 1 bài toán lập trình cơ bản, thuật toán không quá phức tạp. Mình sẽ nói về thuật toán của chương trình này trong 1 bài viết khác. Bây giờ, mình sẽ giải thích về te1.get(). Như các bạn đã biết te1 chính là một Entry. Phương thức get() có tác dụng lấy giá trị mà người dùng nhập vào. Tuy nhiên, giá trị này sẽ có kiểu String. Bởi vậy, để có thể thực hiện các phép toán. Mình đã thực hiện ép giá trị này sang kiểu int và gán nó cho 1 biến đó là b. Biến s đóng vai trò là chuỗi lưu lại các số dư. Câu lệnh lb3.config(text = s[::-1]) để hiển thị giá trị s theo chiều ngược lại, hay chính là số nhị phân cần tìm. Lí do phải viết theo chiều ngược lại đó là khi chuyển số thập phân sang nhị phân, bạn phải chia số này liên tục cho 2 đến khi nó bằng 0, và tổng hợp các số dư từ dưới lên chính là số nhị phân cần tìm. Để hiểu rõ hơn, bạn có thể đọc bài viết sau: Cách đổi từ hệ thập phân sang nhị phân
3) Tổng kết:
Qua bài viết này, mình hi vọng các bạn có thể hiểu thêm về Tkinter, cách sử dụng các Widgets và tính ứng dụng của nó. Nếu có bất kì thắc mắc đừng ngần ngại đặt dưới phần bình luận nhé!
Không đăng được video, nên mình sẽ đăng GIF mình chạy thử :))

Hẹn gặp lại!
Em mới lớp 7 nhưng em muốn học lập trình từ giờ tới lớp 12
LikeLike