python - 将相同的 tkinter 跟踪方法绑定(bind)到多个 tk 变量

标签 python tkinter

我想创建一个具有多个条目小部件的 tkinter 应用程序。我使用 for 循环来创建小部件、打包它们等。最后,我想使用 tkinter 跟踪方法来验证每个条目小部件的用户输入。如何使用 for 循环将相同的回调函数绑定(bind)到多个 tkinter 变量?我知道trace方法将为回调函数提供三个参数名称、索引和模式。例如,是否有任何方法可以使用名称参数作为 for 循环中每个变量的唯一标识符?

这是我的代码:

import tkinter as tk

class EntryFormular(tk.Frame):
    def __init__(self,master):
        tk.Frame.__init__(self,master)

        self.entrylist = [
        "entry 1",
        "entry 2",
        "entry 3"
        ]

        self.inputvars = list()
        self.build()

    def build(self):

        for entry in self.entrylist:

            var = tk.StringVar(self.master)
            var.trace("w",self.validateFloatInput)
            element = tk.Entry(self,textvariable=var)
            element.pack()

            self.inputvars.append(var)

    def validateFloatInput(self,name,index,mode):
        # bind this method to all 3 entry widgets
        # get variable content using .get() method
        # only allow float inputs between 0 and 1, such as 1.0 or 0.85
        pass

class Application:
    def __init__(self, master):
        self.master = master
        self.entryformular = EntryFormular(master)
        self.entryformular.pack()


if __name__ == "__main__":
    root = tk.Tk()
    my_gui = Application(root)
    root.mainloop()

最佳答案

感谢杰森哈珀!这解决了我的问题。

这是我的代码:

import tkinter as tk
import re

class EntryFormular(tk.Frame):
    def __init__(self,master):
        tk.Frame.__init__(self,master)

        self.entrylist = [
        "entry 1",
        "entry 2",
        "entry 3"
        ]

        self.inputvars = list()
        self.build()

    def build(self):

        for entry in self.entrylist:

            var = tk.StringVar(self.master)
            var.trace("w",self.validateFloatInput)
            element = tk.Entry(self,textvariable=var)
            element.pack()
            self.inputvars.append(var)

    def validateFloatInput(self,name,index,mode):

        regex = re.compile(r'^0(\.\d+)?|1(\.0?)?$')

        for var in self.inputvars:
            if name == str(var):
                if regex.match(var.get()):
                    pass
                else:
                    var.set(var.get()[:-1])
                    self.master.bell()

class Application:
    def __init__(self, master):
        self.master = master
        self.entryformular = EntryFormular(master)
        self.entryformular.pack()


if __name__ == "__main__":
    root = tk.Tk()
    my_gui = Application(root)
    root.mainloop()

关于python - 将相同的 tkinter 跟踪方法绑定(bind)到多个 tk 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54390588/

相关文章:

python - 如何在 fasta 文件中并行计算,其中每个处理器处理一个序列

python - 将 PIP_EXTRA_INDEX_URL 传递给 docker build

python - 如何将多个鼠标按钮绑定(bind)到一个小部件?

python - 在 Tkinter 中如何将被调用函数作为参数传递?

python - 创建环境时如何读取和修复pipenv错误?

python - 文件名、目录名或卷标语法不正确

python - 为什么我不能在 Pandas 中保留一些变量并重命名变量?

python - Tkinter 按钮只允许单击一次

python - 如何在Python中的tk标签上显示网页中的png文件?

python - 如何让圆圈的运动更加流畅?