Поэтому я создал запись, запрашивающую у пользователя имя/имя пользователя, и, используя некоторый код, который я нашел, я сделано так, чтобы запись не позволяла использовать пробелы или писать имя длиной более 12 символов.
Я также сделал информационный ярлык, который сообщает пользователю, когда он сталкивается с этими ограничениями.
Проблема в том, что я хочу использовать эту функцию больше раз, поэтому я хочу поместить метку с советом в некоторые другие записи, которые находятся в других позициях, и лучший способ сделать это — использовать аргументы. Но я не могу понять, как передать их через функцию проверки.
Итак, это какой-то код отдыха, который действительно работает, потому что значения аргументов были вручную помещены туда, где они должны быть:< /p>
Код: Выделить всё
import tkinter as tk
root = tk.Tk()
class Main(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
self.pack(expand= True, fill='both')
self.columnconfigure((0,1), weight= 1)
self.rowconfigure((0,1,2,3),weight= 1)
# I dont understand how this works
self.vcmd= (self.register(self.validate), '%P')
# Creation and grid setup of the entry
self.entry_name= tk.Entry(self, text= '', validate= 'key', validatecommand=self.vcmd)
self.entry_name.grid(row= 3, column= 0, sticky= 'nesw')
#I don't know how can I give the entry and parent parmeters
def validate(self, P, entry= tk.Entry, parent= tk.Frame):
# I should get the grid info from the entry
info= self.entry_name.grid_info()
advise_text= tk.StringVar()
advise_label= tk.Label(self,textvariable= advise_text) #I set the error label in the parent frame
if ' ' in P:
#if there are spaces, reject it
advise_text.set('Spaces not allowed')
advise_label.grid(row= info['row'], column= info['column'], sticky= 'e') #I place the error message in the same grid position as the entry
advise_label.after(1000, lambda: advise_label.destroy())
return False
if len(P)
Подробнее здесь: [url]https://stackoverflow.com/questions/78375838/is-there-a-way-to-pass-arguments-to-a-tkinter-entry-validation-function[/url]