PHP
Python

Trang chủ

Hướng dẫn lập trình GUI bằng Tkinter trong Python

Ngôn ngữ Python là một ngôn ngữ lập trình đa mục đích, nổi tiếng với cú pháp dễ đọc, dễ học và tính ứng dụng cao. Trong lĩnh vực phát triển web, Python thường được sử dụng thông qua các framework như Django và Flask để xây dựng các ứng dụng web mạnh mẽ, bảo mật và dễ mở rộng. Trong chuyên mục này, Vietnix không chỉ cung cấp kiến thức nền tảng về ngôn ngữ Python mà còn hướng dẫn chi tiết cách xây dựng các ứng dụng web thực tế, sử dụng các framework phổ biến và áp dụng các kỹ thuật tiên tiến. Vietnix cam kết liên tục cập nhật những bài viết mới nhất về các tính năng mới của Python, các thư viện hỗ trợ hữu ích và những phương pháp tốt nhất, giúp bạn khai thác tối đa sức mạnh của Python và hoàn thiện kỹ năng lập trình web của mình.
html
CSS
javascript
sql
python
php
c
c++
bootstrap
react
mysql
reactjs
vuejs
Javascript Tutorials
25/03/2025
23 phút đọc
Theo dõi Vietnix trên

Hướng dẫn lập trình GUI bằng Tkinter trong Python

Tkinter là thư viện giao diện đồ họa mặc định của Python, giúp lập trình viên dễ dàng tạo ứng dụng GUI với mã nguồn ngắn gọn và linh hoạt. Sử dụng Tkinter, bạn có thể nhanh chóng xây dựng các ứng dụng trực quan mà không cần cài đặt thêm thư viện bên ngoài. Bài viết này sẽ giúp bạn hiểu cách lập trình GUI bằng Tkinter trong Python từ cơ bản đến nâng cao chi tiết nhất.

Những điểm chính

  • Tổng quan về Tkinter: Hiểu cách Tkinter hoạt động trong Python và lý do nó là thư viện GUI mặc định.
  • Các widget quan trọng: Biết cách sử dụng các widget phổ biến như Label, Button, Entry, Combobox, Progressbar để xây dựng giao diện trực quan.
  • Quản lý bố cục: Nắm vững cách sắp xếp và định vị các thành phần bằng các phương thức pack(), grid()place().
  • Các module hỗ trợ: Tìm hiểu về simpledialog, FileDialog, ttk và cách chúng mở rộng khả năng của Tkinter.
  • Các thành phần nâng cao: Biết cách sử dụng Notebook, Treeview, Sizegrip, Separator để tạo giao diện chuyên nghiệp hơn.
  • Viết chương trình hoàn chỉnh: Áp dụng tất cả kiến thức để xây dựng một ứng dụng GUI đầy đủ.
  • Biết thêm Vietnix là nhà cung cấp dịch vụ lưu trữ uy tín, chất lượng.
  • Câu hỏi thường gặp: Giải đáp các thắc mắc phổ biến về Tkinter, giúp bạn khắc phục lỗi và tối ưu ứng dụng hiệu quả hơn.

Tìm hiểu về Tkinter

Tkinter là thư viện GUI tiêu chuẩn của Python, giúp lập trình viên dễ dàng tạo ứng dụng giao diện đồ họa (GUI). Khi kết hợp với Tkinter, Python cung cấp một cách nhanh chóng và thuận tiện để phát triển ứng dụng GUI với giao diện trực quan. Tkinter hoạt động dựa trên bộ công cụ Tk GUI, cung cấp một giao diện hướng đối tượng mạnh mẽ để xây dựng các thành phần đồ họa.

Tkinter là thư viện GUI tiêu chuẩn của Python, giúp lập trình viên dễ dàng tạo ứng dụng giao diện đồ họa
Tkinter là thư viện GUI tiêu chuẩn của Python, giúp lập trình viên dễ dàng tạo ứng dụng giao diện đồ họa

Thư viện Tkinter bao gồm nhiều module hỗ trợ các tính năng quan trọng như:

  • tkinter: Module chính để xây dựng giao diện đồ họa.
  • tkinter.colorchooser: Cung cấp hộp thoại chọn màu cho người dùng.
  • tkinter.filedialog: Tạo hộp thoại mở hoặc lưu tệp.
  • tkinter.font: Hỗ trợ quản lý và tùy chỉnh phông chữ.
  • tkinter.messagebox: Cung cấp hộp thoại thông báo tiêu chuẩn.
  • tkinter.scrolledtext: Widget văn bản có tích hợp thanh cuộn.
  • tkinter.ttk: Bộ widget hiện đại, thay thế nhiều widget cổ điển trong Tkinter.

Để xây dựng một ứng dụng GUI bằng Tkinter, bạn chỉ cần thực hiện các bước sau:

  1. Nhập module Tkinter.
  2. Tạo cửa sổ chính của ứng dụng GUI.
  3. Thêm các widget vào ứng dụng.
  4. Chạy vòng lặp chính để xử lý sự kiện từ người dùng.

Tkinter Widgets

Tkinter cung cấp nhiều widget khác nhau để tạo giao diện đồ họa (GUI), bao gồm: Button, label, entry, listbox và nhiều thành phần khác. Các widget này giúp người dùng tương tác với ứng dụng dễ dàng hơn. Dưới đây là danh sách các widget trong Tkinter cùng mô tả ngắn gọn về chức năng của chúng:

WidgetMô tả
ButtonHiển thị nút bấm trong ứng dụng.
CanvasCho phép vẽ các hình dạng như đường thẳng, hình oval, hình chữ nhật.
CheckbuttonHiển thị danh sách các tùy chọn dưới dạng checkbox, cho phép chọn nhiều mục cùng lúc.
EntryHiển thị ô nhập văn bản một dòng để lấy dữ liệu từ người dùng.
FrameWidget chứa các widget khác để tổ chức giao diện tốt hơn.
LabelHiển thị văn bản hoặc hình ảnh mô tả nội dung của widget khác.
ListboxHiển thị danh sách các mục để người dùng lựa chọn.
MenubuttonTạo menu thả xuống để cung cấp nhiều tùy chọn cho người dùng.
MenuChứa danh sách các lệnh, thường được sử dụng với Menubutton.
MessageHiển thị văn bản nhiều dòng, tương tự như Label nhưng hỗ trợ nội dung dài hơn.
RadiobuttonHiển thị danh sách tùy chọn dưới dạng radio button, chỉ cho phép chọn một mục.
ScaleTạo thanh trượt để chọn giá trị trong một khoảng xác định.
ScrollbarCung cấp chức năng cuộn cho các widget như Listbox hoặc Text.
TextHiển thị hộp văn bản nhiều dòng để nhập nội dung dài.
ToplevelTạo cửa sổ con riêng biệt trong ứng dụng.
SpinboxBiến thể của Entry, cho phép chọn giá trị trong danh sách cố định.
PanedWindowWidget chứa nhiều khung con có thể sắp xếp theo chiều ngang hoặc dọc.
LabelFrameWidget dạng khung có thể chứa các widget khác, thường dùng để nhóm nội dung.
tkMessageBoxHiển thị hộp thoại thông báo hoặc cảnh báo trong ứng dụng.

Việc sử dụng các widget này giúp bạn dễ dàng xây dựng giao diện ứng dụng chuyên nghiệp và tối ưu trải nghiệm người dùng. Hãy cùng mình tìm hiểu chi tiết về từng widget trong các phần tiếp theo.

Các thuộc tính chuẩn

Trong Tkinter, các thuộc tính chuẩn giúp tùy chỉnh giao diện của widget, bao gồm: Kích thước, màu sắc, phông chữ, hiệu ứng viền và con trỏ chuột. Dưới đây là những thuộc tính quan trọng cần nắm:

  • Kích thước (Dimensions): Xác định chiều rộng và chiều cao của widget, có thể được thiết lập bằng pixel hoặc tỷ lệ phần trăm.
  • Màu sắc (Colors): Định dạng màu nền (background) và màu chữ (foreground), giúp giao diện trực quan hơn.
  • Phông chữ (Fonts): Thiết lập kiểu chữ, kích thước và độ đậm nhạt cho văn bản hiển thị trên widget.
  • Điểm neo (Anchors): Xác định vị trí căn chỉnh nội dung trong widget, thường sử dụng các giá trị như N, S, E, W (Bắc, Nam, Đông, Tây).
  • Kiểu viền (Relief styles): Tạo hiệu ứng 3D cho widget với các tùy chọn như flat, raised, sunken, ridge, solid.
  • Ảnh bitmap (Bitmaps): Cho phép hiển thị các hình ảnh đơn sắc dạng bitmap trong widget.
  • Con trỏ chuột (Cursors): Thay đổi kiểu con trỏ khi di chuyển vào widget, giúp cải thiện trải nghiệm người dùng.
Các thuộc tính chuẩn trong Tkinter
Các thuộc tính chuẩn trong Tkinter

Geometry Management

Trong Tkinter, tất cả các widget đều có thể sử dụng các phương pháp quản lý hình học để sắp xếp và bố trí trong vùng chứa của chúng. Tkinter cung cấp ba bộ quản lý hình học chính: pack(), grid(), và place(), mỗi phương pháp có cách tổ chức widget khác nhau.

  • Phương thức pack(): Sắp xếp widget theo khối, lần lượt đặt chúng vào vùng chứa cha theo chiều dọc hoặc ngang.
  • Phương thức grid(): Sắp xếp widget theo dạng lưới, giúp bố cục giao diện dễ kiểm soát hơn bằng cách chia vùng chứa thành các hàng và cột.
  • Phương thức place(): Định vị widget tại một vị trí cụ thể trong vùng chứa cha, cho phép kiểm soát vị trí chính xác hơn.

Module simpledialog

Module simpledialog trong Tkinter cung cấp các hộp thoại nhập dữ liệu dạng modal, giúp người dùng nhập thông tin một cách tiện lợi. Hộp thoại này bao gồm một nhãn (label), một ô nhập liệu (entry) và hai nút OKCancel. Khi nhấn OK, giá trị nhập vào sẽ được trả về, nếu nhấn Cancel, kết quả nhận được sẽ là None.

Các hàm chính trong simpledialog:

  • **askfloat(title, prompt, kw) – Nhận giá trị số thực từ người dùng.
  • **askinteger(title, prompt, kw) – Nhận giá trị số nguyên từ người dùng.
  • **askstring(title, prompt, kw) – Nhận chuỗi ký tự từ người dùng.

Ví dụ sử dụng simpledialog:

  • Nhập số nguyên với askinteger():
from tkinter.simpledialog import askinteger
from tkinter import *
top = Tk()
top.geometry("200x150")
def show():
    num = askinteger("Nhập số", "Vui lòng nhập một số nguyên:")
    print(f"Số bạn đã nhập: {num}")
B = Button(top, text="Nhập số", command=show)
B.pack(pady=20)
top.mainloop()
  • Nhập số thực với askfloat():
from tkinter.simpledialog import askfloat
from tkinter import *
top = Tk()
top.geometry("200x150")
def show():
    num = askfloat("Nhập số thực", "Vui lòng nhập một số thực:")
    print(f"Số bạn đã nhập: {num}")
B = Button(top, text="Nhập số thực", command=show)
B.pack(pady=20)
top.mainloop()
  • Nhập chuỗi với askstring():
from tkinter.simpledialog import askstring
from tkinter import *
top = Tk()
top.geometry("200x150")
def show():
    name = askstring("Nhập tên", "Vui lòng nhập tên của bạn:")
    print(f"Tên bạn đã nhập: {name}")
B = Button(top, text="Nhập tên", command=show)
B.pack(pady=20)
top.mainloop()

Module FileDialog

Module filedialog trong gói Tkinter cung cấp các chức năng hỗ trợ người dùng thao tác với hệ thống tệp. Nó bao gồm lớp FileDialog cùng với các hàm tiện ích giúp thực hiện các thao tác như mở tệp, lưu tệp và chọn thư mục.

Các hàm chính trong filedialog:

  • filedialog.asksaveasfilename(): Hiển thị hộp thoại lưu tệp và trả về đường dẫn tệp do người dùng nhập.
  • filedialog.asksaveasfile(): Tương tự như asksaveasfilename(), nhưng trả về đối tượng tệp đã mở.
  • filedialog.askopenfilename(): Cho phép người dùng chọn một tệp từ hệ thống tệp và trả về đường dẫn của tệp đó.
  • filedialog.askopenfile(): Tương tự askopenfilename(), nhưng trả về đối tượng tệp đã mở.
  • filedialog.askdirectory(): Hiển thị hộp thoại chọn thư mục và trả về đường dẫn thư mục do người dùng chọn.
  • filedialog.askopenfilenames(): Cho phép người dùng chọn nhiều tệp cùng lúc và trả về danh sách các đường dẫn tệp.
  • filedialog.askopenfiles(): Tương tự askopenfilenames(), nhưng trả về danh sách các đối tượng tệp đã mở.

Dưới đây là ví dụ minh họa cách sử dụng askopenfile() trong một ứng dụng đơn giản:

from tkinter.filedialog import askopenfile
from tkinter import *
top = Tk()
top.geometry("100x100")
def show():
   filename = askopenfile()
   print(filename)
B = Button(top, text ="Click", command = show)
B.place(x=50,y=50)
top.mainloop()

Sau khi chạy chương trình trên, hộp thoại mở tệp sẽ xuất hiện. Khi người dùng chọn một tệp, đường dẫn của tệp đó sẽ được hiển thị trong terminal.

Module ttk

Module ttk (Tk Themed Widgets) được giới thiệu từ phiên bản Tk 8.5 trở đi, mang lại nhiều lợi ích như hiển thị font chữ mượt hơn trên hệ thống X11 và hỗ trợ hiệu ứng trong suốt cho cửa sổ. Đồng thời, ttk còn cung cấp tính năng themingtùy chỉnh giao diện cho các ứng dụng sử dụng Tkinter.

Module ttk đi kèm với 18 widget, trong đó 12 widget đã có sẵn trong Tkinter. Khi import ttk, các widget này sẽ được thay thế bằng phiên bản mới với giao diện hiện đại hơn, đồng bộ trên nhiều nền tảng khác nhau. Ngoài ra, ttk bổ sung thêm 6 widget mới, bao gồm:

  • Notebook – Quản lý tập hợp các tab, giúp chuyển đổi giữa các cửa sổ hiển thị nội dung khác nhau.
  • ProgressBar – Hiển thị tiến trình hoặc trạng thái tải dữ liệu bằng hiệu ứng động.
  • Separator – Tạo đường phân cách giữa các widget để bố cục giao diện rõ ràng hơn.
  • Treeview – Hiển thị danh sách dữ liệu dưới dạng cây thư mục, có thể chứa nhãn, hình ảnh và dữ liệu bổ sung.
  • ComboBox – Tạo danh sách thả xuống để người dùng chọn một tùy chọn.
  • Sizegrip – Thêm một tay cầm nhỏ ở góc dưới bên phải cửa sổ, giúp người dùng thay đổi kích thước cửa sổ dễ dàng hơn.

Để sử dụng ttk và ghi đè các widget Tk cơ bản, bạn cần import theo thứ tự sau:

from tkinter import *
from tkinter.ttk import *

Lúc này, các widget gốc như Button, Entry, Label, Scrollbar… sẽ tự động được thay thế bằng phiên bản ttk có thiết kế đẹp hơn. Tuy nhiên, một số thuộc tính quen thuộc như "fg", "bg" sẽ không còn hoạt động, thay vào đó cần sử dụng ttk.Style để thiết lập giao diện.

Widget Combobox

Widget ttk.Combobox trong Python là một danh sách thả xuống cho phép người dùng chọn một giá trị từ danh sách các tùy chọn có sẵn. Nó là một lớp con của widget Entry, do đó kế thừa nhiều tùy chọn và phương thức từ lớp này. Để sử dụng Combobox, bạn cần import ttk từ tkinter và khai báo như sau:

from tkinter import ttk
Combo = ttk.Combobox(master, values=[...])

Trong đó:

  • master: Đối tượng cha chứa Combobox.

  • values: Danh sách các giá trị có thể chọn.

  • get(): Phương thức giúp lấy giá trị hiện tại của Combobox.

Dưới đây là một ví dụ về cách tạo Combobox trong ứng dụng Tkinter:

from tkinter import *
from tkinter import ttk
# Khởi tạo cửa sổ chính
top = Tk()
top.geometry("250x150")
# Tạo Frame chứa Combobox
frame = Frame(top)
frame.pack()
# Danh sách các tùy chọn
services = ["Cloud Hosting", "VPS", "Dedicated Server", "Firewall Anti DDoS", "SSL Certificate"]
# Tạo Combobox với danh sách trên
Combo = ttk.Combobox(frame, values=services)
Combo.set("Chọn dịch vụ")
Combo.pack(padx=5, pady=5)
# Chạy ứng dụng
top.mainloop()

Sau khi chạy đoạn code trên, một cửa sổ xuất hiện với một Combobox chứa các tùy chọn liên quan đến dịch vụ lưu trữ như Cloud Hosting, VPS, Dedicated Server, Firewall Anti DDoS, SSL Certificate. Khi click vào Combobox, danh sách sẽ hiển thị để người dùng chọn một dịch vụ.

Progressbar

ttk.Progressbar là một widget trong Tkinter giúp hiển thị tiến trình của một tác vụ, thường được sử dụng trong màn hình tải hoặc khi thực hiện các quá trình có thời gian xử lý nhất định. Cú pháp như sau:

ttk.Progressbar(parent, orient, length, mode)

Các tham số:

  • Parent: Container chứa Progressbar, có thể là root hoặc một Frame trong Tkinter.
  • Orient: Xác định hướng của Progressbar, có thể là horizontal hoặc vertical.
  • Length: Xác định chiều dài của Progressbar bằng một giá trị số nguyên.
  • Mode: Có hai chế độ là determinate (tiến trình có thể đo lường được) và indeterminate (tiến trình không xác định được thời gian kết thúc).

Đoạn code dưới đây tạo một Progressbar với ba nút:

  • Increase: Tăng tiến trình lên 20 đơn vị.
  • Decrease: Giảm tiến trình xuống 20 đơn vị.
  • Display: Hiển thị giá trị tiến trình hiện tại trong terminal.
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
frame = ttk.Frame(root)
def increment():
    progressBar.step(20)
def decrement():
    progressBar.step(-20)
def display():
    print(progressBar["value"])
progressBar = ttk.Progressbar(frame, mode='determinate', length=200)
progressBar.pack(padx=10, pady=10)
button1 = ttk.Button(frame, text="Increase", command=increment)
button1.pack(padx=10, pady=10, side=tk.LEFT)
button2 = ttk.Button(frame, text="Decrease", command=decrement)
button2.pack(padx=10, pady=10, side=tk.LEFT)
button3 = ttk.Button(frame, text="Display", command=display)
button3.pack(padx=10, pady=10, side=tk.LEFT)
frame.pack(padx=5, pady=5)
root.mainloop()
  • Kết quả như sau:
  • Khi nhấn nút Increase, thanh tiến trình sẽ tăng thêm 20 đơn vị.
  • Khi nhấn nút Decrease, thanh tiến trình sẽ giảm đi 20 đơn vị.
  • Khi nhấn nút Display, giá trị hiện tại của thanh tiến trình sẽ được in ra terminal.

Notebook

Notebook là một widget hữu ích trong module ttk của Tkinter. Nó hoạt động như một tập hợp các container (ví dụ: frames), trong đó mỗi container có thể chứa nhiều widget con bên trong. Mỗi tab hoặc cửa sổ trong Notebook đều có một tab ID tương ứng, giúp xác định tab nào đang được hiển thị. Người dùng có thể dễ dàng chuyển đổi giữa các tab, tương tự như khi thao tác trên một trình soạn thảo văn bản.

  • Cú pháp:
notebook = ttk.Notebook(master, *options)

Trong ví dụ sau, bạn thêm 3 cửa sổ vào widget Notebook bằng hai cách khác nhau:

  • Cách 1: Sử dụng phương thức add(), giúp thêm một tab mới vào cuối danh sách.
  • Cách 2: Sử dụng phương thức insert(), giúp chèn một tab vào vị trí cụ thể.
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
nb = ttk.Notebook(root)
# Tạo hai frame
frame1 = ttk.Frame(nb)
frame2 = ttk.Frame(nb)
label1 = ttk.Label(frame1, text="Cửa sổ 1 - Quản lý dịch vụ")
label1.pack(pady=50, padx=20)
label2 = ttk.Label(frame2, text="Cửa sổ 2 - Giám sát hệ thống")
label2.pack(pady=50, padx=20)
frame1.pack(fill=tk.BOTH, expand=True)
frame2.pack(fill=tk.BOTH, expand=True)
nb.add(frame1, text="Dịch vụ")
nb.add(frame2, text="Hệ thống")
# Thêm tab mới bằng insert()
frame3 = ttk.Frame(nb)
label3 = ttk.Label(frame3, text="Cửa sổ 3 - Cấu hình bảo mật")
label3.pack(pady=50, padx=20)
frame3.pack(fill=tk.BOTH, expand=True)
nb.insert("end", frame3, text="Bảo mật")
nb.pack(padx=5, pady=5, expand=True)
root.mainloop()
  • Kết quả như sau:

Chương trình trên sẽ hiển thị một cửa sổ giao diện với ba tab:

  1. Dịch vụ – nơi quản lý các dịch vụ như hosting, VPS.
  2. Hệ thống – giám sát hiệu suất của server, tài nguyên sử dụng.
  3. Bảo mật – cấu hình tường lửa, chứng chỉ SSL.

Treeview

Treeview là một widget trong Tkinter giúp hiển thị dữ liệu dưới dạng bảng hoặc cây phân cấp. Widget này hỗ trợ các tính năng như tạo hàng và cột cho dữ liệu, cho phép các mục có thể chứa mục con, giúp tổ chức thông tin theo cấu trúc rõ ràng. Cú pháp như sau:

 tree = ttk.Treeview(container, **options)
  • Các tùy chọn:
STTTùy chọnMô tả
1columnsDanh sách các tên cột.
2displaycolumnsDanh sách các chỉ số cột (ký hiệu hoặc số nguyên), xác định các cột hiển thị và thứ tự xuất hiện của chúng. Có thể đặt thành #all để hiển thị tất cả.
3heightSố hàng hiển thị.
4paddingXác định khoảng đệm bên trong widget. Có thể là một số nguyên hoặc danh sách gồm 4 giá trị.
5selectmodeGiá trị có thể là “extended” (mặc định, cho phép chọn nhiều mục), “browse” (chỉ chọn được một mục mỗi lần) hoặc “none” (người dùng không thể thay đổi lựa chọn).
6showDanh sách xác định các thành phần của cây sẽ hiển thị. Mặc định là “tree headings” (hiển thị cả cây và tiêu đề cột).

The Complete Code

Dưới đây là ví dụ về cách sử dụng Treeview để hiển thị thông tin khách hàng của Vietnix:

import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
data = [
   ["Nguyễn Văn A", 29, "Hosting Vietnix"],
   ["Trần B", 34, "VPS Vietnix"],
   ["Lê C", 27, "Email Business"],
   ["Hoàng D", 30, "Firewall Anti DDoS"],
]
def read_data():
    for index, line in enumerate(data):
        tree.insert('', tk.END, iid=index,
                    text=line[0], values=line[1:])
columns = ("age", "service")
# Tạo Treeview
tree = ttk.Treeview(root, columns=columns, height=10)
tree.pack(padx=5, pady=5)
# Đặt tiêu đề cột
tree.heading('#0', text='Tên khách hàng')
tree.heading('age', text='Tuổi')
tree.heading('service', text='Dịch vụ đã sử dụng')
read_data()
root.mainloop()
  • Sau khi chạy đoạn code trên, giao diện hiển thị sẽ như sau:
Tên khách hàng     | Tuổi | Dịch vụ đã sử dụng  
---------------------------------------------------
Nguyễn Văn A       | 29   | Hosting Vietnix      
Trần B             | 34   | VPS Vietnix          
Lê C               | 27   | Email Business       
Hoàng D            | 30   | Firewall Anti DDoS   

Sizegrip

Sizegrip là một widget nhỏ dạng mũi tên, thường được đặt ở góc dưới bên phải của cửa sổ. Khi kéo Sizegrip trên màn hình, kích thước của container mà nó gắn vào cũng sẽ thay đổi theo. Cú pháp như sau:

sizegrip = ttk.Sizegrip(parent, **options)

Đoạn code sau đây minh họa cách sử dụng Sizegrip trong một giao diện đơn giản:

import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
root.geometry("300x200")
frame = ttk.Frame(root, relief="solid", borderwidth=1)
label = ttk.Label(frame, text="Vietnix - Nhà cung cấp hosting uy tín", font=("Arial", 12))
label.pack(padx=10, pady=10)
sizegrip = ttk.Sizegrip(frame)
sizegrip.pack(side="bottom", anchor="se")
frame.pack(padx=20, pady=20, expand=True, fill="both")
root.mainloop()

Chương trình trên sẽ tạo ra một cửa sổ chứa một khung hiển thị dòng chữ “Vietnix – Nhà cung cấp hosting uy tín”. Bên cạnh đó còn có một Sizegrip ở góc dưới bên phải, cho phép bạn thay đổi kích thước khung bằng cách kéo thả chuột.

Separator

Widget ttk.Separator là một widget đơn giản trong Tkinter, có nhiệm vụ chính là giúp phân tách các widget thành từng nhóm hoặc khu vực riêng biệt bằng cách vẽ một đường kẻ giữa chúng. Đường kẻ này có thể được thiết lập theo chiều ngang hoặc chiều dọc tùy theo nhu cầu sử dụng. Cú pháp như sau:

separator = ttk.Separator(parent, **options)

Trong đó, thuộc tính orient có thể nhận một trong hai giá trị:

  • tk.VERTICAL: Tạo separator theo chiều dọc.

  • tk.HORIZONTAL: Tạo separator theo chiều ngang.

Đoạn code sau đây tạo hai Label widget và đặt một separator nằm ngang giữa chúng:

import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
root.geometry("200x150")
frame = ttk.Frame(root)
label = ttk.Label(frame, text="Dịch vụ của Vietnix")
label.pack(padx=5)
separator = ttk.Separator(frame, orient=tk.HORIZONTAL)
separator.pack(expand=True, fill=tk.X)
label = ttk.Label(frame, text="Giải pháp lưu trữ tối ưu")
label.pack(padx=5)
frame.pack(padx=10, pady=50, expand=True, fill=tk.BOTH)
root.mainloop()

Vietnix – Nhà cung cấp dịch vụ lưu trữ uy tín, chất lượng

Vietnix là một trong những đơn vị tiên phong trong lĩnh vực web hostingVPSthuê máy chủ và domain, mang đến giải pháp lưu trữ tối ưu với hiệu suất cao, bảo mật vượt trội. Với hạ tầng mạnh mẽ, đội ngũ kỹ thuật hỗ trợ 24/7, Vietnix cam kết đảm bảo tốc độ truy cập nhanh, ổn định, giúp website vận hành mượt mà. Hơn 80.000 khách hàng đã tin tưởng lựa chọn dịch vụ web hosting tại Vietnix để tối ưu hiệu suất và bảo vệ dữ liệu quan trọng. Liên hệ ngay để được tư vấn giải pháp phù hợp!

Thông tin liên hệ:

  • Website: https://vietnix.vn/
  • Hotline: 18001093
  • Email: sales@vietnix.com.vn 
  • Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh.

Câu hỏi thường gặp

Có thể tạo giao diện dạng Dashboard với biểu đồ trong Tkinter không? Nếu có, cách thực hiện như thế nào?

Có thể tạo giao diện Dashboard trong Tkinter bằng cách kết hợp với Matplotlib hoặc Canvas.
Cách thực hiện:
1. Tạo giao diện bằng Tk() hoặc Frame().
2. Chia layout với grid() hoặc pack().
3. Thêm biểu đồ:
– Dùng Matplotlib (FigureCanvasTkAgg) để hiển thị biểu đồ chuyên nghiệp.
– Hoặc vẽ thủ công bằng Canvas với create_line(), create_rectangle().
4. Cập nhật dữ liệu động bằng after().

Làm thế nào để tối ưu hóa hiệu suất của một ứng dụng GUI Tkinter khi có quá nhiều widget trên cửa sổ chính?

Tối ưu hiệu suất Tkinter khi có quá nhiều widget:
Giảm số lượng widget: Dùng Canvas thay vì nhiều Label, Text thay cho nhiều dòng văn bản.
Tạo widget theo nhu cầu: Dùng destroy() hoặc pack_forget() để ẩn widget không cần thiết.
Giảm cập nhật UI: Dùng after() thay vì vòng lặp while, tránh cập nhật từng widget riêng lẻ.
Ưu tiên grid(): Hiệu quả hơn pack() trong bố cục phức tạp.
Tối ưu hình ảnh: Dùng PNG/JPEG nhẹ, hạn chế ảnh dung lượng lớn.
Dùng đa luồng: Sử dụng threading cho tác vụ nặng để không chặn giao diện.

Có cách nào để làm mờ (blur) một phần giao diện trong Tkinter mà không cần thư viện bên ngoài không?

Tkinter không hỗ trợ trực tiếp hiệu ứng mờ, nhưng có thể mô phỏng bằng cách:
Dùng Frame hoặc Canvas với màu nền xám để tạo lớp phủ mờ giả.
Giảm độ tương phản nội dung bị làm mờ bằng cách thay đổi màu chữ hoặc nền.

Lời kết

Tkinter là một công cụ đơn giản nhưng mạnh mẽ để tạo giao diện GUI trong Python. Qua bài viết này, bạn đã nắm được cách sử dụng các widget cơ bản, quản lý layout và xử lý sự kiện. Để nâng cao kỹ năng, bạn hãy tiếp tục thực hành và khám phá thêm các tính năng như vẽ đồ họa, cập nhật giao diện động và tối ưu hiệu suất. Chúc bạn thành công trong việc xây dựng ứng dụng GUI với Tkinter!

Mọi người cũng xem:

Cao Lê Viết Tiến

PHP Leader
tại
Vietnix

Kết nối với mình qua

Icon Quote
Icon Quote

Học lập trình online cùng vietnix

Học lập trình online cùng Vietnix

PHPXem thêmThu gọn