Python pywebview, восстанавливающий свернутые окна, дает пустой экранPython

Программы на Python
Ответить
Anonymous
 Python pywebview, восстанавливающий свернутые окна, дает пустой экран

Сообщение Anonymous »

Описание проблемы
Я работаю над приложением на основе Python, которое использует pywebview для отрисовки пользовательского интерфейса и win32gui для управления окном. Мое приложение гарантирует, что одновременно может работать только один экземпляр, используя мьютекс. При запуске второго экземпляра он восстанавливает существующее окно приложения, если оно свернуто или скрыто за другими экранами.
Проблема возникает при попытке восстановить свернутое окно. Используя следующий код:

Код: Выделить всё

hwnd = win32gui.FindWindow(None, 'Kiosk App')
if hwnd:
win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)
win32gui.SetForegroundWindow(hwnd)
Это успешно выводит свернутое окно на передний план. Однако содержимое восстановленного приложения становится пустым, что делает пользовательский интерфейс непригодным для использования. Приложение по-прежнему реагирует на такие действия, как закрытие окна, но содержимое WebView не отображается повторно.
Ожидаемое поведение
  • < li>Когда свернутое приложение восстанавливается, его содержимое WebView должно снова появиться правильно и позволить пользователю взаимодействовать с пользовательским интерфейсом.
Наблюдаемое поведение
  • Окно восстанавливается и выводится на передний план, но содержимое внутри WebView становится пустым.
Попытки устранения неполадок
  • Я проверил, что дескриптор hwnd правильно ссылается на существующее окно приложения.
  • Win32gui.ShowWindow и Вызовы win32gui.SetForegroundWindow работают должным образом при запуске приложения.
  • Я пытался динамически перезагрузить содержимое WebView во время восстановления, но поведение сохраняется.
Фрагмент ключевого кода
Ниже приведена соответствующая часть кода, в которой я выполняю восстановление:

Код: Выделить всё

try:
handle = win32event.CreateMutex(None, True, mutex_name)
last_error = win32api.GetLastError()
if last_error == winerror.ERROR_ALREADY_EXISTS:
print("Another instance of the Kiosk application is already running.")
hwnd = win32gui.FindWindow(None, 'Kiosk App')
if hwnd:
win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)
win32gui.SetForegroundWindow(hwnd)
sys.exit(0)

start_app('./ui/index.html', './keyboard/index.html')
Сведения о среде
Попытки устранения неполадок
Основываясь на рекомендациях и предложениях, я уже попробовал несколько подходов к решению проблемы, но ни один из них пока не сработал:
  • Обновление содержимого WebView:

    Я пытался динамически перезагружать содержимое WebView при восстановлении свернутого окна приложения. Однако это не решило проблему с пустым экраном.
  • Изменение состояний видимости окна:

    Я экспериментировал с различными флагами win32gui.ShowWindow, такими как SW_RESTORE, SW_SHOW и SW_SHOWNORMAL, чтобы правильно восстановить окно. Хотя эти флаги переводят окно на передний план, содержимое внутри WebView остается пустым.
  • Воссоздание WebView :

    Я пытался динамически уничтожить и воссоздать экземпляр WebView во время восстановления. Хотя этот подход работал частично, он вызывал другие проблемы, такие как потеря состояния приложения и пользовательских данных.
  • Обеспечение состояния переднего плана< /strong>:

    Я подтвердил, что окно приложения было правильно установлено на передний план с помощью win32gui.SetForegroundWindow. Проблема сохраняется, несмотря на то, что приложение находится в фокусе.
Несмотря на эти попытки, WebView остается пустым, когда свернутое приложение восстановлен. Сейчас мне нужны рекомендации по любому конкретному подходу, который я мог пропустить, или какие-либо сведения о том, как на рендеринг WebView может повлиять восстановление окна с помощью win32gui.
Ожидаемое поведение
  • Когда свернутое приложение восстанавливается, его содержимое WebView должно снова появиться правильно и позволить пользователю взаимодействовать с пользовательским интерфейсом.


Подробнее здесь: https://stackoverflow.com/questions/793 ... ank-screen
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»