Пишу робота для автоматизации работы с личным кабинетом. Вход закрыт капчей, так что приходится делать GUI, чтобы показать пользователю эту капчу и дать возможность ввести текст с неё. Долго бился с отображение. Упорно показывался серый прямоугольник, хотя картинка на том этапе грузилась с диска. После долгих экспериментов перенёс код отрисовки вкладки в ту функцию, в которой создавалось главное окно и... картинка появилась. После ещё нескольких экспериментов, выяснил, что проблема, похоже, в том, что переменная с картинкой, она создаётся в функции, уничтожается при выходе из функции. Ну, это ожидаемо. Проблема в том, что сносится и картинка, хотя, метки, поля ввода и кнопки сохраняются в структуре интерфейса.
Таким образом, решение простое: сделать эту переменную, которая хранит картинку в памяти, глобальной. Или, как минимум, членом класса. В общем, сама переменная должна жить не меньше, чем то место, в котором она отображается.