Как вручную закрыть всплывающее окно в PySimpleGui?

#python #pysimplegui

#питон #pysimplegui

Вопрос:

Как вручную закрыть всплывающее окно в PySimpleGui? Я знаю, что могу закрыть его автоматически через определенное время, но я хочу закрыть его вручную. Я попытался следовать:

 #popup to inform the user that the installtion starts installingPopup=sg.popup_no_buttons('start installation...',non_blocking=True) #actual installation installation() #close popup installingPopup.close()  

Ответ №1:

Нет никакого способа закрыть всплывающее окно, определенное PySimpleGUI.

Возможно, вам нужно определить одну из них самостоятельно, чтобы у вас была переменная window , и закрыть ее window.close() последней.

Пример кода для этого

 from time import sleep import threading import PySimpleGUI as sg  def installation(window, steps):  step = 1  while step lt;= steps:  window.write_event_value('JOB', f'Step {step} of Installation ...')  sleep(1)  step  = 1  window.write_event_value('JOB DONE', None)  def popup(message):  sg.theme('DarkGrey')  layout = [[sg.Text(message)]]  window = sg.Window('Message', layout, no_titlebar=True, keep_on_top=True, finalize=True)  return window  sg.theme('DarkBlue3') sg.Window._move_all_windows = True  layout = [  [sg.Button('Install', tooltip='Installation')],  [sg.Text('', size=50, key='STATUS')], ] window = sg.Window('Matplotlib', layout, finalize=True) pop_win = None while True:   event, values = window.read(timeout=10)   if event == sg.WINDOW_CLOSED:  break  elif event == 'Install':  window['Install'].update(disabled=True)  popup_win = popup('Start installation...')  window.force_focus()  threading.Thread(target=installation, args=(window, 5), daemon=True).start()  elif event == 'JOB':  message = values['JOB']  window['STATUS'].update(message)  elif event == 'JOB DONE':  popup_win.close()  popup_win = None  window['Install'].update(disabled=False)  window['STATUS'].update("Installation done")  if popup_win:  popup_win.close() window.close()  

введите описание изображения здесь

Возможно, нет необходимости показывать всплывающее окно при установке, просто сообщение отображается в строке состояния sg.или в sg.Текст в главном окне, это будет проще, все зависит от вашей идеи.