@VuztreeCalan
Дилетант Широкого Профиля

Как передать Lable в качестве параметра функции(Tkinter Python3)?

Есть код, отрисовывает окно и Label внутри него. Есть функция имитирующая набор текста, нужна возможность передавать в неё имя того лейбла, в котором должна происходить анимация, но при попытке это сделать он передаётся как int. Как это починить?
P.S. Если внутри функции с анимацией прописать имя лейбла не параметром, а просто глобальным именем, то всё работает.

Нерабочий код с попыткой передать параметр:
import random
from tkinter import *


root = Tk()
root.title("Initial Fantasy")
root.geometry("800x600")

def typewrite(labelWidget,counter=1):
    labelWidget.config(text="Some Text"[:counter])
    root.after(random.randrange(30,150), lambda: typewrite(counter+1))

mainTextBox = Label(text="", fg="#eee", bg="#333")
mainTextBox.place(relx=.50, rely=.325, anchor="center")
typewrite(mainTextBox)

root.mainloop()

Код ошибки:
AttributeError: 'int' object has no attribute 'config'

Рабочий код где производится анимация, но без возможности передать желаемый лейбл:
import random
from tkinter import *


root = Tk()
root.title("Initial Fantasy")
root.geometry("800x600")

def typewrite(counter=1):
    mainTextBox.config(text="Some Text"[:counter])
    root.after(random.randrange(30,150), lambda: typewrite(counter+1))

mainTextBox = Label(text="Этого текста быть не должно", fg="#eee", bg="#333")
mainTextBox.place(relx=.50, rely=.325, anchor="center")
typewrite()

root.mainloop()
  • Вопрос задан
  • 500 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
В первом примере кода label передаётся не всегда. Исправьте lambda: typewrite(counter+1) на lambda: typewrite(labelWidget, counter+1) и всё должно заработать.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы