2013-06-24 16 views
13

Voglio mostrare una finestra informativa nel mio script python in esecuzione su ubuntu. Sto utilizzando il seguente codice:Tkinter messagebox senza finestra?

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

Questo funziona, ma c'è una finestra vuota visualizzata, con la finestra di messaggio sulla parte superiore. Come posso sbarazzarmi della finestra e centrare semplicemente la finestra di messaggio sullo schermo (window manager è gnome 2)?

Questo è solo per visualizzare alcune informazioni da uno script della riga di comando (una password che è il motivo per cui non voglio solo farlo eco alla console).

risposta

18

Tkinter deve disporre di una finestra radice. Se non ne crei uno, ne verrà creato uno per te. Se non si desidera che questa finestra di root, creare e poi nasconderlo:

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

vostra altra scelta è quella di non uso tkMessageBox, ma invece mettere il vostro messaggio nella finestra principale. Il vantaggio di questo approccio è che puoi far apparire la finestra esattamente come vuoi che appaia.

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() 

(Personalmente mi sento di scegliere un approccio più orientato agli oggetti, ma sto cercando di mantenere il codice piccola per questo esempio)

+0

perfetta, grazie – user1491250

+0

C'è un modo per rendere il testo selezionabile in modo da posso copiarlo? – user1491250

+0

@ user1491250: sì. Utilizzare un widget di testo anziché un'etichetta. Puoi modificare l'ampiezza e i colori del margine per farlo apparire come un'etichetta. –

3

Per evitare un "flash", come viene creata la finestra di root, utilizzare questa leggera variazione sulla risposta accettata:

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

Importa messaggio singolo. Per esempio:

from tkinter import * 
import tkinter.messagebox 

o

from tkinter import messagebox