我的问题源于我所知道的使用wxApp。
在litte子例程中,我调用wx.MessageDialog来询问是或否。我按顺序检索答案过程。 下面我的示例代码实际上有效(虽然它可能很难看),只是在按下其中一个按钮后对话框保持打开...
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。
答案 0 :(得分:2)
删除EndModal调用您的函数,它可以正常工作,并在选择是/否后将我返回到控制台。选择其中一个基本上调用EndModal,并且手动调用它会抛出异常
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
修正:
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