#python #tkinter
#python #tkinter
Вопрос:
Я запускаю программу, которая собирает данные и отображает эти данные через выходные данные (желтые) в моем пользовательском интерфейсе. Я удаляю эти выходные данные, используя Output.pack_forget()
перед повторным отображением обновленных значений с помощью
Output.insert('end',program_select)
Output.pack()
canvas.create_window(700, 300, window=Output)
Я продолжаю делать это для нескольких тысяч точек данных. В какой-то момент выходные данные больше не обновляются внутри окна tkinter, но отображаются в верхнем левом углу [введите описание изображения здесь] [1] моего экрана. Кажется, я не могу найти какой-либо шаблон относительно того, когда вывод появляется за пределами окна tkinter.
Мое первое подозрение заключалось в том, что я не удалял предыдущие выходные данные в окне, поэтому я добавил Output.pack_forget()
, чтобы удалить их, но этот «сбой» все равно произошел.
Извините, что я еще не загрузил свой код. Моя программа довольно большая, поэтому я пытаюсь упростить свой код, чтобы дать общее представление о том, что происходит.
[Выходные данные отображаются в верхнем левом углу экрана] [1,2]
https://i.stack.imgur.com/CC5zK.png
https://i.stack.imgur.com/PlP8l.png
Ответ №1:
Для виджетов, которые вы помещаете в объект Canvas с помощью canvas.create_window, вы не должны использовать pack()
или pack_forget()
вообще. Когда-либо. Удалите все это.
Однако я не вижу никаких причин, по которым вы вообще используете холст.
Я также подозреваю, что вы создаете новые виджеты, чтобы скрыть старые, вместо того, чтобы обновлять старые. Это приведет к задержке вашей программы. Нам нужно будет просмотреть весь ваш код или хотя бы минимальный исполняемый пример, чтобы оказать конкретную помощь в этом.
Комментарии:
1. <Я также подозреваю, что вы создаете новые виджеты, чтобы скрыть старые вместо обновления старых.>, вы имеете в виду, что я должен использовать что-то вроде
Output.insert()
иroot.update()
вместо этого?2.
Output.delete()
иOutput.insert()
да (при условии, что вывод представляет собой виджет ввода / текста). Альтернативой является использование текстовой переменной, которая, я уверен, была бы намного проще для вас.root.update()
никогда не следует использовать (если вы действительно не знаете, что делаете, и то крайне редко).