Python- отображение окна сообщения, которое может быть закрыто в коде (без вмешательства пользователя)

Я создаю тестовые сценарии с использованием Python. Мне нужно, чтобы сообщение отображалось пользователю, пока скрипт продолжает работать. Это должно иметь некоторое обновление статуса, например: "Сохранение результатов теста", которое не должно ждать, пока пользователь нажмет "ОК". По сути, мне нужно создать сообщение, которое всплывает и закрывается без необходимости делать это пользователю.

В настоящее время я использую модуль easygui для добавления GUI.Easygui можно использовать для создания таких окон сообщений, но они не могут быть закрыты в коде и должны ждать, пока пользователь закроет их, чтобы скрипт продолжил работу.

Заранее спасибо за ваше время и помощь.

Kavitha

2 ответа

Чтобы принудительно удалить по таймауту окно сообщения, созданное с помощью easygui, вы можете использовать .after() метод:

from Tkinter    import Tk
from contextlib import contextmanager

@contextmanager
def tk(timeout=5):
    root = Tk() # default root
    root.withdraw() # remove from the screen

    # destroy all widgets in `timeout` seconds
    func_id = root.after(int(1000*timeout), root.quit)
    try:
        yield root
    finally: # cleanup
        root.after_cancel(func_id) # cancel callback
        root.destroy()

пример

import easygui

with tk(timeout=1.5):
    easygui.msgbox('message') # it blocks for at most `timeout` seconds

easygui не очень подходит для вашего случая использования. Рассмотрим unittestgui.py или Jenkins.

Если вы начали создавать графический интерфейс, вы сможете использовать textbox() функция. Текстовое поле может использоваться как место для ваших сообщений о состоянии, вместо того, чтобы отображать отдельное диалоговое окно.

Я получил следующее описание textbox() здесь:

текстовое поле (msg='', title=' ', text='', codebox=0)

Отображение текста пропорциональным шрифтом с переносом строк при переносе слов. Эта функция подходит для отображения общего письменного текста. Параметр text должен быть строкой или списком или кортежем строк для отображения в текстовом поле.

Другие вопросы по тегам