Подтвердить что ты не робот

Tkinter сообщение без окна?

Я хочу показать информационное окно в моем python script, запущенном на ubuntu. Я использую следующий код:

import tkMessageBox
tkMessageBox.showinfo("Say Hello", "Hello World")

Это работает, но там отображается пустое окно с надписью сверху. Как я могу избавиться от окна и просто разместить окно сообщения на экране (диспетчер окон - gnome 2)?

Это просто для отображения некоторой информации из командной строки script (пароль, поэтому я не хочу просто отсылать его на консоль).

4b9b3361

Ответ 1

Tkinter должен иметь корневое окно. Если вы его не создадите, вы будете созданы для вас. Если вы не хотите это корневое окно, создайте его, а затем скройте его:

import Tkinter as tk
root = tk.Tk()
root.withdraw()
tkMessageBox.showinfo("Say Hello", "Hello World")

Другой выбор - не использовать tkMessageBox, а вместо этого поместить свое сообщение в корневое окно. Преимущество такого подхода заключается в том, что вы можете заставить окно выглядеть так, как вы хотите, чтобы он выглядел.

import Tkinter as tk
root = tk.Tk()
root.title("Say Hello")
label = tk.Label(root, text="Hello World")
label.pack(side="top", fill="both", expand=True, padx=20, pady=20)
button = tk.Button(root, text="OK", command=lambda: root.destroy())
button.pack(side="bottom", fill="none", expand=True)
root.mainloop()

(лично я бы выбрал более объектно-ориентированный подход, но я стараюсь, чтобы этот код был небольшим для этого примера)

Ответ 2

Чтобы избежать "вспышки" при создании корневого окна, используйте этот небольшой вариант для принятого ответа:

import Tkinter as tk
root = tk.Tk()
root.overrideredirect(1)
root.withdraw()
tkMessageBox.showinfo("Say Hello", "Hello World")

Ответ 3

Импортировать почтовый ящик отдельно. Например:

from tkinter import *
import tkinter.messagebox

или

from tkinter import messagebox

Ответ 4

Для Python 3:

import tkinter, tkinter.messagebox

def messagebox(title, text):
    root = tkinter.Tk()
    root.withdraw()
    tkinter.messagebox.showinfo(title, text)
    root.destroy()

С собственной поддержкой Windows, когда установлен pywin32:

try:
    from win32ui import MessageBox
except ImportError:
    import tkinter, tkinter.messagebox
    def MessageBox(text, title):
        root = tkinter.Tk()
        root.withdraw()
        tkinter.messagebox.showinfo(title, text)
        root.destroy()