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 должен быть строкой или списком или кортежем строк для отображения в текстовом поле.