Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Cách thay đổi theme trong Tkinter
Trong bài viết này, bạn sẽ được tìm hiểu cách thay đổi chủ đề (theme) trong Tkinter để thay đổi giao diện của ứng dụng từ chủ đề này sang chủ đề khác. Chủ đề trong Tkinter không chỉ quyết định màu sắc và kiểu dáng của các thành phần giao diện mà còn ảnh hưởng đến toàn bộ "cảm nhận" của ứng dụng. Việc nắm vững cách quản lý và thay đổi chủ đề sẽ giúp bạn tạo ra các ứng dụng Tkinter có giao diện linh hoạt và phù hợp với nhu cầu người dùng.
Giới thiệu về chủ đề ttk trong Tkinter
Trong Tkinter, một chủ đề (theme) xác định "giao diện và cảm nhận" của tất cả các widget. Nó là một tập hợp các kiểu (styles) được áp dụng cho tất cả các widget ttk.
Mỗi kiểu (style) xác định giao diện của một lớp widget, ví dụ: nút (Button). Mỗi chủ đề đi kèm với một tập hợp các kiểu. Bạn có thể thay đổi giao diện của các widget bằng cách:
- Sửa đổi các kiểu có sẵn
- Hoặc tạo kiểu mới
Tkinter cho phép bạn thay đổi chủ đề hiện tại sang một chủ đề khác. Khi bạn thay đổi chủ đề hiện tại sang một chủ đề mới, Tkinter sẽ áp dụng các kiểu của chủ đề đó cho tất cả các widget ttk.
Bài viết này được đăng tại [free tuts .net]
Để lấy danh sách các chủ đề có sẵn, bạn sử dụng phương thức theme_names()
của đối tượng ttk.Style
.
Đầu tiên, tạo một đối tượng mới của lớp ttk.Style
:
style = ttk.Style(root)
Tiếp theo, lấy danh sách các chủ đề có sẵn bằng cách gọi phương thức theme_names()
:
style.theme_names()
Để lấy chủ đề hiện tại, bạn sử dụng phương thức theme_use()
:
current_theme = style.theme_use()
Lưu ý rằng mỗi hệ điều hành (OS) như Windows, macOS và Linux đều có các chủ đề được định nghĩa sẵn. Nếu bạn sử dụng các phương thức theme_names()
và theme_use()
trên các hệ điều hành khác nhau, bạn sẽ nhận được các kết quả khác nhau.
Để thay đổi chủ đề hiện tại sang một chủ đề mới, bạn truyền tên chủ đề mới đó vào phương thức theme_use()
:
style.theme_use(theme_name)
Chương trình sau đây sẽ hiển thị tất cả các chủ đề trong hệ thống của bạn và cho phép bạn thay đổi từ chủ đề này sang chủ đề khác:
import tkinter as tk from tkinter import ttk class App(tk.Tk): def __init__(self): super().__init__() # Cửa sổ chính self.title('Theme Demo') self.geometry('400x300') self.style = ttk.Style(self) # Label label = ttk.Label(self, text='Name:') label.grid(column=0, row=0, padx=10, pady=10, sticky='w') # Entry textbox = ttk.Entry(self) textbox.grid(column=1, row=0, padx=10, pady=10, sticky='w') # Button btn = ttk.Button(self, text='Show') btn.grid(column=2, row=0, padx=10, pady=10, sticky='w') # Radio button self.selected_theme = tk.StringVar() theme_frame = ttk.LabelFrame(self, text='Themes') theme_frame.grid(padx=10, pady=10, ipadx=20, ipady=20, sticky='w') for theme_name in self.style.theme_names(): rb = ttk.Radiobutton( theme_frame, text=theme_name, value=theme_name, variable=self.selected_theme, command=self.change_theme) rb.pack(expand=True, fill='both') def change_theme(self): self.style.theme_use(self.selected_theme.get()) if __name__ == "__main__": app = App() app.mainloop()
Trong ví dụ này, khi bạn chọn một chủ đề từ danh sách các nút radio, phương thức change_theme()
sẽ áp dụng chủ đề đã chọn.
Nếu bạn chạy chương trình trên Windows 10, bạn sẽ thấy cửa sổ như sau:
Nếu bạn thay đổi chủ đề sang "classic", bạn sẽ thấy kiểu của các widget (Label, Entry, Button, LabelFrame, và Radio Button) thay đổi như sau:
Kết bài
Như vậy, việc nắm vững cách sử dụng các phương thức của lớp ttk.Style
giúp bạn dễ dàng truy cập và quản lý các chủ đề có sẵn trong ứng dụng Tkinter. Bằng cách tạo một đối tượng của lớp ttk.Style
, bạn có thể liệt kê các chủ đề từ hệ điều hành và thay đổi chủ đề hiện tại chỉ với một vài dòng mã. Điều này không chỉ giúp cải thiện giao diện ứng dụng mà còn mang lại trải nghiệm người dùng tốt hơn. Hãy thử áp dụng kiến thức này để tạo ra các ứng dụng Tkinter đẹp mắt và chuyên nghiệp hơn.