dragov 发表于 前天 17:39

messagebox.showinfo ( ) 中的 parent 属性如何应用 ?

from tkinter import messagebox
from tkinter import *
root=Tk()
def a():
      messagebox.showinfo(
                title="456",
                message="123",
                icon="info",
                type="ok",
                parent=c)
b=Button(root,text="M",command=a)
b.pack()
c=Button(root,text="N")
c.pack()
mainloop()

第 10 行 中 的 parent = c , 是 这 样 使 用 吗?

FishC 发表于 前天 17:44

在 Tkinter 中,messagebox.showinfo() 的 parent 属性必须指向一个窗口对象(如 Tk 或 Toplevel 实例),不能是按钮等普通控件。你的代码中 parent=c(c 是按钮)会导致错误。

### 正确用法:
1. parent 应设置为父窗口对象(如主窗口 root)
2. 作用是使消息框显示在父窗口上方(居中),并随父窗口最小化

### 修正后的代码:

from tkinter import messagebox
from tkinter import *

root = Tk()

def a():
    # parent 必须是窗口对象(root 或 Toplevel)
    messagebox.showinfo(
      title="456",
      message="123",
      parent=root# 关键修改:指向主窗口
    )

b = Button(root, text="M", command=a)
b.pack()
c = Button(root, text="N")
c.pack()

mainloop()


### 常见问题说明:
1. 错误原因:按钮 c 不是有效窗口对象
2. 参数简化:icon 和 type 可省略(showinfo 默认就是 "info" 图标和 "ok" 按钮)
3. 替代方案:若需要子窗口,需创建 Toplevel 实例

### 精简版写法:

def a():
    messagebox.showinfo("456", "123", parent=root)


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 前天 17:53

在Python的Tkinter中,messagebox.showinfo()的parent属性用于指定弹窗的父窗口,确保弹窗与特定窗口关联而非默认的根窗口。以下是具体应用场景和方法:
基础用法‌
当存在多级窗口(如主窗口和Toplevel子窗口)时,若不设置parent,弹窗会默认附着于根窗口,可能导致窗口焦点混乱。通过parent参数可明确弹窗归属:

messagebox.showinfo("提示", "操作成功", parent=子窗口对象)
这样弹窗会始终显示在子窗口上方,避免跳转到根窗口‌。
参数说明‌
parent需接收一个Tkinter窗口对象(如Toplevel或Frame的实例)。
若未指定,系统自动选择根窗口作为父级,可能引发界面层级问题‌。
实际案例‌
假设主窗口root下有一个Toplevel窗口child_win,需在其上弹出信息框:

from tkinter import Tk, Toplevel, messagebox
root = Tk()
child_win = Toplevel(root)
messagebox.showinfo("子窗口提示", "请在子窗口操作", parent=child_win)
此时弹窗会绑定到child_win而非root‌。
注意事项‌
确保parent对象有效且未被销毁,否则可能报错。
跨平台开发时,parent的层级管理可能因系统差异略有不同,需测试验证‌。
通过合理使用parent参数,可以提升GUI程序的交互逻辑和用户体验‌。

某一个“天” 发表于 前天 17:54

简单来说就是把它放到一个窗口上,防止出现混乱
页: [1]
查看完整版本: messagebox.showinfo ( ) 中的 parent 属性如何应用 ?