【问题标题】:not able to hide message box in wxpython无法在 wxpython 中隐藏消息框
【发布时间】:2013-02-23 05:22:20
【问题描述】:

大家好,尝试了一切,现在我正在征求您的建议。

我无法隐藏我的消息框。

代码是:

    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)))    

第 3 行大约需要 6-7 分钟才能完成。直到那个时候消息框会出现在屏幕上,我想让它隐藏起来,直到安装过程完成。 我试过隐藏,未来调用,关闭,禁用..但每次我得到'int对象没有属性“”。

【问题讨论】:

    标签: python wxpython subprocess wxwidgets


    【解决方案1】:

    消息框必须在wxMessageBox()返回时隐藏并销毁,这里肯定有其他事情发生。

    一般来说,如果您想确保所有待处理的事件都已处理(并且所有应该重新绘制/调整大小/关闭的窗口确实都已处理),请使用wx.CallAfter() 启动您的长时间运行的进程稍晚一点。

    当然,从 GUI 程序中运行几分钟的阻塞操作无论如何都是一个坏主意,但这是另一回事...

    【讨论】:

      【解决方案2】:

      如果您需要对消息框进行更多控制,请改用消息对话框。消息框直接返回答案,所以无法控制窗口。创建消息对话框可让您控制窗口。

      这是一个简单的例子:

      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'
      

      【讨论】:

      • 但是现在当我按“否”时,我无法显示已损坏的面板
      • 此答案中的代码与wxMessageBox() 函数在内部执行的操作完全相同,因此不可能更改任何内容。
      猜你喜欢
      • 2015-06-28
      • 2021-09-29
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      相关资源
      最近更新 更多