我想在运行在Ubuntu上的Python脚本中展示一个信息窗口。我正在使用以下代码:
import tkMessageBox
tkMessageBox.showinfo("Say Hello", "Hello World")
这个方法可以运行,但是会出现一个空白的窗口,并在窗口顶部显示消息框。我该如何摆脱窗口,只将消息框居中显示在屏幕上 (窗口管理器为gnome 2)?
这只是为了从命令行脚本中显示一些信息(密码,所以我不想将其直接输出到控制台)。
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()
(个人而言,我会选择更多面向对象的方法,但为了这个例子保持代码简洁,我尝试保持现状)
为了避免在创建根窗口时出现“闪烁”,请使用这个对已接受答案的轻微变化:
import Tkinter as tk
root = tk.Tk()
root.overrideredirect(1)
root.withdraw()
tkMessageBox.showinfo("Say Hello", "Hello World")
对于Python 3:
import tkinter, tkinter.messagebox
def messagebox(title, text):
root = tkinter.Tk()
root.withdraw()
tkinter.messagebox.showinfo(title, text)
root.destroy()
在安装了pywin32
的情况下,具有本地Windows支持:
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()
这适用于Python 3
from tkinter import *
from tkinter import messagebox
root = Tk()
root.withdraw()
messagebox.showinfo("Window Title", "Your Message")
逐个导入消息框。例如:
from tkinter import *
import tkinter.messagebox
或者
from tkinter import messagebox