如何新建一个window之类的消息框?
How to create a new window like a message box?
大家好,希望你们一切顺利,我不明白如何在 Tkinter 中创建一个新的 window 例如,当我按下一个类似于消息框的按钮时,我的意思是创建一个新的 window 并且我无法返回 previous/main window,直到我关闭或在新的 window 中按确定。如何简单地创建一个新的 window 并且用户不能单击主 window 并且在他关闭它之前不能离开,就像在消息框中发生的一样?谢谢!这是一个基本的起始代码,如何将我正在谈论的 window 绑定到按钮?
from tkinter import *
window = Tk()
window.geometry("300x300")
button = Button(window,text="Click here")
button.pack()
window.mainloop()
这种控制应用程序的对话框称为“模态对话框”。可以使用grab_set
方法实现。
from tkinter import *
def new_window():
def close_window():
dialog.grab_release()
dialog.destroy()
dialog = Toplevel(window)
close = Button(dialog,text="close",command=close_window)
close.pack()
dialog.grab_set()
window = Tk()
window.geometry("300x300")
button = Button(window,text="Click here",command=new_window)
button.pack()
window.mainloop()
当您按下“单击此处”时,此代码会创建一个新的顶层 window。该对话框将抓取当前应用程序的所有事件,直到您单击将释放抓取的关闭按钮。
编辑
正如@scotty3785 上面提到的,您可以使用 grab_set()
方法将焦点保持在顶层 window。但是根 window 仍然是可拖动的。但是阅读文档,我遇到了 grab_set_global()
方法。
w.grab_set_global()
Widget w grabs all events for the entire screen. This is considered impolite and should be used only in great need. Any other grab in force goes away.
虽然这被认为是不礼貌的,但它确实达到了您在这里想要达到的目的。确保也将焦点设置在顶层 window:
import tkinter as tk
root = tk.Tk()
root.geometry("300x300")
def show_message():
dialog = tk.Toplevel(root)
close = tk.Button(dialog,text="close",command=dialog.destroy)
close.pack()
dialog.focus_set()
dialog.grab_set_global()
button = tk.Button(root,text="Click here", command=show_message)
button.pack()
root.mainloop()
替代解决方案
Tkinter 的 messagebox
小部件可以完成您在这里想要实现的目标。当消息框可见时,您将无法关注根 window.
参考
例子
import tkinter as tk
from tkinter import messagebox as mb
root = tk.Tk()
def dialog(*args):
mb.showinfo("Dialog", "Hello World!")
btn = tk.Button(root, text="Click me", command=dialog)
btn.pack()
root.mainloop()
大家好,希望你们一切顺利,我不明白如何在 Tkinter 中创建一个新的 window 例如,当我按下一个类似于消息框的按钮时,我的意思是创建一个新的 window 并且我无法返回 previous/main window,直到我关闭或在新的 window 中按确定。如何简单地创建一个新的 window 并且用户不能单击主 window 并且在他关闭它之前不能离开,就像在消息框中发生的一样?谢谢!这是一个基本的起始代码,如何将我正在谈论的 window 绑定到按钮?
from tkinter import *
window = Tk()
window.geometry("300x300")
button = Button(window,text="Click here")
button.pack()
window.mainloop()
这种控制应用程序的对话框称为“模态对话框”。可以使用grab_set
方法实现。
from tkinter import *
def new_window():
def close_window():
dialog.grab_release()
dialog.destroy()
dialog = Toplevel(window)
close = Button(dialog,text="close",command=close_window)
close.pack()
dialog.grab_set()
window = Tk()
window.geometry("300x300")
button = Button(window,text="Click here",command=new_window)
button.pack()
window.mainloop()
当您按下“单击此处”时,此代码会创建一个新的顶层 window。该对话框将抓取当前应用程序的所有事件,直到您单击将释放抓取的关闭按钮。
编辑
正如@scotty3785 上面提到的,您可以使用 grab_set()
方法将焦点保持在顶层 window。但是根 window 仍然是可拖动的。但是阅读文档,我遇到了 grab_set_global()
方法。
w.grab_set_global() Widget w grabs all events for the entire screen. This is considered impolite and should be used only in great need. Any other grab in force goes away.
虽然这被认为是不礼貌的,但它确实达到了您在这里想要达到的目的。确保也将焦点设置在顶层 window:
import tkinter as tk
root = tk.Tk()
root.geometry("300x300")
def show_message():
dialog = tk.Toplevel(root)
close = tk.Button(dialog,text="close",command=dialog.destroy)
close.pack()
dialog.focus_set()
dialog.grab_set_global()
button = tk.Button(root,text="Click here", command=show_message)
button.pack()
root.mainloop()
替代解决方案
Tkinter 的 messagebox
小部件可以完成您在这里想要实现的目标。当消息框可见时,您将无法关注根 window.
参考
例子
import tkinter as tk
from tkinter import messagebox as mb
root = tk.Tk()
def dialog(*args):
mb.showinfo("Dialog", "Hello World!")
btn = tk.Button(root, text="Click me", command=dialog)
btn.pack()
root.mainloop()