gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:19:45 25 4
gpt4 key购买 nike

我想创建一个具有多个条目小部件的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com