我使用Python 3.x和Tkinter;我想通过调用一个名为“is_valid_entry”的函数并通过validatecommand传递所有参数来检查tkinter.Entry的值是否是一个数字。我也想对其他条目使用相同的函数。问题是在is_valid_entry中我不能用self.delete清除条目文本(0,END)因为self被视为str而不是tkinter. Entry。我希望我能让它变得容易理解,谢谢帮助!
下面是代码:
from tkinter import *
from tkinter import ttk
from tkinter import filedialog as fd
import tkinter as tk
window = tk.Tk()
window.geometry("600x600")
window.title("Hello Stackoverflow")
window.resizable(False,False)
def isfloat(value):
try:
float(value)
return True
except ValueError:
return False
def is_valid_entry(self,value):
if (value.isnumeric() or isfloat(value)):
return True
else:
tk.messagebox.showerror(title="Error!", message="Value must be a number!")
print(type(self))
self.delete(0,END) # I'd like to clean the entry text but self is type string now not type tkinter.Entry
return False
e2=tk.Entry(window,width=20)
e2.grid(row=6,column=2,padx=5)
print(type(e2))
okayCommand = e2.register(is_valid_entry)
e2.config(validate='focusout',validatecommand=(okayCommand,e2,'%P'))
if __name__ == "__main__":
window.mainloop()
我尝试使用一个函数来检查条目文本是否为有效数字。我注册了该函数并配置了条目,以便在“focusout”的情况下通过validatecommand调用此函数。我也希望传递该条目(self)作为validatecommand的参数,以便当执行函数时,在无效数字的情况下,条目中的文本被清除。2函数中的条目参数被看作一个str而不是tkinter. Entry。
2条答案
按热度按时间qni6mghb1#
一种解决方法是将小部件存储在带有字符串键的字典中,并在
config
设置中传递该键。ocebsuys2#
问题是在is_valid_entry中,我无法使用self.delete(0,END)清除条目文本
致: