8 / 8 / 3
Регистрация: 04.12.2014
Сообщений: 49

Canvas.after никак не пойму смысл *args и вообще

01.06.2020, 09:36. Показов 2186. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такой код:
Python
1
2
3
4
5
6
7
8
from tkinter import*
tk = Tk()
canvas = Canvas(tk, width = 432, height = 432, bg = 'gray')
canvas.pack()
txt1 = canvas.create_text(216,216, font=('Arial',72,'bold'), text='1') #вывести "1"
def txtdel(obj = None):
    canvas.delete(txt1)
canvas.after(3000, func = txtdel)                                      #стереть "1" через 3 секунды
Смысл его в том что на экран выводится некий текст (в данном случае '1') отображается 3 секунды, а потом стирается. И это работает.
Но заковыка в том, что я не могу получить несколько больший функционал. Нужно выводить несколько таких текстовых объектов. И удалять их независимо друг от друга. По идее здесь должно быть так:
Python
1
2
3
def txtdel(obj):
    canvas.delete(obj)
canvas.after(3000, func = txtdel, txt1)
То есть имя удаляемого объекта подаётся в третьем аргументе .after()
По крайней мере, если верить хелпу питона:
Цитата Сообщение от help(Canvas.after)
Help on function after in module tkinter:

after(self, ms, func=None, *args)
Call function once after given time.

MS specifies the time in milliseconds. FUNC gives the
function which shall be called. Additional parameters
are given as parameters to the function call. Return
identifier to cancel scheduling with after_cancel.
Но что бы я не делал - всё это вообще перестаёт работать. Или СНАЧАЛА делается пауза 3 секунды, а потом выводится окно уже без '1', либо выводится '1' и продолжает "висеть" вечно. Как я понял я неправильно подаю *args. Эти все варианты не работают:
Python
1
2
3
4
canvas.after(3000, func = txtdel(txt1))
canvas.after(3000, func = txtdel, txt1)
canvas.after(3000, func = txtdel, 'txt1')
canvas.after(3000, func = txtdel, canvas.delete(txt1))
А как правильно? Надо функции txtdel отправить аргументом объект txt1 , а не жёстко прописывать его в функции.


P.S. time.sleep() не предлагать. Это вообще не рекомендуется использовать с tkinter


P.P.S. решил таким образом:
Python
1
2
3
4
sp = [txt1]
def txtdel():
    global sp
    canvas.delete(sp[0])
Но во 1-х это нагромождение, во 2-х хочется победить этот *args
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.06.2020, 09:36
Ответы с готовыми решениями:

никак не пойму)
так как я мало чего понимаю) и вопросов тысячи буду их бросать все здесь) обясните что такое 0b

И никак я не пойму
Доброго времени суток, добрые (и не очень) граждане программисты! Столкнулся с проблемой при создании калькуляцкера для разных систем...

И никак я не пойму. ver.2
Вторая тема за час, не ругайте, модераторы ;) Вопрос по поводу калькулятора, который я упоминал в оригинальном топике про значение...

5
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
03.06.2020, 15:08
Цитата Сообщение от Le69uS Посмотреть сообщение
Python
1
canvas.after(3000, func = txtdel(txt1))
Какой смысл передавать вызов функции, а не саму функцию? Корректный вариант этого кода:
Python
1
root.after(3000, lambda: txtdel(txt1));
Добавлено через 7 минут
Также вы можете использовать functools.partial, генерирующую функцию, которая вызывает переданную функцию с нужными аргументами:
Python
1
root.after(3000, functools.partial(txtdel, txt1));
1
8 / 8 / 3
Регистрация: 04.12.2014
Сообщений: 49
06.06.2020, 17:40  [ТС]
Спасибо. Но с *args всё-равно не ясно.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
07.06.2020, 18:48
Le69uS,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from tkinter import *
 
 
tk = Tk()
canvas = Canvas(tk, width = 432, height = 432, bg = 'gray')
canvas.pack()
txt1 = canvas.create_text(216,216, font=('Arial',72,'bold'), text='1') #вывести "1"
 
 
def txtdel(obj, msg=''):
    canvas.delete(obj)
    print(msg)
    
    
tk.after(3000, txtdel, txt1, 'done')
tk.mainloop()
Цитата Сообщение от Le69uS Посмотреть сообщение
По идее здесь должно быть так
Цитата Сообщение от Le69uS Посмотреть сообщение
canvas.after(3000, func = txtdel, txt1)
1. Так быть не может, именованные параметры должны идти в конце.
2. .after имеет параметр callback а не func.

Hyppoprogramm, у него сигнатура неверная
0
 Аватар для GulgDev
132 / 118 / 29
Регистрация: 09.07.2019
Сообщений: 1,071
08.06.2020, 10:48
Цитата Сообщение от Le69uS Посмотреть сообщение
Спасибо. Но с *args всё-равно не ясно.
*args - дополнительные параметры для .after, а не для callback.
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
09.06.2020, 03:25
Le69uS, Hyppoprogramm, вводишь в заблуждение
https://docs.python.org/3/tuto... ment-lists
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.06.2020, 03:25
Помогаю со студенческими работами здесь

Никак не пойму ООП
public class Main { static Cat cat = new Cat(); static People people = new People(); public static void...

Работа с ТАЙМЕРОМ. Никак не пойму
Всем доброй ночи, есть код: int i = 10; while(i < 100) { ...

Не отображает текстбокс. Не пойму никак
TextBox NewLabel = new TextBox(); NewLabel.Width = 40; NewLabel.Height = 20; NewLabel.VerticalAlignment =...

Никак не пойму, что делать
Помогите с решением задачи, никак не выходит. Да и сообразить не получается. Вариант два(справа ). На второй фотке показано, что я пробовал...

Никак не пойму как сделать.
Даны целые числа а(1),а(2),...... Известно, что а(1)>0 и что среди а(2),а(3),.... есть хотя бы одно отрицательное число. Пусть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru