首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wxPython: MainLoop()似乎挂起了

wxPython: MainLoop()似乎挂起了
EN

Stack Overflow用户
提问于 2010-05-18 16:29:15
回答 1查看 1.1K关注 0票数 1

据我所知,我的问题源于wxApp的使用。

在一个小的子例程中,我调用一个wx.MessageDialog来请求是或否。我拿回答案--一个过程--一些东西--非常精确。下面的示例代码实际上可以工作(尽管它可能很难看),除了对话框在按下其中一个按钮后保持打开.

代码语言:javascript
复制
import wx
from os import path
def HasFile(filename):
    if path.isfile(filename ):
        app = wx.App()
        dial = wx.MessageDialog(None, 
                                'Die Datei "'+filename+'" wurde gefunden.\nSoll sie eingelesen werden?',
                                'Bitte antworten',
                                wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
        result = dial.ShowModal()
        dial.EndModal(retCode=0)
        dial.Destroy()
        app.MainLoop()
        return result == wx.ID_YES
    else:
        return False

因此,当程序的其余部分做任何预期的事情时,盒子就放在那里。我后来对matplotlib的调用似乎也会产生错误(准确地说,是Tkinter错误),可能是因为wx?

编辑:我试图用调用app.Destroy()来结束这个应用程序。这并不能改变盒子还在的事实。当我随后发出一个app.IsActive()时,整个程序就会退出(就像sys.exit()一样)!怎么会这样?

编辑2:添加这样的wxApp不是个好主意,因为其他脚本也会受到影响。随后的绘图命令不会显示,我也不知道如何解决这个问题。因此,我决定一起删除DialogBox。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-20 20:58:53

在删除EndModal之后调用函数,它可以正常工作,并在选择yes/no后将我返回到控制台。选择其中一个基本调用EndModal,然后手动调用它将引发异常

代码语言:javascript
复制
Traceback (most recent call last):
  File "blah.py", line 19, in <module>
    HasFile("C:\tbzrcommand_args.txt")
  File "blah.py", line 12, in HasFile
    dial.EndModal(retCode=0)
  File "C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_windows.py", line 715, in EndModal
    return _windows_.Dialog_EndModal(*args, **kwargs)
wx._core.PyAssertionError: C++ assertion "IsModal()" failed at ..\..\src\msw\dialog.cpp(361) in wxDialog::EndModal(): EndModal() called for non modal dialog

修正:

代码语言:javascript
复制
import wx
from os import path
def HasFile(filename):
    if path.isfile(filename ):
        print 'gfd'
        app = wx.App(redirect=False)
        dial = wx.MessageDialog(None,
                                'Die Datei "'+filename+'" wurde gefunden.\nSoll sie eingelesen werden?',
                                'Bitte antworten',
                                wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
        result = dial.ShowModal()
        dial.Destroy()
        app.MainLoop()
        return result == wx.ID_YES
    else:
        return False
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2859163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档