You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter中如何禁止MessageBox弹出时点击boxShow窗口的按钮

解决Tkinter messagebox阻塞子窗口按钮的问题

你的问题核心在于:messagebox默认以主窗口root作为父窗口,所以只会阻塞主窗口,而你用Tk()创建的boxShow是另一个独立的根窗口,不会被阻塞。要实现messagebox打开时阻塞boxShow窗口的按钮,需要做两个关键修改:

  • 用Toplevel替代Tk()创建boxShow(一个Tk程序应该只有一个根窗口,其他窗口用Toplevel作为子窗口)
  • 调用messagebox时指定父窗口为boxShow,让模态对话框绑定到这个子窗口

修改后的完整代码

from tkinter import *
from tkinter import messagebox

def showbox(parent):
    # 指定messagebox的父窗口为boxShow
    messagebox.showinfo("Title", "Random text", parent=parent)

def show():
    # 用Toplevel创建子窗口,依附于root
    boxShow = Toplevel(root)
    boxShow.geometry("800x250")
    # 把boxShow作为参数传给showbox
    Button(boxShow, text="messagebox", command=lambda: showbox(boxShow)).pack()

root = Tk()
root.title("Main Window")
root.geometry("500x500")

show_button = Button(root, text="Show popup", command=show)
show_button.place(x=200, y=200)

root.mainloop()

关键说明

  1. 用Toplevel创建子窗口:Toplevel是依附于已有根窗口的子窗口,而Tk()会创建新的独立根窗口,这不符合Tkinter的设计规范,也会导致模态对话框无法正确阻塞它。
  2. 指定messagebox的parent参数:通过parent=boxShow,让messagebox以boxShow为父窗口,此时对话框会成为boxShow的模态窗口,打开时boxShow上的所有控件都会被阻塞,无法点击。

内容的提问来源于stack exchange,提问作者Giannis Tsakas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 05:45:36