Ошибка "TypeError: func() takes 0 positional arguments but 1 was given" при вызове функции.

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
Windows 11 21H2. Python 3.11.0.

Здравствуйте! Я новичок. При вызове функции через bind-привязку события <Return> (нажатие кнопки "Enter") у виджета "tkinter.entry" (entry_3) возникает ошибка "TypeError: func() takes 0 positional arguments but 1 was given".
Вот код программы:
Python:
from tkinter import *

# Main window
root = Tk()
root.title("Test")
root.geometry("300x200+100+100")
root.configure(bg='#CECECE')
# Main window


# Variables

font_1 = ("Helvetica", 14, 'bold')
font_2 = ("Helvetica", 12, 'bold')
font_3 = ("Veranda", 13)

# Variables

# Functions

def func():
    entry_1.focus_set()

# Functions

# Wigets

entry_1 = Entry(font=font_1,
                     width = 20,
                     highlightthickness = 4,
                     highlightcolor = 'orange',
                     highlightbackground = 'gray'
                     )
entry_1.grid(row=0, column=0)
entry_1.bind('<Return>', lambda a: entry_2.focus_set())


entry_2 = Entry(font=font_1,
                     width = 20,
                     highlightthickness = 4,
                     highlightcolor = 'orange',
                     highlightbackground = 'gray'
                     )
entry_2.grid(row=1, column=0)
entry_2.bind('<Return>', lambda a: entry_3.focus_set())

entry_3 = Entry(font=font_1,
                     width = 20,
                     highlightthickness = 4,
                     highlightcolor = 'orange',
                     highlightbackground = 'gray'
                     )
entry_3.grid(row=2, column=0)
entry_3.bind('<Return>', func) # Тут выдает ошибку "TypeError: func() takes 0 positional arguments but 1 was given"


btn = Button(text="Button",
                      background="white",
                      foreground="black",
                      padx=5,
                      pady=5,
                      font=("Arial Bold", 15, 'bold'),
                      relief = 'raised',
                      width = 20,
                      command = func)
btn.grid(row=3, column=0)

# Wigets

entry_1.focus_set()

root.mainloop()

А если в объявлении (def) функции прописываю аргумент (event), то нажатия "Enter" на текстовых полях отрабатывают нормально, а нажатие на кнопку выдает ошибку " TypeError: func() missing 1 required positional argument: 'event' "
Вот код:
Python:
from tkinter import *

# Main window
root = Tk()
root.title("Test")
root.geometry("300x200+100+100")
root.configure(bg='#CECECE')
# Main window


# Variables

font_1 = ("Helvetica", 14, 'bold')
font_2 = ("Helvetica", 12, 'bold')
font_3 = ("Veranda", 13)

# Variables

# Functions
def func(event):
    entry_1.focus_set()

# Functions

# Wigets

entry_1 = Entry(font=font_1,
                     width = 20,
                     highlightthickness = 4,
                     highlightcolor = 'orange',
                     highlightbackground = 'gray'
                     )
entry_1.grid(row=0, column=0)
entry_1.bind('<Return>', lambda a: entry_2.focus_set())


entry_2 = Entry(font=font_1,
                     width = 20,
                     highlightthickness = 4,
                     highlightcolor = 'orange',
                     highlightbackground = 'gray'
                     )
entry_2.grid(row=1, column=0)
entry_2.bind('<Return>', lambda a: entry_3.focus_set())


entry_3 = Entry(font=font_1,
                     width = 20,
                     highlightthickness = 4,
                     highlightcolor = 'orange',
                     highlightbackground = 'gray'
                     )
entry_3.grid(row=2, column=0)
entry_3.bind('<Return>', func)# Теперь тут нормально


btn = Button(text="Button",
                      background="white",
                      foreground="black",
                      padx=5,
                      pady=5,
                      font=("Arial Bold", 15, 'bold'),
                      relief = 'raised',
                      width = 20,
                      command = func) # А тут выдает ошибку "TypeError: func() missing 1 required positional argument: 'event'
"
btn.grid(row=3, column=0)
# Wigets


entry_1.focus_set()

root.mainloop()
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 581
457
83
вообще нужно разные функции делать, но можно так

Python:
from tkinter import *

# Main window
root = Tk()
root.title("Test")
root.geometry("300x200+100+100")
root.configure(bg='#CECECE')
# Main window


# Variables

font_1 = ("Helvetica", 14, 'bold')
font_2 = ("Helvetica", 12, 'bold')
font_3 = ("Veranda", 13)

# Variables

# Functions
def func(event):
    entry_1.focus_set()

# Functions

# Wigets

entry_1 = Entry(font=font_1,
                     width = 20,
                     highlightthickness = 4,
                     highlightcolor = 'orange',
                     highlightbackground = 'gray'
                     )
entry_1.grid(row=0, column=0)
entry_1.bind('<Return>', lambda a: entry_2.focus_set())


entry_2 = Entry(font=font_1,
                     width = 20,
                     highlightthickness = 4,
                     highlightcolor = 'orange',
                     highlightbackground = 'gray'
                     )
entry_2.grid(row=1, column=0)
entry_2.bind('<Return>', lambda a: entry_3.focus_set())


entry_3 = Entry(font=font_1,
                     width = 20,
                     highlightthickness = 4,
                     highlightcolor = 'orange',
                     highlightbackground = 'gray'
                     )
entry_3.grid(row=2, column=0)
entry_3.bind('<Return>', func)# Теперь тут нормально


btn = Button(text="Button",
                      background="white",
                      foreground="black",
                      padx=5,
                      pady=5,
                      font=("Arial Bold", 15, 'bold'),
                      relief = 'raised',
                      width = 20,
                      command = lambda: func(btn)) # А тут выдает ошибку "TypeError: func() missing 1 required positional argument: 'event'

btn.grid(row=3, column=0)
# Wigets


entry_1.focus_set()

root.mainloop()
 
  • Мне нравится
Реакции: Malenkey

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
Спасибо большое! (y) Не знал!:sneaky:
 

Форум IT Специалистов