繁体   English   中英

没有窗口的 Tkinter 消息框?

[英]Tkinter messagebox without window?

我想在运行在 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()

单独导入消息框。 例如:

from tkinter import *
import tkinter.messagebox

要么

from tkinter import messagebox

这适用于python 3

from tkinter import *
from tkinter import messagebox

root = Tk()
root.withdraw()
messagebox.showinfo("Window Title", "Your Message")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM