TKINTER TUTORIAL
Chương trình "Hello, World!" bằng Tkinter trong Python Tìm hiểu cửa sổ Tkinter trong Python Tìm hiểu về các Widget Tkinter trong Python 3 cách đặt Options cho Widget Tkinter trong Python Ràng buộc lệnh trong Tkinter Tìm hiểu Event Binding của Tkinter trong Python Giới thiệu widget Label trong Tkinter Cách sử dụng widget Entry trong Tkinter Trình quản lý hình học Pack trong Tkinter Trình quản lý hình học Grid trong Tkinter Trình quản lý hình học Place trong Tkinter Kích thước Widget trong Tkinter Tìm hiểu về widget Frame trong Tkinter Cách sử dụng widget Text của Tkinter Tìm hiểu về widget Scrollbar của Tkinter Cách sử dụng widget ScrolledText của Tkinter Cách sử dụng widget Separator của Tkinter Cách sử dụng Widget Checkbox Trong Tkinter Cách sử dụng widget radio button của Tkinter Cách tạo widget combobox trong Tkinter Cách sử dụng widget Listbox trong Tkinter Sử dụng widget PanedWindow trong Tkinter Cách tạo widget Spinbox trong Tkinter Hướng dẫn sử dụng Slider trong Tkinter Cách sử dụng widget Sizegrip trong Tkinter Cách sử dụng widget LabelFrame trong Tkinter Cách sử dụng widget Progressbar trong Tkinter Cách sử dụng widget Notebook trong Tkinter Cách sử dụng về widget Treeview trong Tkinter Hướng dẫn về Canvas trong Tkinter Cách thiết lập con trỏ widget trong Tkinter. Window hướng đối tượng trong Tkinter Các Frame hướng đối tượng trong Tkinter Cách sử dụng Object-Oriented Application trong Tkinter Phương thức tkraise() của Frame trong Tkinter Các kiểu (Styles) trong Tkinter Cách thay đổi theme trong Tkinter Các element của ttk trong Tkinter Tìm hiểu về đối tượng Tkinter StringVar trong Tkinter Cách sử dụng phương thức map() của ttk.Style Cách sử dụng phương thức after() của Tkinter Cách sử dụng threads trong Tkinter Cách hiển thị progress bar khi thread đang chạy trong Tkinter. Cách tạo nhiều cửa sổ trong một Tkinter Cách sử dụng widget PhotoImage của Tkinter Cấu trúc MVC trong Tkinter Cách sử dụng Validate trong Tkinter Cách hiển thị đồ thị từ thư viện Matplotlib trong Tkinter Ứng dụng System Tray với Tkinter
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.

Tìm hiểu về đối tượng Tkinter StringVar trong Tkinter

Trong bài bài này, bạn sẽ được giới thiệu về đối tượng Tkinter StringVar—một công cụ hữu ích trong việc quản lý và theo dõi giá trị của các widget như Label và Entry. Chúng ta sẽ cùng khám phá cách tạo, sử dụng StringVar để xử lý các giá trị động, cũng như cách tận dụng những tính năng theo dõi thay đổi của nó để làm cho ứng dụng Tkinter của bạn trở nên mạnh mẽ và tương tác hơn.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Giới thiệu về Tkinter StringVar

Tkinter StringVar giúp bạn quản lý giá trị của các widget như Label hoặc Entry một cách hiệu quả hơn.

Để tạo một đối tượng StringVar mới, bạn sử dụng hàm tạo của StringVar như sau:

string_var = tk.StringVar(container, value, name)

Hàm tạo StringVar chấp nhận ba đối số tùy chọn:

Bài viết này được đăng tại [free tuts .net]

  • container: là widget mà đối tượng StringVar được liên kết. Nếu bạn bỏ qua container, mặc định sẽ là cửa sổ gốc (root window).
  • value: là giá trị ban đầu, mặc định là một chuỗi rỗng ''.
  • name: là tên Tcl, mặc định sẽ là PY_VARnum ví dụ: PY_VAR1, PY_VAR2, v.v.

Sau khi tạo đối tượng StringVar, bạn có thể gán nó cho thuộc tính textvariable của một widget chấp nhận đối tượng StringVar.

Ví dụ, đoạn mã sau đây gán string_var cho thuộc tính textvariable của widget Entry:

name_entry = ttk.Entry(root, textvariable=string_var)

Để lấy giá trị hiện tại của widget Entry, bạn có thể sử dụng phương thức get() của đối tượng StringVar:

name_var.get()

Đối tượng StringVar sẽ thông báo cho bạn bất cứ khi nào giá trị của nó thay đổi. Tính năng này rất hữu ích nếu bạn muốn tự động cập nhật các widget khác dựa trên giá trị hiện tại của đối tượng StringVar.

Để gọi một hàm callback bất cứ khi nào giá trị của một đối tượng StringVar thay đổi, bạn sử dụng phương thức trace() của đối tượng StringVar:

string_var.trace('w', callback)

Chế độ 'w' sẽ tự động gọi hàm callback bất cứ khi nào giá trị của string_var thay đổi.

StringVar cũng cung cấp cho bạn hai chế độ khác là 'r''u':

  • 'r' (read) – gọi hàm callback bất cứ khi nào biến được đọc.
  • 'u' (unset) – gọi hàm callback bất cứ khi nào biến bị xóa.

Ví dụ về Tkinter StringVar

Ví dụ sau đây minh họa cách sử dụng đối tượng StringVar cho widget Entry:

import tkinter as tk
from tkinter import ttk

class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title('Tkinter StringVar')
        self.geometry("300x80")

        self.name_var = tk.StringVar()

        self.columnconfigure(0, weight=1)
        self.columnconfigure(1, weight=1)
        self.columnconfigure(2, weight=1)

        self.create_widgets()

    def create_widgets(self):
        padding = {'padx': 5, 'pady': 5}
        
        # Label
        ttk.Label(self, text='Name:').grid(column=0, row=0, **padding)

        # Entry
        name_entry = ttk.Entry(self, textvariable=self.name_var)
        name_entry.grid(column=1, row=0, **padding)
        name_entry.focus()

        # Button
        submit_button = ttk.Button(self, text='Submit', command=self.submit)
        submit_button.grid(column=2, row=0, **padding)

        # Output label
        self.output_label = ttk.Label(self)
        self.output_label.grid(column=0, row=1, columnspan=3, **padding)

    def submit(self):
        self.output_label.config(text=self.name_var.get())

if __name__ == "__main__":
    app = App()
    app.mainloop()

Kết quả:

Tkinter StringVar Example gif

Cách hoạt động của ví dụ:

Đầu tiên, tạo một đối tượng StringVar mới trong phương thức __init__() của lớp App:

self.name_var = tk.StringVar()

Tiếp theo, gán đối tượng StringVar cho tùy chọn textvariable của widget Entry trong phương thức create_widgets():

name_entry = ttk.Entry(self, textvariable=self.name_var)

Cuối cùng, đặt văn bản của widget output_label thành giá trị của đối tượng name_var khi nút bấm được nhấn:

self.output_label.config(text=self.name_var.get())

Ví dụ về theo dõi thay đổi văn bản StringVar trong Tkinter

Ví dụ sau minh họa cách sử dụng đối tượng StringVar để theo dõi sự thay đổi của văn bản.

Cửa sổ chính có hai widget Entry: mật khẩu và xác nhận mật khẩu. Nếu bạn nhập xác nhận mật khẩu khác với mật khẩu, một thông báo lỗi sẽ hiện lên. Nếu không, một thông báo thành công sẽ được hiển thị:

import tkinter as tk
from tkinter import ttk

class App(tk.Tk):
    ERROR = 'Error.TLabel'
    SUCCESS = 'Success.TLabel'

    def __init__(self):
        super().__init__()
        self.title('Change Password')
        self.geometry("300x130")

        self.password_var = tk.StringVar()
        self.confirm_password_var = tk.StringVar()

        self.confirm_password_var.trace('w', self.validate)

        self.columnconfigure(0, weight=1)
        self.columnconfigure(1, weight=1)
        self.columnconfigure(2, weight=1)

        # set style
        self.style = ttk.Style(self)
        self.style.configure('Error.TLabel', foreground='red')
        self.style.configure('Success.TLabel', foreground='green')

        self.create_widgets()

    def create_widgets(self):
        padding = {'padx': 5, 'pady': 5, 'sticky': tk.W}
        
        # message
        self.message_label = ttk.Label(self)
        self.message_label.grid(column=0, row=0, columnspan=3, **padding)

        # password
        ttk.Label(self, text='New Password:').grid(column=0, row=1, **padding)

        password_entry = ttk.Entry(
            self, textvariable=self.password_var, show='*')
        password_entry.grid(column=1, row=1, **padding)
        password_entry.focus()

        # Confirm password
        ttk.Label(self, text='Confirm Password:').grid(
            column=0, row=2, **padding)

        confirm_password = ttk.Entry(
            self, textvariable=self.confirm_password_var, show='*')
        confirm_password.grid(column=1, row=2, **padding)
        confirm_password.focus()

        # Change button
        submit_button = ttk.Button(self, text='Change')
        submit_button.grid(column=0, row=3, **padding)

    def set_message(self, message, type=None):
        """ đặt thông báo lỗi hoặc thành công
        """
        self.message_label['text'] = message
        if type:
            self.message_label['style'] = type

    def validate(self, *args):
        """ xác nhận mật khẩu
        """
        password = self.password_var.get()
        confirm_password = self.confirm_password_var.get()

        if confirm_password == password:
            self.set_message(
                "Success: The new password looks good!", self.SUCCESS)
            return

        if password.startswith(confirm_password):
            self.set_message('Warning: Keep entering the password')

        self.set_message("Error: Passwords don't match!", self.SUCCESS)

if __name__ == "__main__":
    app = App()
    app.mainloop()

Kết quả:

Tkinter StringVar Demo gif

Cách hoạt động của ví dụ:

Đầu tiên, xác định hai hằng số ERRORSUCCESS để đặt cho message_label dựa trên kết quả của việc xác nhận mật khẩu:

ERROR = 'Error.TLabel'
SUCCESS = 'Success.TLabel'

Tiếp theo, tạo hai đối tượng StringVar:

self.password_var = tk.StringVar()
self.confirm_password_var = tk.StringVar()

Sau đó, sử dụng phương thức trace() để gọi phương thức self.validate() bất cứ khi nào văn bản của widget xác nhận mật khẩu thay đổi:

self.confirm_password_var.trace('w', self.validate)  

Cuối cùng, hiển thị thông báo thành công nếu mật khẩu trùng khớp trong phương thức validate(). Nếu không, hiển thị thông báo cảnh báo nếu mật khẩu bắt đầu giống với mật khẩu xác nhận. Nếu mật khẩu không trùng khớp, hiển thị thông báo lỗi.

Kết bài

Qua bài bài viết này, bạn đã học cách sử dụng đối tượng Tkinter StringVar để quản lý giá trị của các widget một cách hiệu quả. Bằng cách gán StringVar cho thuộc tính textvariable của widget, bạn có thể dễ dàng kiểm soát và truy xuất giá trị của chúng. Ngoài ra, với phương thức trace(), bạn có thể theo dõi các thay đổi của văn bản, giúp ứng dụng của bạn trở nên linh hoạt và phản hồi nhanh hơn với những thay đổi từ người dùng. Những kỹ năng này sẽ giúp bạn xây dựng các ứng dụng Tkinter mạnh mẽ và tương tác hơn.

Cùng chuyên mục:

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn toàn diện về module datetime trong Python

Hướng dẫn toàn diện về module datetime trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Từ khóa yield trong Python

Từ khóa yield trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Định dạng chuỗi Strings trong Python

Định dạng chuỗi Strings trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Làm việc với các biến môi trường trong Python

Làm việc với các biến môi trường trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa iterator và iterable trong Python

Sự khác biệt giữa iterator và iterable trong Python

Cách làm việc với file tarball/tar trong Python

Cách làm việc với file tarball/tar trong Python

Chuyển đổi kiểu dữ liệu trong Python

Chuyển đổi kiểu dữ liệu trong Python

Sự khác biệt giữa toán tử == và is trong Python

Sự khác biệt giữa toán tử == và is trong Python

Làm việc với file ZIP trong Python

Làm việc với file ZIP trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Sự khác biệt giữa byte objects và string trong Python

Sự khác biệt giữa byte objects và string trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format  trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Top