无法在wxpython中隐藏消息框

0 投票
2 回答
700 浏览
提问于 2025-04-17 16:50

大家好,我试过很多方法,现在想请教你们的建议。

我无法隐藏我的消息框。

代码是:

    ans = wx.MessageBox("length = %s , height = %s " % (str(len), str(ht)))

    if ans = wx.Yes:

        subprocess.call("pword | sudo -S ./Install.sh %s %s" % (str(len),str(ht)))    

第三行大约需要6到7分钟才能完成。在这段时间里,消息框会一直显示在屏幕上,我想在安装过程完成之前把它隐藏起来。我尝试过隐藏、未来调用、关闭、禁用……但每次都出现“int对象没有这个属性”的错误。

2 个回答

0

如果你想对消息框有更多的控制,可以使用消息对话框。消息框直接返回答案,所以你无法控制这个窗口。而创建一个消息对话框可以让你更好地掌控这个窗口。

下面是一个简单的例子:

import wx

app = wx.App(False)
box = wx.MessageDialog(None, 'Yes or No?', caption='Dialog Title', style=wx.YES_NO | wx.YES_DEFAULT)
result = box.ShowModal()
box.Destroy()
if result == wx.ID_YES:
    print 'yes'
else:
    print 'no'
0

在调用 wxMessageBox() 这个函数返回之前,消息框必须被隐藏并销毁,这里肯定发生了其他事情。

一般来说,如果你想确保所有待处理的事件都已经处理完毕(也就是说,所有需要重新绘制、调整大小或关闭的窗口都已经处理),可以使用 wx.CallAfter() 来稍微延迟一下启动你的长时间运行的过程。

当然,从图形界面程序中运行一个需要几分钟的阻塞操作本身就是个坏主意,不过这又是另一个话题……

撰写回答